Attività WMI: Servizi

Le attività WMI per i servizi ottengono informazioni sui servizi, inclusi i servizi dipendenti o precedenti. Per altri esempi, vedere TechNet ScriptCenter all'indirizzo https://www.microsoft.com/technet.

Gli esempi di script illustrati in questo argomento ottengono dati solo dal computer locale. Per altre informazioni su come usare lo script per ottenere dati da computer remoti, vedere Connessione a WMI in un computer remoto.

La procedura seguente descrive come eseguire uno script.

Per eseguire uno script

  1. Copiare il codice e salvarlo in un file con estensione vbs, ad esempio filename.vbs. Assicurarsi che l'editor di testo non aggiunga un'estensione .txt al file.
  2. Aprire una finestra del prompt dei comandi e passare alla directory in cui è stato salvato il file.
  3. Digitare cscript filename.vbs al prompt dei comandi.
  4. Se non è possibile accedere a un registro eventi, verificare se si esegue da un prompt dei comandi con privilegi elevati. Alcuni registri eventi, ad esempio il registro eventi di sicurezza, possono essere protetti da controlli di accesso utente.

Nota

Per impostazione predefinita, cscript visualizza l'output di uno script nella finestra del prompt dei comandi. Poiché gli script WMI possono produrre grandi quantità di output, è possibile reindirizzare l'output a un file. Digitare cscript filename.vbs > outfile.txt al prompt dei comandi per reindirizzare l'output dello script filename.vbs a outfile.txt.

Nella tabella seguente sono elencati gli esempi di script che possono essere usati per ottenere vari tipi di dati dal computer locale.

Ricerca per categorie Classi o metodi WMI
... determinare quali servizi sono in esecuzione e quali non sono? Usare la classe Win32_Service per controllare lo stato di tutti i servizi. La proprietà state consente di sapere se un servizio è arrestato o in esecuzione.
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
... interrompere l'avvio di determinati servizi da parte di Power Users?

Utilizzare la classe Win32_Service e il metodo ChangeStartMode per impostare la proprietà StartMode su Disabled. Non è possibile avviare i servizi disabilitati e, per impostazione predefinita, Power Users non può modificare la modalità di avvio di un servizio.

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') }
... avviare e arrestare i servizi?

Usare la classe Win32_Service e i metodi StopService e 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() }
... modificare le password dell'account del servizio usando uno script?

Usare la classe Win32_Service e il metodo 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
.. determinare quali servizi è possibile arrestare?

Utilizzare la classe Win32_Service e controllare il valore della proprietà 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
... trovare i servizi che devono essere in esecuzione prima di poter avviare il servizio DHCP?

Query per ASSOCIATORS OF la classe Win32_Service denominata "DHCP" che si trovano nella classe Win32_DependentService e hanno "Dependent" nella proprietà Role . Il ruolo indica il ruolo del servizio DHCP: in questo caso, dipende dagli altri servizi avviati.

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
... trovare i servizi che richiedono l'esecuzione del servizio WMI (Winmgmt) prima che possano essere avviati?

Eseguire una query per ASSOCIATORS OF la classe Win32_Service denominata "DHCP" presente nella classe Win32_DependentService e avere "Antecendent" nella proprietà Role . Role indica il ruolo del servizio rasman: in questo caso, deve essere avviato prima dei servizi dipendenti.

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

Attività WMI per script e applicazioni

Esempi di applicazioni WMI C++

TechNet ScriptCenter

`