WMI e CIM
Nesta aula, você aprenderá a diferença entre WMI e CIM, e como usar o cmdlet Get-CimInstance para consultar informações do sistema de forma moderna e eficiente. Exploraremos consultas básicas, filtros e comparações com o WMI legado, com exemplos práticos.
Bem-vindo à aula sobre WMI e CIM no PowerShell! Nesta aula, você vai entender dois conceitos fundamentais para administração de sistemas Windows: WMI (Windows Management Instrumentation) e CIM (Common Information Model). Vamos explorar como o PowerShell moderno utiliza o CIM para consultar informações do sistema de forma mais segura e eficiente, e como isso se compara ao WMI legado.
O WMI foi a forma tradicional de acessar informações de gerenciamento no Windows, mas o CIM, baseado em padrões abertos, oferece uma abordagem mais consistente e multiplataforma. O cmdlet Get-CimInstance é a ferramenta principal para trabalhar com CIM no PowerShell. Vamos mergulhar fundo nesse assunto!
Get-CimInstance
O cmdlet Get-CimInstance é usado para consultar instâncias de classes CIM em um sistema local ou remoto. Ele substitui o antigo Get-WmiObject e oferece vantagens como suporte a protocolos padronizados (WS-Management) e melhor integração com o pipeline do PowerShell.
A sintaxe básica é simples: você especifica o nome da classe que deseja consultar, como Win32_Process ou Win32_OperatingSystem. O cmdlet retorna objetos que podem ser manipulados como qualquer outro objeto no PowerShell.
Get-CimInstance -ClassName Win32_ProcessorVocê também pode usar filtros para refinar a consulta, semelhante a uma consulta SQL, utilizando o parâmetro -Filter. Por exemplo, para obter apenas processos com mais de 100 MB de memória:
Get-CimInstance -ClassName Win32_Process -Filter "WorkingSetSize > 104857600"Outra funcionalidade importante é a capacidade de consultar computadores remotos usando o parâmetro -ComputerName. Isso permite administrar várias máquinas a partir de um único comando.
Consultando o sistema
Com o Get-CimInstance, você pode obter informações detalhadas sobre hardware, sistema operacional, serviços, processos e muito mais. Vamos ver alguns exemplos práticos de consultas comuns.
Para obter informações sobre o sistema operacional:
Get-CimInstance -ClassName Win32_OperatingSystemPara listar todos os serviços e seu status:
Get-CimInstance -ClassName Win32_Service | Select-Object Name, State, StartModePara obter informações sobre discos rígidos:
Get-CimInstance -ClassName Win32_DiskDriveVocê pode combinar consultas com cmdlets como Where-Object, Sort-Object e Select-Object para filtrar e formatar a saída conforme necessário.
vs WMI legado
O WMI legado, acessado via Get-WmiObject, ainda funciona, mas o CIM é recomendado para novos scripts. As principais diferenças incluem:
- Protocolo: O WMI usa DCOM, enquanto o CIM usa WS-Management (WSMan), que é mais seguro e funciona melhor em firewalls.
- Padrão: O CIM segue um padrão aberto da DMTF, permitindo interoperabilidade com outros sistemas.
- Desempenho: O CIM é geralmente mais rápido e eficiente.
- Comandos:
Get-CimInstanceoferece uma sintaxe mais consistente e integração com o pipeline.
Por exemplo, para obter a versão do BIOS, no WMI legado você usaria:
Get-WmiObject -Class Win32_BIOSNo CIM, a sintaxe é semelhante, mas com melhorias:
Get-CimInstance -ClassName Win32_BIOSAlém disso, o CIM permite usar o parâmetro -CimSession para reutilizar conexões, o que é mais eficiente para múltiplas consultas.
Exemplos
Vamos colocar em prática com alguns exemplos completos que você pode usar no seu dia a dia.
Exemplo 1: Informações do processador
Get-CimInstance -ClassName Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessorsExemplo 2: Listar serviços que estão parados
Get-CimInstance -ClassName Win32_Service -Filter "State='Stopped'" | Select-Object Name, DisplayNameExemplo 3: Uso de memória dos processos
Get-CimInstance -ClassName Win32_Process | Sort-Object WorkingSetSize -Descending | Select-Object -First 10 Name, ProcessId, WorkingSetSizeExemplo 4: Consulta remota
Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName "Servidor01"Exemplo 5: Criando uma sessão CIM para múltiplas consultas
$session = New-CimSession -ComputerName "Servidor01"
Get-CimInstance -ClassName Win32_Process -CimSession $session
Get-CimInstance -ClassName Win32_Service -CimSession $session
Remove-CimSession $sessionEsses exemplos mostram como o CIM pode ser poderoso e flexível para administração de sistemas.
Boas práticas
- Prefira
Get-CimInstanceem vez deGet-WmiObjectem novos scripts. - Use filtros no parâmetro
-Filterpara reduzir a quantidade de dados transferidos, especialmente em consultas remotas. - Reutilize sessões CIM quando for fazer várias consultas ao mesmo computador.
- Combine com outros cmdlets para formatar a saída conforme necessário.
Referências
- Documentação oficial do Get-CimInstance
- WMI (Windows Management Instrumentation)
- DMTF - Common Information Model
- Criando consultas com Get-CimInstance
- Módulo CimCmdlets no PowerShell
Exercícios
- Qual é o cmdlet recomendado para consultar informações de gerenciamento no PowerShell moderno e por quê?
- Escreva um comando para listar todos os serviços que estão em execução.
- Como você faria uma consulta remota a um computador chamado "Servidor01" para obter informações do sistema operacional?
- Qual a principal diferença entre WMI e CIM em termos de protocolo?
- Escreva um script que crie uma sessão CIM para um computador remoto e execute duas consultas diferentes usando essa sessão.
Get-CimInstance, porque usa o padrão CIM baseado em WS-Management, que é mais seguro, eficiente e interoperável do que o WMI legado (Get-WmiObject).Get-CimInstance -ClassName Win32_Service -Filter "State='Running'"Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName "Servidor01"$session = New-CimSession -ComputerName "Servidor01"
Get-CimInstance -ClassName Win32_Process -CimSession $session
Get-CimInstance -ClassName Win32_Service -CimSession $session
Remove-CimSession $session