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, ReleaseDateO 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, VideoProcessorEvite 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-ListEsse 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 $sO 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