생성 배경
- 신규 입사한 회사에서 사원 PC/서버 자산 관리가 미비
- 25년 하반기부터 전산관리 예정
- CPU / Memory / Disk / IP / 모델명을 표준 포맷으로 빠르게 취합해야 함
목표
- Windows 10/11 및 Windows Server의 핵심 자산 정보 자동 수집
- 결과를 메모장(txt) 으로 저장 (이후 Python으로 수집본을 엑셀로 자동 통합 예정)
환경 & 제약
- 대상: Windows 10/11, Windows Server 2016/2019/2022
- 권한: 로컬 관리자(원격 수집 시 WinRM/CIM 허용)
- 산출물: system_info.txt
- 제약
- 사내 보안 프로그램으로 C: 드라이브 쓰기/스크립트 실행 제한
- 개인 Z 드라이브에서 .bat, .ps1 실행 불가
- 해결: “bat to exe” 도구로 PowerShell 호출 배치파일을 EXE로 변환하여 배포
배포 방식(요약)
- collect_system_info.ps1 작성
- 호출용 run_collector.bat 작성
@echo off powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0collect_system_info.ps1" - 위 BAT를 bat to exe 도구로 EXE 변환 → 사용자 PC에서 EXE 실행
Code (UTF-8 BOM 저장, 경로 폴백 포함)
아래 코드는 바탕화면 저장을 우선 시도하고, 실패하면 문서/임시폴더 순으로 자동 폴백
# ================== 시스템 정보 수집: TXT 저장 ==================
# 저장 경로 후보
$destinations = @(
[Environment]::GetFolderPath("Desktop"),
[Environment]::GetFolderPath("MyDocuments"),
$env:TEMP
)
# 수집 시작
$sysinfo = @()
$sysinfo += '=============================================='
$sysinfo += '[Windows 시스템 정보 추출]'
$sysinfo += '=============================================='
# 사용자/호스트
$sysinfo += '사용자 이름: ' + $env:USERNAME
$sysinfo += ''
$sysinfo += '호스트네임: ' + $env:COMPUTERNAME
$sysinfo += ''
# OS 정보
$os = Get-CimInstance Win32_OperatingSystem
$sysinfo += 'OS 이름: ' + $os.Caption
$sysinfo += 'OS 버전: ' + $os.Version
$sysinfo += '등록된 소유자: ' + $os.RegisteredUser
$sysinfo += ''
# CPU
$cpu = Get-CimInstance Win32_Processor
$sysinfo += 'CPU: ' + ($cpu.Name -join '; ')
$sysinfo += 'CPU 코어 수: ' + (($cpu | Measure-Object -Property NumberOfCores -Sum).Sum)
$sysinfo += ''
# 메모리 (KB -> GB 환산)
$memGB = [math]::Round((($os.TotalVisibleMemorySize * 1KB) / 1GB), 2)
$sysinfo += '총 실제 메모리: ' + $memGB + ' GB'
$sysinfo += '메모리 모델명:'
$mem = Get-CimInstance Win32_PhysicalMemory | Select-Object Manufacturer, PartNumber, Capacity
$sysinfo += ($mem | Format-Table -AutoSize | Out-String)
$sysinfo += ''
# 드라이브 용량
$sysinfo += '드라이브 용량:'
Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" | ForEach-Object {
$sysinfo += "$($_.DeviceID) 드라이브 = $([math]::Round($_.Size/1GB,2)) GB"
}
$sysinfo += ''
# 물리 디스크 정보 (SSD/HDD)
$sysinfo += '물리 디스크 정보:'
try {
$disks = Get-PhysicalDisk
foreach ($disk in $disks) {
$sysinfo += (" - 이름: {0} / 크기: {1:N2} GB / 유형: {2}" -f $disk.FriendlyName, ($disk.Size/1GB), $disk.MediaType)
}
} catch {
$disks = Get-CimInstance Win32_DiskDrive
foreach ($disk in $disks) {
$type = if ($disk.Model -match "SSD") { "SSD" } else { "HDD/Unknown" }
$sysinfo += (" - 모델: {0} / 크기: {1:N2} GB / 추정유형: {2}" -f $disk.Model, ($disk.Size/1GB), $type)
}
}
$sysinfo += ''
# 시리얼 넘버
$serial = (Get-CimInstance Win32_BIOS).SerialNumber
$sysinfo += '시리얼 넘버: ' + $serial
$sysinfo += ''
# 그래픽 카드 모델
$gpuList = Get-CimInstance Win32_VideoController | Select-Object -ExpandProperty Name
$sysinfo += '그래픽 카드 모델:'
foreach ($gpu in $gpuList) { $sysinfo += ' - ' + $gpu }
$sysinfo += ''
# 네트워크 정보 (IPv4 + MAC)
$sysinfo += '네트워크 어댑터 정보:'
$netAdapters = Get-CimInstance Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true }
foreach ($adapter in $netAdapters) {
$ip = $adapter.IPAddress | Where-Object { $_ -match '^\d{1,3}(\.\d{1,3}){3}$' } | Select-Object -First 1
$mac = $adapter.MACAddress
$sysinfo += " - 어댑터: $($adapter.Description)"
$sysinfo += " IP 주소: $ip"
$sysinfo += " MAC 주소: $mac"
}
$sysinfo += ''
# 파일 저장 (UTF-8 with BOM) + 경로 폴백
$utf8bom = New-Object System.Text.UTF8Encoding($true)
$saveOk = $false
foreach ($dest in $destinations) {
try {
if (-not (Test-Path $dest)) { New-Item -ItemType Directory -Path $dest -Force | Out-Null }
$OutputFile = Join-Path $dest "system_info.txt"
[Systehttp://m.IO.File]::WriteAllLines($OutputFile, $sysinfo, $utf8bom)
Write-Host "[OK] 정보가 저장되었습니다: $OutputFile"
$saveOk = $true
break
} catch { continue }
}
if (-not $saveOk) {
Write-Host "[FAIL] 저장 실패: 쓰기 권한이 허용된 경로를 관리자에게 요청하세요."
}
# ================== 끝 ==================
사용 방법
- (보안 정책상 스크립트 실행이 막힌 경우) EXE 파일 형태로 배포
- 사용자 PC에서 EXE 실행 → 완료 메시지 확인
- 출력 파일: system_info.txt (바탕화면 → 문서 → 임시폴더 순으로 저장 시도)
출력 예시(일부)
==============================================
[Windows 시스템 정보 추출]
==============================================
사용자 이름: ahnchungsol
[Windows 시스템 정보 추출]
==============================================
사용자 이름: ahnchungsol
호스트네임: OFFICE-PC01
OS 이름: Microsoft Windows 11 Pro
OS 버전: 10.0.26100
등록된 소유자: ahnchungsol
CPU: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz
CPU 코어 수: 4
총 실제 메모리: 15.78 GB
메모리 모델명:
Manufacturer PartNumber Capacity
---------- ---------- --------
Samsung M471A1K43CB1-CTD 8589934592

향후 계획
- 각 PC에서 생성된 system_info.txt를 수집 → Python으로 일괄 병합(엑셀/피벗 자동 생성)
- 누락/오류 검출(예: IP 공백, MAC 중복) 규칙 추가
- 추후 "2025 하반기 자산조사 엑셀" 로 생성 예정 / 리눅스 버전 확인 필요

운영
- EXE가 보안 프로그램에 의해 격리될 수 있음 → 보안프로그램 확인 필요
- 원격 수집 버전이 필요하면 CIM/WinRM 허용 후 목록 기반 수집으로 확장
- 저장 경로가 모두 차단된 환경이면 **네트워크 공유(예: \\fileserver\inventory$)**를 추가해 폴백 후보에 넣기
'infra > Linux & Windows' 카테고리의 다른 글
| chatgpt 를 이용한 실력테스트 (2) | 2025.08.18 |
|---|---|
| Oracle Linux 8.3 네트워크 구성(독립망) - HCI 기반 (0) | 2023.10.30 |
| Oracle Linux (8.x) yum ssl certificate 오류 (0) | 2022.06.15 |
| Windows hyper-v 로 Centos7 설치 (0) | 2020.10.19 |
| Local repo 생성 (0) | 2020.06.04 |