27Aug

Geek School: Usando o PowerShell para obter informações do computador

WMI e seu irmão mais recente CIM podem ser usados ​​para gerenciar as máquinas Windows em seu ambiente. Mas você conhece a diferença entre eles? Junte-se a nós enquanto examinamos.

Saiba como automatizar o Windows com o PowerShell

  • Aprender a usar Cmdlets no PowerShell
  • Aprender a usar objetos no PowerShell
  • Aprender a formatação, filtragem e comparação no PowerShell
  • Aprenda a usar Remoting emPowerShell
  • E fique atento 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 a WMI permite que você obtenha informações sobre o estado interno do seu computador, assim como os instrumentos do painel no seu carro podem recuperar e exibir informações sobre o estado dos componentes internos dos seus carros.

    O WMI consiste em um repositório que contém classes que representam componentes que poderiam ser gerenciados dentro da sua máquina. Com isso, queremos dizer apenas porque a WMI tem uma classe Win32_Battery não significa que sua máquina contenha uma bateria. Essas classes podem então ser consultadas por informações localmente ou mesmo em uma rede usando uma linguagem de consulta muito semelhante ao SQL chamado WQL.No entanto, WMI tem sido conhecido por ser muito pouco confiável, principalmente devido ao fato de que ele é baseado em RPC( Remote Procedure Calls), que faz algumas coisas loucas com as portas que eles escolheram para se comunicar.

    Começando com o Windows 8 e o Server 2012, o WMI está sendo eliminado em favor do Common Information Model ou do CIM para breve. A única diferença entre WMI e CIM são os protocolos de transporte que eles usam. Enquanto o WMI executa consultas usando chamadas de procedimento remoto, o CIM usa HTTP, o que parece fazer uma grande diferença. No backend eles ainda estão conversando 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ê através do WMI é pegar uma cópia de qualquer navegador de objetos WMI gratuito. Nós gostamos deste. Uma vez baixado, acenda e você terá uma interface gráfica para navegar nas Classes WMI.

    imagem

    Se você quiser descobrir algo sobre a configuração de disco do computador, pressione a combinação de teclado Ctrl + F para abrir uma caixa de pesquisa, então digite "lógico disco" e pressione enter.

    imagem

    Imediatamente, isto irá levá-lo para a classe Win32_LogicalDisk.

    imagem

    Na metade inferior do aplicativo, você pode ver que temos duas instâncias da classe.

    imagem

    Uma vez que temos a classe que estamos procurando, consultá-lo no PowerShell é direto.

    Get-WmiObject -Query "SELECT * FROM Win32_LogicalDisk"

    imagem

    Eu não vi essa sintaxe por um tempo com as pessoas atualmente preferindo usar a nova sintaxe parametrizada.

    Get-WmiObject -Class Win32_LogicalDisk

    imagem

    Se você deseja obter as informações de outro computador em sua rede, você pode simplesmente usar o parâmetro ComputerName.

    Get-WmiObject -Class Win32_LogicalDisk -ComputerName Viper -Credival viper \ administrator

    imagem

    Usando o CIM

    Tendo em mente que o CIM está disponível apenas no Windows 8 e Server 2012, avançar, esse é definitivamente o caminho a seguir.

    Get-CimInstance -ClassName Win32_LogicalDisk

    imagem

    Existe também a conclusão da guia para o parâmetro -ClassName ao usar o Get-CimInstance, o que mostra que, no futuro, é onde os esforços da Microsoft serão focados.

    Na verdade, a WMI foi desenvolvida por uma equipe completamente separada na Microsoft, mas posteriormente foi assumida pelas pessoas encarregadas do PowerShell. Eles foram os que perceberam que vai ser muito difícil limpar a bagunça deixada por WMI.Em uma tentativa de remediar a situação, eles estão tentando tornar WMI e CIM mais disponíveis escrevendo cmdlets wrapper que usam WMI e CIM embaixo do capô.A única maneira de verificar se um cmdlet é um wrapper é examinando a documentação. Por exemplo, o cmdlet Get-Hotfix é um invólucro para a classe Win32_QuickFixEngineering, conforme visto na documentação.

    imagem

    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

    imagem

    Então, você tem. Basta lembrar que, se houver um cmdlet dedicado, você sempre quererá usá-lo, seguido pelo CIM se um cmdlet não existir. Finalmente, se tudo mais falhar, ou você tem máquinas antigas em seu ambiente, você vai querer usar o WMI.Isso é tudo que eu tenho para esse tempo. Vejo você amanhã para mais diversão no PowerShell.