Windows Server 2025 / PowerShell로 서버 상태를 조회하고 CSV로 내보내는 방법

서버 점검 결과는 화면에서 보는 데 그치지 않고 일정한 열 구조로 CSV에 저장하면 비교하기 쉽습니다. PowerShell로 OS·메모리·디스크 정보를 조회하고 서버 이름과 수집 시각을 함께 남기면 여러 서버의 상태를 같은 기준으로 정리할 수 있습니다.

수집할 항목과 저장 위치를 정합니다

이 예시는 각 서버의 로컬 Windows PowerShell 5.1에서 실행하는 스크립트입니다. 원격 인증을 동시에 구성하지 않고 수집과 파일 저장을 먼저 익힙니다. 서버별 CSV를 중앙에서 모을 때도 동일한 열 이름을 사용할 수 있습니다.

파일 주요 내용
서버 요약 CSV 서버 이름, OS 버전, 부팅 시각, 물리 메모리
디스크 CSV 서버 이름, 드라이브, 전체·여유 용량, 여유 비율

C:\LabReports 아래에 실행 시각과 임의 식별자를 포함한 새 폴더를 만듭니다. 기존 점검 파일을 덮어쓰지 않기 위한 구성입니다. 서버 이름과 내부 구성은 민감한 운영 정보가 될 수 있으므로 저장 폴더의 접근 권한과 보존 기간을 정하세요.

전체 스크립트를 저장하고 실행합니다

아래 전체 내용을 C:\LabScripts\Collect-LabInventory.ps1로 UTF-8 형식으로 저장합니다. Windows PowerShell 5.1에서 한글 주석을 추가한다면 편집기의 UTF-8 BOM 저장 여부도 확인하세요. 관리자 Windows PowerShell에서 실행하며 추가 모듈은 필요하지 않습니다.

$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

CIM(Common Information Model)은 관리 정보를 조회하는 공통 모델입니다. 이 예시가 사용하는 클래스와 조회 원리는 컴퓨터 정보 수집 문서에서 확인할 수 있습니다. 메모리와 디스크의 GiB 계산에는 1GB 단위 상수를 사용합니다.

생성 파일과 값을 확인합니다

실행 마지막에 출력된 실제 폴더 경로를 아래 변수에 넣어 조회합니다. 실행 시각과 식별자가 달라지므로 예시 문자열을 그대로 쓰지 마세요.

$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

서버 요약에는 실행한 서버의 이름과 OS가, 디스크 파일에는 고정 디스크별 행이 있어야 합니다. VM에 할당한 메모리와 실제 조회 값이 다르면 동적 메모리 등 VM 설정도 함께 확인합니다. 호스트 전체 물리 메모리와 게스트 메모리를 혼동하지 않습니다.

CSV를 데이터로 다룰 때 주의합니다

Export-Csv는 객체의 속성을 열로 저장합니다. 저장 전에 Format-Table을 사용하면 서식 데이터가 저장될 수 있습니다. 이 예시는 -NoTypeInformation과 -Encoding UTF8을 명시해 Windows PowerShell 5.1에서도 의도를 드러냈습니다.

Import-Csv로 다시 읽은 값은 기본적으로 문자열입니다. 여유 공간을 수치로 비교할 때는 숫자로 변환해야 합니다. 쉼표, 소수점과 날짜 해석은 도구·지역 설정에 따라 달라질 수 있으므로 원본 CSV를 보존하고 가져오기 옵션을 확인하세요.

Import-Csv -LiteralPath (Join-Path $reportPath 'disks.csv') |
    Where-Object { [double]$_.FreePercent -lt 20 } |
    Select-Object ComputerName,Drive,FreePercent

20%는 이 실습의 필터 예시일 뿐 모든 서버의 경고 임계값이 아닙니다. 실제 운영에서는 절대 여유 공간과 증가 속도, 역할의 요구량을 함께 봅니다.

실패와 결과 보존을 관리합니다

경로 생성 또는 조회에 실패하면 오류를 확인하고 권한·저장 공간·클래스 지원 여부를 점검합니다. 파일 하나만 생겼다면 전체 성공으로 기록하지 마세요. 두 CSV의 존재와 내용이 확인되어야 이번 수집이 완료된 것입니다.

