Recupero di oggetti WMI con Get-CimInstance

Questo esempio si applica solo alle piattaforme Windows.

Strumentazione gestione Windows (WMI) è una tecnologia fondamentale per l'amministrazione del sistema Windows poiché espone un'ampia gamma di informazioni in modo uniforme. Considerando le potenzialità d'uso di WMI, il cmdlet di PowerShell per l'accesso agli oggetti WMI, Get-CimInstance, è uno dei più utili per eseguire il lavoro effettivo. Verrà illustrato come usare i cmdlet CIM per accedere agli oggetti WMI e quindi come usare oggetti WMI per eseguire operazioni specifiche.

Elenco di classi WMI

Il primo problema riscontrato dalla maggior parte degli utenti WMI consiste nel cercare di scoprire cosa è possibile fare con WMI. Le classi WMI descrivono le risorse che possono essere gestite. Sono disponibili centinaia di classi WMI, alcune delle quali contengono decine di proprietà.

Get-CimClass risolve questo problema rendendo individuabile WMI. È possibile ottenere un elenco delle classi WMI disponibili nel computer locale digitando:

Get-CimClass -Namespace root/CIMV2 | 
    Where-Object CimClassName -like Win32* | 
    Select-Object CimClassName
CimClassName
------------
Win32_DeviceChangeEvent
Win32_SystemConfigurationChangeEvent
Win32_VolumeChangeEvent
Win32_SystemTrace
Win32_ProcessTrace
Win32_ProcessStartTrace
Win32_ProcessStopTrace
Win32_ThreadTrace
Win32_ThreadStartTrace
Win32_ThreadStopTrace
...

È possibile recuperare le stesse informazioni da un computer remoto usando il parametro ComputerName , specificando un nome computer o un indirizzo IP:

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

L'elenco di classi restituito dai computer remoti può variare a causa del sistema operativo specifico in cui è in esecuzione il computer e le specifiche estensioni WMI vengono aggiunte dalle applicazioni installate.

Nota

Quando si usano i cmdlet CIM per connettersi a un computer remoto, il computer remoto deve eseguire WMI e l'account in uso deve trovarsi nel gruppo locale Amministrazione istrators nel computer remoto. Il sistema remoto non deve avere Installato PowerShell. In questo modo è possibile amministrare i sistemi operativi che non eseguono PowerShell, ma hanno WMI disponibile.

Visualizzazione dei dettagli della classe WMI

Se si conosce già il nome di una classe WMI, è possibile usarlo per ottenere immediatamente informazioni. Una delle classi WMI comunemente usate per il recupero di informazioni su un computer è ad esempio Win32_OperatingSystem.

Get-CimInstance -Class Win32_OperatingSystem
SystemDirectory     Organization BuildNumber RegisteredUser SerialNumber            Version
---------------     ------------ ----------- -------------- ------------            -------
C:\WINDOWS\system32 Microsoft    22621       USER1          00330-80000-00000-AA175 10.0.22621

Anche se vengono visualizzati tutti i parametri, il comando può essere espresso in modo più conciso. Il parametro ComputerName non è necessario per la connessione al sistema locale. Viene mostrato solo per dimostrare il caso più generale e ricordare l'esistenza del parametro. Il valore predefinito di Namespace è root/CIMV2 e può essere anch'esso omesso. La maggior parte dei cmdlet consente infine di omettere il nome dei parametri comuni. Con Get-CimInstance, se non viene specificato alcun nome per il primo parametro, PowerShell lo considera come parametro Class. Ciò significa che l'ultimo comando avrebbe potuto essere emesso digitando:

Get-CimInstance Win32_OperatingSystem

La classe Win32_OperatingSystem ha molte più proprietà di quelle mostrate in questo articolo. È possibile usare Get-Member per visualizzare tutte le proprietà. Le proprietà di una classe WMI sono disponibili automaticamente come altre proprietà dell'oggetto:

Get-CimInstance -Class Win32_OperatingSystem | Get-Member -MemberType Property
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem
Name                                      MemberType Definition
----                                      ---------- ----------
BootDevice                                Property   string BootDevice {get;}
BuildNumber                               Property   string BuildNumber {get;}
BuildType                                 Property   string BuildType {get;}
Caption                                   Property   string Caption {get;}
CodeSet                                   Property   string CodeSet {get;}
CountryCode                               Property   string CountryCode {get;}
CreationClassName                         Property   string CreationClassName {get;}
CSCreationClassName                       Property   string CSCreationClassName {get;}
CSDVersion                                Property   string CSDVersion {get;}
CSName                                    Property   string CSName {get;}
CurrentTimeZone                           Property   int16 CurrentTimeZone {get;}
DataExecutionPrevention_32BitApplications Property   bool DataExecutionPrevention_32BitApplications {get;}
DataExecutionPrevention_Available         Property   bool DataExecutionPrevention_Available {get;}
...

Visualizzazione di proprietà non predefinite con i cmdlet Format

Se si desidera visualizzare le informazioni contenute nella classe Win32_OperatingSystem che non viene visualizzata per impostazione predefinita, è possibile visualizzarla usando i cmdlet Format . Se ad esempio si vogliono visualizzare i dati disponibili relativi alla memoria, digitare:

Get-CimInstance -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize, FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
              41787920               16622096            9537952          33071884               25056628

Nota

I caratteri jolly possono essere usati con i nomi delle proprietà in Format-Table, pertanto l'elemento finale della pipeline può essere ridotto a Format-Table -Property Total*Memory*, Free*

I dati relativi alla memoria potrebbero essere più leggibili se si formattano come elenco digitando:

Get-CimInstance -Class Win32_OperatingSystem | Format-List Total*Memory*, Free*
TotalVirtualMemorySize : 41787920
TotalVisibleMemorySize : 16622096
FreePhysicalMemory     : 9365296
FreeSpaceInPagingFiles : 25042952
FreeVirtualMemory      : 33013484
Name                   : Microsoft Windows 11 Pro|C:\Windows|\Device\Harddisk0\Partition2