Obtendo objetos WMI com Get-CimInstance
Este exemplo só se aplica a plataformas Windows.
A Instrumentação de Gerenciamento do Windows (WMI) é uma tecnologia central para a administração do sistema Windows porque expõe uma ampla gama de informações de maneira uniforme. Devido ao quanto o WMI torna possível, o cmdlet do PowerShell para acessar objetos WMI, Get-CimInstance
, é um dos mais úteis para fazer trabalho real. Vamos discutir como usar os cmdlets CIM para acessar objetos WMI e, em seguida, como usar objetos WMI para fazer coisas específicas.
Listando classes WMI
O primeiro problema que a maioria dos usuários WMI enfrenta é tentar descobrir o que pode ser feito com WMI. As classes WMI descrevem os recursos que podem ser gerenciados. Existem centenas de classes WMI, algumas das quais contêm dezenas de propriedades.
Get-CimClass
resolve este problema tornando o WMI detetável. Você pode obter uma lista das classes WMI disponíveis no computador local 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
...
Você pode recuperar as mesmas informações de um computador remoto usando o parâmetro ComputerName , especificando um nome de computador ou endereço IP:
Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29
A listagem de classes retornada por computadores remotos pode variar devido ao sistema operacional específico que o computador está executando e as extensões WMI específicas são adicionadas por aplicativos instalados.
Nota
Ao usar cmdlets CIM para se conectar a um computador remoto, o computador remoto deve estar executando o WMI e a conta que você está usando deve estar no grupo Administradores local no computador remoto. O sistema remoto não precisa ter o PowerShell instalado. Isso permite que você administre sistemas operacionais que não estão executando o PowerShell, mas têm WMI disponível.
Exibindo detalhes da classe WMI
Se você já sabe o nome de uma classe WMI, você pode usá-lo para obter informações imediatamente. Por exemplo, uma das classes WMI comumente usadas para recuperar informações sobre um computador é 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
Embora estejamos mostrando todos os parâmetros, o comando pode ser expresso de forma mais sucinta.
O parâmetro ComputerName não é necessário ao se conectar ao sistema local. Nós mostramos para demonstrar o caso mais geral e lembrá-lo sobre o parâmetro. O Namespace assume root/CIMV2
como padrão o , e também pode ser omitido. Finalmente, a maioria dos cmdlets permite omitir o nome de parâmetros comuns. Com Get-CimInstance
o , se nenhum nome for especificado para o primeiro parâmetro, o PowerShell o tratará como o parâmetro Class . Isso significa que o último comando poderia ter sido emitido digitando:
Get-CimInstance Win32_OperatingSystem
A classe Win32_OperatingSystem tem muito mais propriedades do que as exibidas aqui. Você pode usar Get-Member para ver todas as propriedades. As propriedades de uma classe WMI estão automaticamente disponíveis como outras propriedades de objeto:
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;}
...
Exibindo propriedades não padrão com cmdlets Format
Se desejar que as informações contidas na classe Win32_OperatingSystem não sejam exibidas por padrão, você poderá exibi-las usando os cmdlets Format . Por exemplo, se desejar exibir dados de memória disponíveis, digite:
Get-CimInstance -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize, FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
41787920 16622096 9537952 33071884 25056628
Nota
Os curingas funcionam com nomes de propriedade no , para Format-Table
que o elemento de pipeline final possa ser reduzido para Format-Table -Property Total*Memory*, Free*
Os dados de memória podem ser mais legíveis se você formatá-los como uma lista 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