서버를 재부팅하지 않고 다시 수집하면 CollectedAt은 바뀌고 LastBoot는 유지되는지 비교할 수 있습니다. 임시 결과를 정리할 때는 스크립트가 만든 해당 실행 폴더만 선택하고, 다른 점검 파일이나 C:\LabReports 전체를 무심코 삭제하지 않습니다.

같은 카테고리의 다른 글
Windows Server 2025 / 원격 데스크톱을 설정하고 방화벽과 접근 권한을 확인하는 방법

Windows Server 2025 / 원격 데스크톱을 설정하고 방화벽과 접근 권한을 확인하는 방법

원격 데스크톱 허용과 NLA, 사용자 권한, 방화벽 범위를 설정하고 클라이언트에서 연결하는 과정을 설명합니다. 네트워크 오류와 인증·로그온 권한 문제를 구분하는 기준도 제공합니다.

Windows Server 2025 / 평가판 ISO를 받고 설치용 가상 머신을 준비하는 방법

Windows Server 2025 / 평가판 ISO를 받고 설치용 가상 머신을 준비하는 방법

공식 평가판 ISO 선택과 사용 조건 확인부터 Hyper-V의 VM 세대·메모리·디스크·ISO 연결, 설치 부팅 오류 점검까지 안내합니다.

Windows Server 2025 / 서버 관리에 필요한 PowerShell 명령·도움말·파이프라인 기초

Windows Server 2025 / 서버 관리에 필요한 PowerShell 명령·도움말·파이프라인 기초

Windows PowerShell의 객체와 파이프라인을 서비스·디스크 조회 예제로 배웁니다. 필터 조건 비교, 계산 속성, 변수와 서식 처리의 차이를 실습할 수 있습니다.

Windows Server 2025 / Desktop Experience를 설치하는 방법

Windows Server 2025 / Desktop Experience를 설치하는 방법

Desktop Experience 이미지 선택, 설치 디스크 확인, Administrator 로그인과 운영체제 조회까지 Windows Server 2025의 새 설치 절차를 설명합니다.

Windows Server 2025 / 서버 관리자에서 역할과 기능을 추가·제거하는 방법

Windows Server 2025 / 서버 관리자에서 역할과 기능을 추가·제거하는 방법

역할과 기능의 차이를 이해하고 서버 관리자·PowerShell로 Windows Server Backup을 설치해 봅니다. 대상 서버 확인, 추가 구성과 안전한 제거 기준도 함께 다룹니다.

Windows Server 2025 / 서버의 역할과 강좌 학습 순서

Windows Server 2025 / 서버의 역할과 강좌 학습 순서

Windows Server 2025의 주요 역할과 관리자 업무를 이해하고, 설치·도메인·정책·파일 서버·복구로 이어지는 실습 순서와 결과 확인 기준을 정리합니다.

Windows Server 2025 / Server Core와 Desktop Experience의 차이와 선택 기준

Windows Server 2025 / Server Core와 Desktop Experience의 차이와 선택 기준

Server Core와 Desktop Experience의 관리 방식, 원격 관리 준비 사항, 역할 지원 조건과 재설치가 필요한 선택 변경을 비교합니다.

Windows Server 2025 / Windows Admin Center를 설치하고 서버를 등록하는 방법

Windows Server 2025 / Windows Admin Center를 설치하고 서버를 등록하는 방법

Windows Admin Center의 게이트웨이 구조와 설치 선택 사항을 설명하고 서버 연결까지 안내합니다. 최신 설치 방식, 인증서와 두 구간의 통신·권한 점검 기준을 함께 다룹니다.

Windows Server 2025 / Standard와 Datacenter의 차이와 에디션 선택 기준

Windows Server 2025 / Standard와 Datacenter의 차이와 에디션 선택 기준

Standard와 Datacenter 선택 시 기본 역할, 확장 기능, 가상화 운영 규모와 라이선스 조건을 어떻게 구분해 확인해야 하는지 설명합니다.

Windows Server 2025 / 관리용 Windows PC에 RSAT를 설치하는 방법

Windows Server 2025 / 관리용 Windows PC에 RSAT를 설치하는 방법

Windows 11 관리 PC에 RSAT를 설치하고 AD·DNS·그룹 정책 도구를 실행하는 방법을 안내합니다. 관리 도구 설치와 원격 서버 권한, 도메인 구성 전후의 확인 범위를 구분합니다.