Udostępnij za pośrednictwem


Zadania usługi WMI: usługi

Zadania WMI dla usług uzyskują informacje na temat usług, w tym usług zależnych lub antecedent. Inne przykłady można znaleźć w witrynie TechNet ScriptCenter pod adresem https://www.microsoft.com/technet.

Przykłady skryptów pokazane w tym temacie uzyskują dane tylko z komputera lokalnego. Aby uzyskać więcej informacji o sposobie uzyskiwania danych z komputerów zdalnych za pomocą skryptu, zobacz Connecting to WMI on a Remote Computer.

Poniższa procedura opisuje sposób uruchamiania skryptu.

Aby uruchomić skryptu

  1. Skopiuj kod i zapisz go w pliku z rozszerzeniem vbs, takim jak nazwa pliku.vbs. Upewnij się, że edytor tekstów nie dodaje rozszerzenia .txt do pliku.
  2. Otwórz okno wiersza polecenia i przejdź do katalogu, w którym zapisano plik.
  3. Wpisz cscript nazwa pliku.vbs w wierszu polecenia.
  4. Jeśli nie możesz uzyskać dostępu do dziennika zdarzeń, sprawdź, czy korzystasz z wiersza polecenia z podwyższonym poziomem uprawnień. Niektóre dzienniki zdarzeń, takie jak dziennik zdarzeń zabezpieczeń, mogą być chronione przez kontrolę dostępu użytkowników (UAC).

Nuta

Domyślnie skrypt cscript wyświetla dane wyjściowe skryptu w oknie wiersza polecenia. Ponieważ skrypty usługi WMI mogą generować duże ilości danych wyjściowych, może być konieczne przekierowanie danych wyjściowych do pliku. Wpisz cscript filename.vbs > outfile.txt w wierszu polecenia, aby przekierować dane wyjściowe pliku pliku.vbs skryptu, aby outfile.txt.

W poniższej tabeli wymieniono przykłady skryptów, których można użyć do uzyskania różnych typów danych z komputera lokalnego.

Jak mogę... Klasy lub metody WMI
... określić, które usługi są uruchomione, a które nie? Użyj klasy Win32_Service, aby sprawdzić stan wszystkich usług. Właściwość stanu informuje o tym, czy usługa została zatrzymana lub uruchomiona.
VB
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service",,48) 
For Each objItem in colItems 
    Wscript.Echo "Service Name: " & objItem.Name & VBNewLine & "State: " & objItem.State
Next
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | format-list Name, State
... czy uniemożliwić użytkownikom zasilania uruchamianie niektórych usług?

Użyj klasy Win32_Service i metody ChangeStartMode, aby ustawić właściwość StartMode na Wyłączone. Nie można uruchomić wyłączonych usług, a domyślnie użytkownicy usługi Power Users nie mogą zmienić trybu uruchamiania usługi.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where StartMode = 'Manual'")
For Each objService in colServiceList
    errReturnCode = objService.Change( , , , , "Disabled")
    WScript.Echo "Changed manual service to disabled: " & objService.Name   
Next
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.startMode -eq "Manual"} | `
    foreach-object { [void]$_.changeStartMode('Disabled') }
... uruchamianie i zatrzymywanie usług?

Użyj klasy Win32_Service i metod StopService i StartService.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='Alerter'")
For Each objService in colListOfServices
    objService.StartService()
    Wscript.Echo "Started Alerter service"
Next
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.Name -eq "Alerter"} | `
    foreach-object { [void]$_.StartService() }
... czy zmienić hasła konta usługi przy użyciu skryptu?

Użyj klasy Win32_Service i metody Change.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service")
For Each objservice in colServiceList
    If objService.StartName = ".\netsvc" Then
        errReturn = objService.Change( , , , , , , , "password")  
    End If 
Next
.. określić, które usługi mogę zatrzymać?

Użyj klasy Win32_Service i sprawdź wartość właściwości AcceptStop.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service Where AcceptStop = True")
For Each objService in colServices
    Wscript.Echo objService.DisplayName 
Next
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.AcceptStop -eq "True"} | `
     format-list DisplayName
... czy znaleźć usługi, które muszą być uruchomione, zanim mogę uruchomić usługę DHCP?

Wykonaj zapytanie dotyczące ASSOCIATORS OF klasy Win32_Service o nazwie "DHCP", która znajduje się w klasie Win32_DependentService i ma właściwość "Zależne" we właściwości roli. rola oznacza rolę usługi DHCP: w tym przypadku jest zależna od innych usług, które są uruchamiane.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators Of " _ 
    & "{Win32_Service.Name='dhcp'} Where " _
    & "AssocClass=Win32_DependentService " _
    & "Role=Dependent") 
For Each objService in colServiceList
Wscript.Echo objService.DisplayName 
Next
PowerShell
$query = "Associators Of {Win32_Service.Name='dhcp'} Where AssocClass=Win32_DependentService Role=Dependent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list DisplayName
... znajdź usługi, które wymagają uruchomienia usługi WMI (Winmgmt) przed rozpoczęciem?

Wykonaj zapytanie o ASSOCIATORS OF klasy Win32_Service o nazwie "DHCP", które znajdują się w klasie Win32_DependentService i mają właściwość "Antecendent" we właściwości Role. rola oznacza rolę usługi rasman: w tym przypadku przed rozpoczęciem usług zależnych należy go uruchomić.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\ & strComputer & "\root\cimv2")
Set colServiceList = _
    objWMIService.ExecQuery("Associators of " _
    & "{Win32_Service.Name='winmgmt'} Where " _
    & "AssocClass=Win32_DependentService " _
    & "Role=Antecedent" )
For Each objService in colServiceList
Wscript.Echo "Name: " & objService.Name & VBTab & "Display Name: " & objService.DisplayName 
Next
PowerShell
$query = "Associators of {Win32_Service.Name='winmgmt'} Where AssocClass=Win32_DependentService Role=Antecedent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list Name, DisplayName

zadania usługi WMI dla skryptów i aplikacji

przykłady aplikacji WMI C++

TechNet ScriptCenter

`