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