use strict; use Win32::OLE('in'); Win32::OLE->Option(Warn => 0); use constant wbemFlagReturnImmediately => 0x10; use constant wbemFlagForwardOnly => 0x20; my ($strComputer, $objSWbemLocator, $objSWbemServices, $colSWbemObjectSet, $objWMILastError); $strComputer = '.'; #SWbemLocator - Connect to server $objSWbemLocator = Win32::OLE->new('WbemScripting.SWbemLocator'); $objSWbemServices = $objSWbemLocator->ConnectServer($strComputer, 'root\\cimv2', 'domain\username', 'password'); if ((0 + Win32::OLE::LastError())) { print '0x' . sprintf("%x", (0 + Win32::OLE::LastError())) . ' - ' . ('' . Win32::OLE::LastError()), "\n"; } #SWbemServices - ExecQuery $colSWbemObjectSet = $objSWbemServices->ExecQuery('SELECT * FROM Win32_Services', 'WQL', wbemFlagReturnImmediately + wbemFlagForwardOnly); if ((0 + Win32::OLE::LastError())) { print '0x' . sprintf("%x", (0 + Win32::OLE::LastError())) . ' - ' . ('' . Win32::OLE::LastError()), "\n"; $objWMILastError = Win32::OLE->new('WbemScripting.SWbemLastError'); print 'Operation: ' . $objWMILastError->Operation, "\n"; print 'ParameterInfo: ' . $objWMILastError->ParameterInfo, "\n"; print 'ProviderName: ' . $objWMILastError->ProviderName, "\n"; exit (1); } foreach my $objSWbemObject (in $colSWbemObjectSet) { print 'Name: ' . $objSWbemObject->Name, "\n"; }