Geek School usando o PowerShell para obter informações sobre o computador
O WMI e seu irmão mais recente, CIM, podem ser usados para gerenciar as máquinas Windows em seu ambiente. Mas você sabe a diferença entre eles? Junte-se a nós enquanto damos uma olhada.
Não deixe de ler os artigos anteriores da série:
- Aprenda a automatizar o Windows com o PowerShell
- Aprendendo a usar cmdlets no PowerShell
- Aprendendo como usar objetos no PowerShell
- Aprendendo a formatar, filtrar e comparar no PowerShell
- Aprenda a usar o Remoting no PowerShell
E fique ligado para o resto da série durante toda a semana.
Introdução
WMI significa Instrumentação de Gerenciamento do Windows. A palavra “Instrumentação” refere-se ao fato de que o WMI permite obter informações sobre o estado interno do computador, da mesma forma que os instrumentos do painel do seu carro podem recuperar e exibir informações sobre o estado dos componentes internos do seu carro..
O WMI consiste em um repositório que contém classes que representam componentes que podem ser gerenciados dentro de sua máquina. Com isso queremos dizer apenas porque o WMI tem uma classe Win32_Battery não significa que sua máquina contenha uma bateria. Essas classes podem, então, ser consultadas para obter informações localmente ou até mesmo através de uma rede usando uma linguagem de consulta muito semelhante à SQL chamada WQL. No entanto, o WMI é conhecido por ser pouco confiável, principalmente devido ao fato de ser baseado em RPC (Remote Procedure Calls), que faz algumas coisas malucas com as portas que eles escolhem para se comunicarem..
A partir do Windows 8 e Server 2012, o WMI está sendo desativado em favor do Common Information Model ou do CIM. A única diferença entre o WMI e o CIM são os protocolos de transporte que eles usam. Enquanto o WMI realiza consultas usando chamadas de procedimento remoto, o CIM usa HTTP, o que parece fazer uma enorme diferença. No backend eles ainda estão falando com o mesmo repositório de informações.
Usando o WMI
A maneira mais rápida e fácil de explorar as informações disponíveis para você via WMI é obter uma cópia de qualquer navegador de objetos WMI gratuito. Nós gostamos desse aqui. Uma vez baixado, acione-o e você terá uma interface gráfica para navegar nas Classes WMI.
Se você quiser descobrir algo sobre a configuração de disco de um computador, pressione a combinação de teclas Ctrl + F para exibir uma caixa de pesquisa, digite "logicaldisk" e pressione Enter.
Imediatamente isso irá levá-lo para a classe Win32_LogicalDisk.
Na metade inferior do aplicativo, você pode ver que temos duas instâncias da classe.
Assim que tivermos a classe que estamos procurando, consultá-la no PowerShell é direto.
Get-WmiObject -Query “SELECT * FROM Win32_LogicalDisk”
Eu não vi essa sintaxe por um tempo com pessoas hoje em dia preferindo usar a nova sintaxe parametrizada.
Get-WmiObject -Class Win32_LogicalDisk
Se você deseja obter as informações de outro computador em sua rede, basta usar o parâmetro ComputerName.
Get-WmiObject -Class Win32_LogicalDisk -ComputerName Viper -reder viper \ administrador
Usando o CIM
Tendo em mente que o CIM está disponível apenas no Windows 8 e Server 2012, seguir em frente é definitivamente o caminho a percorrer.
Get-CimInstance -ClassName Win32_LogicalDisk
Há também a conclusão de tabulação para o parâmetro -ClassName ao usar Get-CimInstance, que mostra que daqui para frente esse é o foco dos esforços da Microsoft..
Na verdade, o WMI foi desenvolvido por uma equipe completamente separada dentro da Microsoft, mas foi posteriormente assumido pelo pessoal responsável pelo PowerShell. Eles foram os que perceberam que seria muito difícil limpar a bagunça que o WMI deixou para trás. Em uma tentativa de corrigir a situação, eles estão tentando disponibilizar o WMI e o CIM gravando cmdlets de wrapper que usam o WMI e o CIM sob o capô. A única maneira de verificar se um cmdlet é um wrapper é olhando a documentação. Por exemplo, o cmdlet Get-Hotfix é um wrapper para a classe Win32_QuickFixEngineering, conforme visto na documentação.
Isso significa que você pode obter os hotfixes em máquinas remotas usando o cmdlet Get-HotFix em vez de uma Consulta WMI..
Get-HotFix -ComputerName localhost
Então você tem isso. Lembre-se de que, se houver um cmdlet dedicado, você sempre desejará usá-lo, seguido pelo CIM caso não exista um cmdlet. Finalmente, se tudo mais falhar, ou se você tiver máquinas antigas em seu ambiente, você desejará usar o WMI. Isso é tudo que tenho para este tempo. Até amanhã para mais diversão do PowerShell.