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/CIMV2como padrão o , e também pode ser omitido. Finalmente, a maioria dos cmdlets permite omitir o nome de parâmetros comuns. Com Get-CimInstanceo , 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-Tableque 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