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 / 로컬 사용자와 그룹을 만들고 관리자 권한을 관리하는 방법

로컬 사용자와 도메인 계정의 차이를 이해하고 GUI·PowerShell로 실습 사용자와 그룹을 만듭니다. 권한 확인, 로그인 토큰, 비활성화와 삭제 시 주의점까지 정리합니다.

Windows Server 2025 / WinRM과 PowerShell Remoting으로 서버를 원격 관리하는 방법

Windows Server 2025 / WinRM과 PowerShell Remoting으로 서버를 원격 관리하는 방법

WinRM 수신 설정을 확인하고 대화형 세션과 단발 명령을 사용하는 방법을 설명합니다. 도메인 인증과 격리 워크그룹 실습을 구분하고 제한된 신뢰 설정의 복원 절차도 제공합니다.

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

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

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

Windows Server 2025 / Server Core를 설치하고 SConfig로 초기 설정하는 방법

Windows Server 2025 / Server Core를 설치하고 SConfig로 초기 설정하는 방법

Server Core 이미지 선택부터 SConfig의 초기 설정과 PowerShell 확인까지 안내합니다. Desktop Experience와의 차이, DNS 설정 시점과 콘솔 복구 경로도 함께 살펴봅니다.

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

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

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

윈도우 서버 2025 / Active Directory / 메모

윈도우 서버 2025 / Active Directory / 메모

Active Directory 서버 업그레이드 사전 작업 D:\support\adprep> adprep /forestprep D:\support\adprep> adprep /domainprep 그룹 그룹 범위 글로벌 그룹 글로벌 그룹을 생성한 도메인의 사용자만 구성원이 될 수 있음 모든 도메인의 자원 사용 가능 도메인 로컬 그룹 모든 도메인의 사용자가 구성원이 될 수 있음 사용자가 속한 도메인의 자원만 사용 가능 유니버설 그룹 모든 도메인의 사용자가 구성원이 될 수 있음 모든 도메인의 자원 사용 가능 AGDLP, AGUDLP 윈도우 서버의 액세스 ...

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 / PowerShell로 서버 상태를 조회하고 CSV로 내보내는 방법

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

OS·메모리·디스크 정보를 CSV로 저장하는 전체 PowerShell 스크립트를 제공합니다. 결과 재조회, 수치 필터와 덮어쓰기 방지, 일부 실패 판정까지 안내합니다.

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

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

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