Condividi tramite


Scripting con SWbemObject

L'oggetto scripting SWbemObject è l'oggetto WMI generico, definendo proprietà e metodi che possono essere usati indipendentemente dall'oggetto WMI specifico a cui è associato l'oggetto SWbemObject . Tutti gli oggetti WMI, ad esempio un'istanza di Win32_Process o qualsiasi altra classe di dati WMI, sono rappresentati da SWbemObject e possono usare le proprietà e i metodi comuni SWbemObject oltre alle proprie proprietà e metodi specifici.

Ad esempio, usare lo script seguente per ottenere tutte le istanze di un Win32_Process chiamando il metodo SWbemObject.Instances_ . ClsobjProcess rappresenta sia la definizione di classe Win32_Process che un oggetto SWbemObject.

strComputer = "."
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set clsobjProcess = objWMIServices.Get("Win32_Process")
Set colProcesses = clsobjProcess.Instances_()
For Each Process in colProcesses
    WScript.Echo Process.Name
Next

Nell'esempio seguente viene ottenuta un'istanza specifica di Win32_Service che rappresenta il servizio Alerter e la archivia in objAlerter. È quindi possibile chiamare metodi SWbemObject , ad esempio WScript.Echo objAlerter.Path_ o metodi definiti dalla classe di dati, ad esempio WScript.Echo objAlerter.State. objAlerter che rappresenta sia un'istanza di Win32_Service che un oggetto SWbemObject.

strComputer = "." 
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set objAlerter = objWMIServices.Get("Win32_Service.Name='Alerter'")
WScript.Echo objAlerter.Path_
objAlerter.StopService()
WScript.Echo objAlerter.State
For each Prop in myObject.Properties_
    Wscript.Echo Prop.Name
Next

La chiamata a SWbemObject.Instances_ ottiene un altro oggetto di scripting WMI generico, SWbemObjectSet. Come illustrato, l'oggetto SWbemObjectSet può essere considerato come raccolta.

Set clsobjProcess = objWMIServices.Get("Win32_Process")

È possibile identificare i metodi SWbemObject perché terminano tutti con un carattere di sottolineatura (_), ad esempio SWbemObject.Instances_.

SWbemObjectEx estende le proprietà di SWbemObject. Ad esempio, è possibile aggiornare i dati di qualsiasi oggetto WMI, ad esempio un'istanza di Win32_Process, tramite una chiamata a SWbemObjectEx.Refresh_.

Nell'esempio seguente viene illustrato come è possibile aggiornare i dati di errore della pagina del processo di sistema ogni cinque secondi.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'System'",,48) 
For Each Process in colProcesses
        i = 0
        Do Until i = 5
            i = i + 1
            Wscript.Echo "PageFaults = " & Process.PageFaults 
            Wscript.Sleep 10000
            Process.Refresh_
        Loop
Next

Per altre informazioni sull'aggiornamento dei dati usando un oggetto SWbemRefresher , vedere Aggiornamento dei dati WMI negli script.

Il SWbemObject.Put_ e PutAsync_ consente di scrivere le modifiche in qualsiasi oggetto WMI. Questi metodi esegue il commit solo delle modifiche a un oggetto nello spazio dei nomi in cui è stato creato l'oggetto. È possibile scrivere l'oggetto in uno spazio dei nomi diverso usando SWbemServicesEx.Put o SWbemServicesEx.PutAsync.

API di scripting per WMI

Creazione di uno script WMI

Aggiornamento di un'intera istanza

Chiamata di un metodo