Recupero di oggetti WMI (Get-WmiObject)

Strumentazione gestione Windows (WMI) è una tecnologia di base per l'amministrazione di sistemi Windows perché consente di visualizzare una vasta gamma di informazioni in modo uniforme. In considerazione delle numerose possibilità offerte da WMI, il cmdlet di Windows PowerShell per l'accesso a oggetti WMI Get-WmiObject è uno dei più utili per il lavoro. Di seguito verrà illustrato come utilizzare Get-WmiObject per accedere a oggetti WMI e come utilizzare tali oggetti per eseguire operazioni specifiche.

Visualizzazione dell'elenco delle classi WMI

Il primo problema riscontrato dalla maggior parte degli utenti di WMI è individuare le operazioni eseguibili con WMI. Le risorse gestibili vengono descritte nelle classi WMI. Sono disponibili centinaia di classi WMI, alcune delle quali includono decine di proprietà.

Con Get-WmiObject questo problema viene risolto consentendo di individuare le classi WMI. Per ottenere un elenco delle classi WMI disponibili nel computer locale, digitare:

PS> Get-WmiObject -List


__SecurityRelatedClass                  __NTLMUser9X
__PARAMETERS                            __SystemSecurity
__NotifyStatus                          __ExtendedStatus
Win32_PrivilegesStatus                  Win32_TSNetworkAdapterSettingError
Win32_TSRemoteControlSettingError       Win32_TSEnvironmentSettingError
...

È possibile recuperare le stesse informazioni da un computer remoto utilizzando il parametro ComputerName e specificando il nome o l'indirizzo IP di un computer:

PS> Get-WmiObject -List -ComputerName 192.168.1.29


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
__ProviderRegistration                  __ObjectProviderRegistration
...

L'elenco delle classi restituito dai computer remoti può variare a seconda del sistema operativo specifico eseguito nel computer e delle estensioni WMI specifiche aggiunte dalle applicazioni installate.

Nota

Quando si utilizza Get-WmiObject per la connessione a un computer remoto, è necessario che in tale computer sia in esecuzione WMI e che, nella configurazione predefinita, l'account in uso sia incluso nel gruppo di amministratori locali del computer remoto. Non è necessario che Windows PowerShell sia installato nel sistema remoto. In tal modo è possibile amministrare sistemi operativi in cui non viene eseguito Windows PowerShell, ma in cui è disponibile WMI.

È possibile includere il parametro ComputerName anche durante la connessione al sistema locale e utilizzare come nome del computer il nome e l'indirizzo IP del computer locale (o l'indirizzo di loopback 127.0.0.1) oppure il segno '.' di WMI. Se si esegue Windows PowerShell in un computer denominato Admin01 il cui indirizzo IP è 192.168.1.90, tutti i comandi seguenti restituiranno l'elenco delle classi WMI per tale computer:

Get-WmiObject -List
Get-WmiObject -List -ComputerName .
Get-WmiObject -List -ComputerName Admin01
Get-WmiObject -List -ComputerName 192.168.1.90
Get-WmiObject -List -ComputerName 127.0.0.1
Get-WmiObject -List -ComputerName localhost

Per impostazione predefinita, per Get-WmiObject viene utilizzato lo spazio dei nomi root/cimv2. Se si desidera specificare un altro spazio dei nomi WMI, utilizzare il parametro Namespace e specificare il percorso dello spazio dei nomi corrispondente:

PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
...

Visualizzazione dei dettagli delle classi WMI

Se il nome di una classe WMI è già noto, è possibile utilizzarlo per ottenere immediatamente informazioni. Ad esempio, una delle classi WMI utilizzate in genere per recuperare informazioni su un computer è Win32_OperatingSystem.

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName .


SystemDirectory : C:\WINDOWS\system32
Organization    : Global Network Solutions
BuildNumber     : 2600
RegisteredUser  : Oliver W. Jones
SerialNumber    : 12345-678-9012345-67890
Version         : 5.1.2600

Sebbene nell'esempio vengano visualizzati tutti i parametri, è possibile esprimere il comando in modo più sintetico. Il parametro ComputerName non è necessario durante la connessione al sistema locale. In questo esempio viene visualizzato per illustrare il caso più generico e come promemoria per il parametro. Per impostazione predefinita, Namespace viene impostato su root/cimv2 e può pertanto essere omesso. La maggior parte dei cmdlet consente infine di omettere il nome di parametri comuni. Nel caso di Get-WmiObject, se non viene specificato un nome, Class verrà considerato come il primo parametro. È quindi possibile specificare l'ultimo comando digitando quanto segue:

Get-WmiObject Win32_OperatingSystem

Per la classe Win32_OperatingSystem è disponibile un numero di proprietà maggiore di quello visualizzato nell'esempio. Per visualizzarle tutte, è possibile utilizzare Get-Member. Le proprietà di una classe WMI sono automaticamente disponibili in modo analogo alle proprietà di altri oggetti:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste
m

Name                                      MemberType Definition
----                                      ---------- ----------
__CLASS                                   Property   System.String __CLASS {...
...
BootDevice                                Property   System.String BootDevic...
BuildNumber                               Property   System.String BuildNumb...
...

Visualizzazione delle proprietà non predefinite con cmdlet di tipo Format

Se si desidera visualizzare le informazioni contenute nella classe Win32_OperatingSystem che non vengono visualizzate per impostazione predefinita, è possibile utilizzare i cmdlet Format. Ad esempio, se si desidera visualizzare i dati relativi alla memoria disponibile, digitare:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi
                              ory              ry         ngFiles
--------------- --------------- --------------- --------------- ---------------
        2097024          785904          305808         2056724         1558232
Nota

Con i nomi di proprietà in Format-Table è possibile utilizzare caratteri jolly, pertanto l'elemento finale della pipeline può essere ridotto a Format-Table -Property TotalV*,Free*

Per rendere i dati relativi alla memoria ancor più leggibili, è possibile formattarli come elenco digitando:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles


TotalVirtualMemorySize : 2097024
TotalVisibleMemorySize : 785904
FreePhysicalMemory     : 301876
FreeVirtualMemory      : 2056724
FreeSpaceInPagingFiles : 1556644




Argomenti della Guida