Obtendo objetos WMI (Get-WmiObject)
O WMI (instrumentação de gerenciamento do Windows) é uma tecnologia fundamental para a administração de sistemas Windows porque expõe uma grande variedade de informações de uma maneira uniforme. Por causa de tudo o que o WMI pode fazer, o cmdlet do Windows PowerShell para acesso a objetos WMI, Get-WmiObject, é um dos mais úteis cmdlets para o trabalho real. Vamos mostrar como o Get-WmiObject pode ser usado para acessar objetos WMI e como usar objetos WMI para tarefas específicas.
Listando as classes WMI
O primeiro problema que a maioria dos usuários de WMI encontra é tentar descobrir o que pode ser feito com ele. As classes WMI descrevem os recursos que podem ser gerenciados. Existem centenas de classes WMI, algumas delas com dezenas de propriedades.
Get-WmiObject resolve esse problema tornando o WMI detectável. É possível obter uma lista de classes WMI disponíveis no computador local se digitarmos:
PS> Get-WmiObject -List __SecurityRelatedClass __NTLMUser9X __PARAMETERS __SystemSecurity __NotifyStatus __ExtendedStatus Win32_PrivilegesStatus Win32_TSNetworkAdapterSettingError Win32_TSRemoteControlSettingError Win32_TSEnvironmentSettingError ...
Você pode recuperar as mesmas informações de um computador remoto usando o parâmetro ComputerName, especificando o nome de um computador ou um endereço IP:
PS> Get-WmiObject -List -ComputerName 192.168.1.29 __SystemClass __NAMESPACE __Provider __Win32Provider __ProviderRegistration __ObjectProviderRegistration ...
A lista de classes retornada por computadores remotos pode variar devido ao sistema operacional específico em execução no computador e as extensões WMI em particular adicionadas pelos aplicativos instalados.
Observação: | |
Quando você utiliza Get-WmiObject para se conectar a um computador remoto, o WMI precisa estar em execução no computador remoto e, sob a configuração padrão, a conta utilizada deve ser membro do grupo de administradores locais do computador remoto. O sistema remoto não precisa ter o Windows PowerShell instalado. Isso permite que você administre sistemas operacionais que não estejam executando o Windows PowerShell mas que tenham o WMI disponível. |
Você também pode incluir ComputerName na conexão ao sistema local. Você pode usar o nome do computador local, seu endereço IP (ou o endereço de loopback 127.0.0.1) ou o estilo de WMI '.' como nome do computador. Se o Windows PowerShell estiver em execução em um computador chamado Admin01 com o endereço IP 192.168.1.90, os comandos a seguir retornarão a lista de classes WMI do computador:
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
Get-WmiObject utiliza o namespace root/cimv2 por padrão. Se você quiser especificar outro namespace WMI, utilize o parâmetro Namespace e especifique o caminho para namespace correspondente:
PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root __SystemClass __NAMESPACE __Provider __Win32Provider ...
Exibindo detalhes da classe do WMI
Se você já sabe o nome de uma classe do WMI, pode usá-lo para obter informações de forma imediata. Por exemplo, uma das classes WMI mais utilizadas para a recuperação de informações sobre um computador é 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
Embora estejamos mostrando todos os parâmetros, o comando pode ser expresso de uma forma mais sucinta. O parâmetro ComputerName não é necessário na conexão ao sistema local. Nós o exibimos para demonstrar o caso mais geral e lembrá-lo de que ele existe. O padrão de Namespace é root/cimv2 e também pode ser omitido. Finalmente, a maioria dos cmdlets permite que você omita o nome dos parâmetros comuns. Com Get-WmiObject, se nenhum nome for especificado para o primeiro parâmetro, o Windows PowerShell o tratará como o parâmetro Class. Isso significa que o último parâmetro poderia ter sido emitido desta forma:
Get-WmiObject Win32_OperatingSystem
A classe Win32_OperatingSystem possui muito mais propriedades do que as mostradas aqui. Você pode utilizar Get-Member para ver todas elas. As propriedades de uma classe WMI estão automaticamente disponíveis, assim como outras propriedades de objeto:
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... ...
Exibindo as propriedades que não são padrão com os cmdlets Format
Caso você queira obter informações da classe Win32_OperatingSystem que não sejam mostradas por padrão, poderá exibi-las usando os cmdlets Format. Por exemplo, se desejar exibir os dados sobre a memória disponível, digite:
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
Observação: | |
Os caracteres curinga funcionam com nomes de propriedade em Format-Table; portanto, o elemento final do pipeline pode ser reduzido a Format-Table -Property TotalV*,Free* |
Os dados sobre a memória podem ficar mais legíveis se você os formatar como uma lista:
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