Get-WmiObject é o cmdlet mais importante para as tarefas gerais de gerenciamento do sistema. Todas as configurações críticas do subsistema serão exibidas via WMI. Além disso, o WMI trata os dados como objetos que estão em coleções de um ou mais itens. Como o Windows PowerShell também trabalha com objetos e possui um pipeline que permite que você trate objetos únicos ou vários objetos da mesma maneira, o acesso WMI genérico permite que você execute algumas tarefas avançadas sem muito esforço.

Os exemplos a seguir demonstram como coletar informações específicas usando Get-WmiObject em um computador qualquer. Especificamos o parâmetro ComputerName com o valor ponto (.), que representa o computador local. Você pode especificar um nome ou endereço IP associado a qualquer computador que possa ser acessado via WMI. Para recuperar informações sobre o computador local, você poderia omitir -ComputerName.

Listando configurações da área de trabalho

Começaremos com um comando que coleta informações sobre as áreas de trabalho do computador local.

Get-WmiObject -Class Win32_Desktop -ComputerName .

Ele retorna informações de todas as áreas de trabalho, estejam em uso ou não.

Observação:

As informações retornadas por algumas classes do WMI podem ser bem detalhadas e quase sempre incluem metadados sobre a classe do WMI. Como a maioria dessas propriedades de metadados possui nomes que começam com um duplo sublinhado, você pode filtrar as propriedades usando Select-Object. Especifique apenas as propriedades que começam com caracteres alfabéticos usando [a-z]* como valor de Property. Por exemplo:

Get-WmiObject -Class Win32_Desktop -ComputerName . | Select-Object -Property [a-z]*

Para filtrar os metadados, use um operador de pipeline (|) para enviar os resultados do comando Get-WmiObject para Select-Object -Property [a-z]*.

Listando informações da BIOS

A classe Win32_BIOS do WMI retorna informações compactas, mas completas sobre a BIOS do sistema do computador local.

Get-WmiObject -Class Win32_BIOS -ComputerName .

Listando informações do processador

Você pode recuperar informações gerais sobre o processador usando a classe Win32_Processor do WMI, embora você provavelmente decida filtrá-las:

Get-WmiObject -Class Win32_Processor -ComputerName . | Select-Object -Property [a-z]*

Para obter uma descrição genérica sobre a família do processador, basta retornar a propriedade Win32_ComputerSystem SystemType:

PS> Get-WmiObject -Class Win32_ComputerSystem -ComputerName . | Select-Object -Property SystemType
SystemType
----------
X86-based PC

Listando o fabricante e o modelo do computador

As informações sobre o modelo do computador também estão disponíveis em Win32_ComputerSystem. A saída padrão exibida não precisa de qualquer filtragem para oferecer dados OEM:

PS> Get-WmiObject -Class Win32_ComputerSystem
Domain              : WORKGROUP
Manufacturer        : Compaq Presario 06
Model               : DA243A-ABA 6415cl NA910
Name                : MyPC
PrimaryOwnerName    : Jane Doe
TotalPhysicalMemory : 804765696

Sua saída de comandos como esse, que retornam informações diretamente de algum hardware, será tão boa quanto os dados disponíveis. Algumas informações não estão corretamente configuradas pelos fabricantes de hardware e portanto podem não estar disponíveis.

Listando os hotfixes instalados

Você pode listar todos os hotfixes instalados usando Win32_QuickFixEngineering:

Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .

Essa classe retorna uma lista de hotfixes parecida com esta:

Description         : Update for Windows XP (KB910437)
FixComments         : Update
HotFixID            : KB910437
Install Date        :
InstalledBy         : Administrator
InstalledOn         : 12/16/2005
Name                :
ServicePackInEffect : SP3
Status              :

Para obter uma saída mais sucinta, talvez seja melhor excluir algumas propriedades. Embora você possa usar o parâmetro Get-WmiObject Property para escolher somente HotFixID, esse procedimento, na verdade, retornará mais informações, pois todos os metadados são exibidos por padrão:

PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property HotFixId
HotFixID         : KB910437
__GENUS          : 2
__CLASS          : Win32_QuickFixEngineering
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :

Os dados adicionais são retornados porque o parâmetro Property de Get-WmiObject restringe as propriedades retornadas pelas instâncias da classe WMI, e não o objeto retornado ao Windows PowerShell. Para reduzir a saída, utilize Select-Object:

PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property Hot
FixId | Select-Object -Property HotFixId
HotFixId
--------
KB910437

Listando informações sobre a versão do sistema operacional

As propriedades da classe Win32_OperatingSystem incluem informações sobre a versão e o service pack. Você pode selecionar explicitamente somente essas propriedades para obter um resumo das informações sobre a versão a partir de Win32_OperatingSystem:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion

Você também pode usar curingas com o parâmetro Select-Object Property. Como todas as propriedades que começam com Build ou ServicePack são importantes aqui, podemos encurtar o comando para:

PS> Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property Build*,OSType,ServicePack*

BuildNumber             : 2600
BuildType               : Uniprocessor Free
OSType                  : 18
ServicePackMajorVersion : 2
ServicePackMinorVersion : 0

Listando usuários locais e o proprietário

As informações gerais de usuário locais, como número de usuários licenciados, número atual de usuários e nome do proprietário, podem ser encontradas em uma seleção das propriedades Win32_OperatingSystem. Você pode selecionar explicitamente as propriedades desta forma:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property NumberOfLicensedUsers,NumberOfUsers,RegisteredUser

A seguir, uma versão mais sucinta usando caracteres curinga:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property *user*

Obtendo o espaço em disco disponível

Para ver o espaço em disco e o espaço livre nas unidades locais, você pode usar a classe Win32_LogicalDisk do WMI. Você só precisa ver as instâncias com um DriveType 3 - o valor usado pelo WMI para os discos rígidos fixos.

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName .

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 65541357568
Size         : 203912880128
VolumeName   : Local Disk

DeviceID     : Q:
DriveType    : 3
ProviderName :
FreeSpace    : 44298250240
Size         : 122934034432
VolumeName   : New Volume

PS> Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum | Select-Object -Property Property,Sum

Obtendo informações sobre a sessão de logon

Você pode obter informações gerais sobre as sessões de logon associadas a usuários através da classe Win32_LogonSession do WMI:

Get-WmiObject -Class Win32_LogonSession -ComputerName .

Obtendo o usuário conectado a um computador

Você pode exibir o usuário conectado a um sistema de computador específico usando Win32_ComputerSystem. Esse comando retorna somente o usuário conectado na área de trabalho do sistema:

Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .

Obtendo a hora local de um computador

Você pode recuperar a hora local atual em um computador específico usando a classe Win32_LocalTime do WMI. Como essa classe exibe, por padrão, todos os metadados, talvez seja melhor filtrá-la usando Select-Object:

PS> Get-WmiObject -Class Win32_LocalTime -ComputerName . | Select-Object -Property [a-z]*


Day          : 15
DayOfWeek    : 4
Hour         : 12
Milliseconds :
Minute       : 11
Month        : 6
Quarter      : 2
Second       : 52
WeekInMonth  : 3
Year         : 2006

Exibindo o status do serviço

Para ver o status de todos os serviços de um computador específico, você pode usar localmente o cmdlet Get-Service conforme mencionado anteriormente. Para sistemas remotos, você pode usar a classe Win32_Service do WMI. Se você também usar Select-Object para filtrar os resultados para Status, Name e DisplayName, o formato da saída será quase idêntico ao da saída de Get-Service:

Get-WmiObject -Class Win32_Service -ComputerName . | Select-Object -Property Status,Name,DisplayName

Para permitir a exibição completa dos nomes de serviços ocasionais com nomes extremamente longos, talvez seja necessário usar Format-Table com os parâmetros AutoSize e Wrap para otimizar a largura da coluna e permitir que os nomes longos sejam ajustados, em vez de serem truncados:

Get-WmiObject -Class Win32_Service -ComputerName . | Format-Table -Property Status,Name,DisplayName -AutoSize -Wrap




Sumário