Como ver o hardware do PC com PowerShell (Get-CimInstance)

Como ver o hardware do PC com PowerShell (Get-CimInstance)

Alguém pergunta "qual a memória desse PC?" e você abre Configurações, depois Gerenciador de Tarefas, depois procura a etiqueta embaixo do notebook. Em uma máquina, tudo bem. Em quinze, vira a tarde inteira. O Windows já guarda modelo, número de série, versão da BIOS, pentes de memória e placa de vídeo no WMI, e o Get-CimInstance lê tudo isso em uma linha.

O que é o Get-CimInstance

É o cmdlet do módulo CimCmdlets que consulta classes CIM/WMI. Segundo a documentação da Microsoft, ele retorna instâncias de uma classe de um servidor CIM, e sem -ComputerName nem -CimSession consulta o WMI local. Ele substitui o antigo Get-WmiObject, que não existe no PowerShell 7. Funciona no Windows PowerShell 5.1 e no 7.x, mas só no Windows.

Não precisa de administrador para a maioria das classes abaixo.

Como ver as configurações do PC pelo PowerShell?

Rode Get-CimInstance -ClassName Win32_ComputerSystem para fabricante, modelo e RAM total, e Win32_BIOS para número de série e versão da BIOS.

Cada peça do hardware é uma classe. As que mais uso:

  • Win32_ComputerSystem: fabricante, modelo, memória física total.
  • Win32_BIOS: número de série, versão e data da BIOS.
  • Win32_Processor: nome da CPU, núcleos, threads, clock máximo.
  • Win32_PhysicalMemory: um objeto por pente de RAM.
  • Win32_VideoController: placa de vídeo e versão do driver.
  • Win32_OperatingSystem: edição, build do Windows e último boot.

Passo 1: identificar a máquina

Get-CimInstance -ClassName Win32_ComputerSystem |
  Select-Object Manufacturer, Model, @{n='RAM_GB';e={[math]::Round($_.TotalPhysicalMemory/1GB,1)}}

Get-CimInstance -ClassName Win32_BIOS |
  Select-Object SerialNumber, SMBIOSBIOSVersion, ReleaseDate

O SerialNumber da BIOS é o que o suporte do fabricante pede para consultar garantia. Em PC montado, esse campo costuma vir com texto genérico, como "To be filled by O.E.M.", porque a placa-mãe não tem número de série de sistema gravado.

Passo 2: processador e memória

Get-CimInstance -ClassName Win32_Processor |
  Select-Object Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed

Get-CimInstance -ClassName Win32_PhysicalMemory |
  Select-Object BankLabel, DeviceLocator, Manufacturer, PartNumber, Speed,
    @{n='GB';e={$_.Capacity/1GB}}

A segunda consulta devolve uma linha por pente. É a forma mais rápida de descobrir se o notebook tem um pente de 16 GB ou dois de 8 GB, e quantos slots estão ocupados antes de comprar upgrade. O PartNumber ajuda a comprar um pente compatível. O Speed vem em MHz.

Passo 3: placa de vídeo, com uma pegadinha

Get-CimInstance -ClassName Win32_VideoController |
  Select-Object Name, DriverVersion, DriverDate, VideoProcessor

Evite confiar no campo AdapterRAM para saber a VRAM. A documentação da classe Win32_VideoController o define como uint32, um tipo de 32 bits que não representa valores acima de 4 GB. Em placa moderna, o número sai errado ou truncado. Para VRAM confiável, use o dxdiag ou o Gerenciador de Tarefas, aba Desempenho.

Passo 4: uma tabela só para colar no chamado

$cs   = Get-CimInstance Win32_ComputerSystem
$bios = Get-CimInstance Win32_BIOS
$cpu  = Get-CimInstance Win32_Processor | Select-Object -First 1
$os   = Get-CimInstance Win32_OperatingSystem

[pscustomobject]@{
  Computador = $env:COMPUTERNAME
  Modelo     = "$($cs.Manufacturer) $($cs.Model)"
  Serial     = $bios.SerialNumber
  BIOS       = $bios.SMBIOSBIOSVersion
  CPU        = $cpu.Name
  RAM_GB     = [math]::Round($cs.TotalPhysicalMemory/1GB,1)
  Windows    = "$($os.Caption) build $($os.BuildNumber)"
  UltimoBoot = $os.LastBootUpTime
} | Format-List

Esse relatório cabe em uma tela e substitui a planilha preenchida à mão. Troque Format-List por Export-Csv para guardar o resultado.

Passo 5: inventariar vários computadores

Com -ComputerName, o cmdlet cria uma sessão temporária usando WS-Man. Para várias consultas na mesma máquina, a Microsoft recomenda abrir uma sessão CIM e reutilizá-la, o que é mais rápido:

$s = New-CimSession -ComputerName PC01, PC02, PC03
Get-CimInstance -ClassName Win32_BIOS -CimSession $s |
  Select-Object PSComputerName, SerialNumber, SMBIOSBIOSVersion |
  Export-Csv C:\Audit\inventario.csv -NoTypeInformation -Encoding UTF8
Remove-CimSession $s

O acesso remoto exige WinRM habilitado nas máquinas de destino e uma conta com permissão administrativa nelas. Se a conexão falhar, teste a porta primeiro com o Test-NetConnection: o WinRM escuta na 5985 (HTTP) e na 5986 (HTTPS).

Por que isso importa para segurança

Inventário é a base de qualquer hardening. Você não protege o que não sabe que existe: versão de BIOS desatualizada, build de Windows sem suporte e máquina esquecida na rede aparecem nessa lista. Combine com a auditoria de portas abertas e com a revisão de serviços para ter o retrato completo da máquina.

Para rodar o inventário toda semana sem lembrar, agende o script pelo schtasks. E se o relatório mostrar um disco suspeito, o próximo passo é checar a saúde do SSD e do HD com Get-PhysicalDisk.

Comentários