Compartilhar via


Obter objetos WMI com Get-CimInstance

Este exemplo só se aplica a plataformas Windows.

O WMI (Instrumentação de Gerenciamento do Windows) é uma das principais tecnologias para a administração do sistema, pois ela expõe uma grande variedade de informações de maneira uniforme. Devido às inúmeras possibilidades oferecidas pelo WMI, o cmdlet do PowerShell usado para acessar objetos WMI, Get-CimInstance, é um dos mais úteis para fazer o trabalho duro. Vamos discutir como usar os cmdlets CIM de acesso a objetos de WMI e como usar objetos WMI para fazer coisas específicas.

Listar classes WMI

O primeiro problema que a maioria dos usuários do WMI enfrentam é tentar descobrir o que pode ser feito com o WMI. As classes WMI descrevem os recursos que podem ser gerenciados. Há centenas de classes WMI, algumas das quais contêm dezenas de propriedades.

Get-CimClass cuida desse problema possibilitando que o WMI possa ser descoberto. 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 por meio do parâmetro ComputerName especificando um nome do computador ou endereço IP:

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

A listagem de classe 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.

Observação

Ao usar cmdlets do CIM para se conectar a um computador remoto, o computador remoto deve estar executando o WMI e a conta usada deve estar no grupo Administradores local no computador remoto. O sistema remoto não precisa ter o PowerShell instalado. Isso permite administrar sistemas operacionais que não executam o PowerShell, mas que têm o WMI disponível.

Exibir detalhes da classe WMI

Se você já souber o nome de uma classe WMI, poderá usá-la para obter informações imediatamente. Por exemplo, uma das classes WMI geralmente 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 mostremos 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. Vamos mostrá-lo para demonstrar o caso mais geral e lembrá-lo sobre o parâmetro. O Namespace usa root/CIMV2 como padrão e também pode ser omitido. Por fim, a maioria dos cmdlets permitem omitir o nome dos parâmetros comuns. Com Get-CimInstance, 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 pode ter sido emitido digitando:

Get-CimInstance Win32_OperatingSystem

A classe Win32_OperatingSystem tem muitos mais propriedades do que as exibidas aqui. Você pode usar Get-Member para ver todas as propriedades. As propriedades de uma classe WMI ficam automaticamente disponíveis assim 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;}
...

Exibição de propriedades não padrão com cmdlets Format

Se quiser ver as informações contidas na classe Win32_OperatingSystem que não são exibidas por padrão, você poderá exibi-las usando os cmdlets Format. Por exemplo, se você deseja exibir dados de memória disponível, digite:

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

Observação

Os curingas funcionam com nomes de propriedade em Format-Table, portanto, o elemento final do pipeline pode ser reduzido para Format-Table -Property Total*Memory*, Free*

Os dados da memória podem ficar 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