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.