Windows Server 2025 / Exportar o inventário do servidor e dos discos para CSV
Relatórios no formato CSV (valores separados por vírgulas) facilitam a comparação de verificações de servidor quando suas colunas permanecem consistentes. Consulte informações do sistema operacional, memória e disco com PowerShell e inclua o nome do computador e o horário da coleta para que cada resultado tenha uma fonte clara.
Escolha os campos e um local de saída protegido
Execute este exemplo localmente em cada servidor no Windows PowerShell 5.1. Aprenda coleta e saída de arquivo separadamente da autenticação remota. Nomes de colunas idênticos posteriormente tornam mais fácil combinar relatórios de vários servidores.
| Arquivo | Conteúdos |
|---|---|
| server.csv | Nome do computador, hora da coleta, versão do sistema operacional, hora de inicialização e memória |
| disks.csv | Nome do computador, unidade, capacidade, espaço livre e porcentagem livre |
Cada execução cria uma nova pasta com carimbo de data/hora e um identificador curto em C:\LabReports para evitar sobrescrever resultados anteriores. Nomes de servidores e a configuração interna podem ser informações operacionais sensíveis; defina o acesso à pasta e a retenção.
Salve e execute o script completo
Crie primeiro a pasta C:\LabScripts se ela não existir e salve o seguinte como C:\LabScripts\Collect-LabInventory.ps1 usando UTF-8. Se adicionar comentários não ASCII para o Windows PowerShell 5.1, verifique a opção UTF-8 com marca de ordem de bytes (BOM) no editor. Execute a partir de uma janela do Windows PowerShell aberta como administrador; nenhum módulo adicional é necessário.
$runLabel = (Get-Date -Format 'yyyyMMdd-HHmmss') + '-' + ([guid]::NewGuid().ToString('N').Substring(0,6))
$reportDirectory = Join-Path 'C:\LabReports' $runLabel
New-Item -ItemType Directory -Path $reportDirectory -Force -ErrorAction Stop | Out-Null
$os = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop
$computer = Get-CimInstance Win32_ComputerSystem -ErrorAction Stop
$collectedAt = (Get-Date).ToString('o')
[pscustomobject]@{
ComputerName = $env:COMPUTERNAME
CollectedAt = $collectedAt
OS = $os.Caption
Version = $os.Version
LastBoot = $os.LastBootUpTime
MemoryGiB = [math]::Round($computer.TotalPhysicalMemory / 1GB,2)
} | Export-Csv -LiteralPath (Join-Path $reportDirectory 'server.csv') -NoTypeInformation -Encoding UTF8
Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3' -ErrorAction Stop | ForEach-Object {
[pscustomobject]@{
ComputerName = $env:COMPUTERNAME
CollectedAt = $collectedAt
Drive = $_.DeviceID
SizeGiB = [math]::Round($_.Size / 1GB,2)
FreeGiB = [math]::Round($_.FreeSpace / 1GB,2)
FreePercent = if ($_.Size -gt 0) { [math]::Round(100 * $_.FreeSpace / $_.Size,1) } else { $null }
}
} | Export-Csv -LiteralPath (Join-Path $reportDirectory 'disks.csv') -NoTypeInformation -Encoding UTF8
Write-Output $reportDirectory
Set-Location 'C:\LabScripts'
.\Collect-LabInventory.ps1
O Modelo de Informação Comum (CIM) fornece as classes de gerenciamento consultadas aqui. Os exemplos de coleta de informações de computador da Microsoft explicam a abordagem. Os cálculos de memória e armazenamento usam a constante 1GB do PowerShell, equivalente a 1.073.741.824 bytes.
Verifique ambos os arquivos gerados
Use o caminho de pasta real impresso no final da execução. Seu carimbo de data/hora e identificador diferem a cada vez, então não substitua por um exemplo literal de pasta:
$reportPath = Read-Host 'Report directory printed by the script'
Import-Csv -LiteralPath (Join-Path $reportPath 'server.csv') | Format-List
Import-Csv -LiteralPath (Join-Path $reportPath 'disks.csv') | Format-Table
O resumo deve identificar o servidor no qual você executou o script. O relatório de disco deve conter linhas para seus discos fixos. Se a memória do convidado diferir da configuração da máquina virtual (VM), considere a memória dinâmica e a alocação atual. Não confunda a memória do convidado com a memória física total do host.
Trate o CSV como dados
Export-Csv grava as propriedades dos objetos como colunas. O Format-Table antes da exportação pode salvar objetos de formatação em vez disso. O script seleciona explicitamente -NoTypeInformation e codificação UTF-8 para o Windows PowerShell 5.1.
O Import-Csv normalmente retorna propriedades como cadeias de texto (strings). Converta um campo para número antes de comparar valores de capacidade. Exclua primeiro os campos vazios: um valor ausente não significa 0% de espaço livre. Um valor real de 0% continua incluído no filtro. A configuração regional da planilha, separadores decimais e interpretação de datas podem diferir; mantenha o CSV original e escolha as configurações de importação deliberadamente.
Import-Csv -LiteralPath (Join-Path $reportPath 'disks.csv') |
Where-Object { -not [string]::IsNullOrWhiteSpace($_.FreePercent) } |
Where-Object { [double]$_.FreePercent -lt 20 } |
Select-Object ComputerName,Drive,FreePercent
O limite de 20% é um exemplo de filtro, não uma política de alerta universal. Limites operacionais também devem considerar espaço livre absoluto, crescimento e requisitos de carga de trabalho.
Trate falhas parciais e preserve resultados úteis
Se a criação do diretório ou uma consulta falhar, verifique privilégios, espaço livre e suporte de classe. Um arquivo de saída não é um sucesso completo: verifique se ambos existem e contêm os dados esperados.
Colete novamente sem reiniciar o servidor. CollectedAt deve mudar enquanto LastBoot permanece o mesmo. Ao limpar, identifique apenas a pasta criada pela execução relevante; não exclua casualmente toda a árvore LabReports ou outros registros de inspeção.




