- Published on
모던 PowerShell & Windows DevOps 2026 완벽 가이드 - PowerShell 7.5 · WinGet · Sysinternals · DSC v3 · Windows Terminal · WSL2 심층 분석
- Authors

- Name
- Youngju Kim
- @fjvbn20031
- "Windows DevOps는 죽었다"는 미신과의 작별
- 1. PowerShell 7.5 vs Windows PowerShell 5.1: 무엇이 달라졌나
- 2. PowerShell 7.5의 핵심 신기능
- 3. PowerShell Gallery와 PSResourceGet
- 4. PSScriptAnalyzer로 린트하기
- 5. Pester 5로 테스트 작성
- 6. PSReadLine과 Predictive IntelliSense
- 7. WinGet — Windows의 공식 패키지 매니저
- 8. Chocolatey와 Scoop의 자리
- 9. Sysinternals 2024.x — Mark Russinovich의 보물상자
- 10. Windows Terminal 1.21 — 현대적 터미널 경험
- 11. WSL2 — Windows 안의 진짜 Linux 커널
- 12. Windows Containers — Docker가 아닌 또 다른 길
- 13. DSC v3 — Desired State Configuration의 부활
- 14. Ansible for Windows
- 15. SCCM / Intune / Microsoft Endpoint Manager
- 16. Azure CLI 2 vs Az PowerShell
- 17. AWS Tools for PowerShell, GCP PowerShell, GitHub CLI
- 18. Try/Catch, 공통 파라미터, Splatting
- 19. Pipeline 객체와 PSCustomObject
- 20. GUI 자동화 — Out-GridView, ImportExcel, PSWriteHTML
- 21. Active Directory와 Group Policy cmdlet
- 22. Microsoft Graph PowerShell SDK
- 23. Windows Server 2025의 신기능
- 24. Best Practices — 실전 권장 사항
- 25. PowerShell Universal과 PowerShell Studio
- 26. 한국 / 일본 / 글로벌 Windows DevOps 현장
- References
"Windows DevOps는 죽었다"는 미신과의 작별
2026년 현재, "DevOps는 리눅스만 한다"는 말은 더 이상 사실이 아닙니다. Windows Server 2025가 핫패칭(hotpatching)과 OpenSSH를 기본 탑재한 이래, Windows는 다시 한 번 엔터프라이즈 자동화의 일급 시민으로 돌아왔습니다. NHN Cloud의 Windows VM 워크로드는 2025년 기준 전체 IaaS 매출의 22%를 차지하고, Samsung SDS와 LG CNS의 SI 프로젝트 대부분은 여전히 Active Directory와 SCCM 위에서 돌아갑니다. 일본의 NEC, IIJ, 후지쯔는 Windows 운영을 핵심 서비스로 유지하고 있으며, Microsoft Japan 도쿄 오피스는 PowerShell 7.5의 일본어 PSReadLine 지원을 직접 기여했습니다.
이 글은 2026년 5월 시점에서 PowerShell 7.5, WinGet, Sysinternals 2024.x, DSC v3, Windows Terminal 1.21 같은 핵심 도구의 실전 사용법과 — 단순한 cmdlet 나열을 넘어 — 실제 운영 패턴, 함정, 그리고 한국/일본/글로벌 사례를 정리한 심층 가이드입니다. 리눅스만 다뤄 본 엔지니어도, 30년 Windows admin 출신도 둘 다 얻어 갈 게 있을 겁니다.
1. PowerShell 7.5 vs Windows PowerShell 5.1: 무엇이 달라졌나
먼저 짚고 넘어가야 할 것이 있습니다. PowerShell은 두 개 있습니다.
- Windows PowerShell 5.1: 2016년 출시, .NET Framework 4.x 기반, Windows 10/11에 기본 포함. 더 이상 신기능 개발 없음 (보안 패치만).
- PowerShell 7.x: 2020년부터 시작된 오픈소스 cross-platform 후속작. 2026년 현재 7.4 LTS와 7.5 GA가 공존. .NET 8/9 기반.
5.1을 떠나야 하는 이유는 명확합니다:
- 속도 — 7.5는 일부 워크로드에서 5.1 대비 3~5배 빠릅니다. 특히 ForEach-Object -Parallel은 5.1에 없는 기능입니다.
- .NET 9 — System.Text.Json, HttpClient 같은 모던 라이브러리 사용 가능.
- 네이티브 명령 통합 — kubectl, terraform, az 같은 도구의 출력 파싱이 훨씬 자연스럽습니다.
- Cross-platform — Linux/macOS에서도 동일 스크립트 실행 가능.
- Predictive IntelliSense — Az Predictor, GitHub Copilot for CLI 통합.
다만 5.1을 완전히 버릴 수는 없는 상황도 있습니다: Active Directory 모듈(RSAT)의 일부 cmdlet, ConfigMgr(SCCM) 모듈, Exchange Online 일부 레거시 모듈은 여전히 5.1 전용입니다. 이 경우 7.5에서 WindowsCompatibility 모듈로 우회하거나, pwsh -WindowsPowerShell 같은 호환 모드를 활용합니다.
2. PowerShell 7.5의 핵심 신기능
#Requires -Version 7.4
# ForEach-Object -Parallel: 5.1에는 없는 기능
1..100 | ForEach-Object -Parallel {
"Processing $_"
Start-Sleep -Seconds 1
} -ThrottleLimit 10
# Ternary operator (7.0+)
$status = (Test-Path C:\foo) ? "exists" : "missing"
# Pipeline chain operators
Get-Service Spooler && Restart-Service Spooler || Write-Warning "Service not found"
# Null-conditional operator
$user?.Profile?.Email
# Splatting + advanced functions
$params = @{
Path = "C:\Logs"
Recurse = $true
Filter = "*.log"
}
Get-ChildItem @params
7.5에 새로 들어온 주목할 변화는 ConvertTo-Json -EnumsAsStrings가 기본 동작이 되었다는 점, Test-Json의 스키마 검증 강화, 그리고 PSResourceGet의 PSGallery 대체입니다.
3. PowerShell Gallery와 PSResourceGet
PowerShell의 패키지 매니저는 두 가지가 있습니다:
- PowerShellGet 2.x (구버전) — Install-Module, Find-Module
- Microsoft.PowerShell.PSResourceGet (신버전, 7.4+에 기본 포함) — Install-PSResource, Find-PSResource
# 신버전 (권장)
Install-PSResource -Name Az -Scope CurrentUser
Install-PSResource -Name Microsoft.Graph -Scope AllUsers
# 구버전 (호환성)
Install-Module -Name PSScriptAnalyzer -Scope CurrentUser -Force
# 저장소 추가 (private feed)
Register-PSResourceRepository -Name "InternalNuGet" -Uri "https://nuget.internal/v3/index.json"
PSResourceGet은 NuGet v3 프로토콜을 네이티브로 지원해서 Azure Artifacts, GitHub Packages, JFrog Artifactory 같은 사내 피드와 곧바로 연동됩니다. 이는 PowerShellGet 2.x의 가장 큰 단점이었습니다.
4. PSScriptAnalyzer로 린트하기
Install-PSResource PSScriptAnalyzer -Scope CurrentUser
# 단일 파일 분석
Invoke-ScriptAnalyzer -Path .\Deploy.ps1 -Severity Warning,Error
# 디렉토리 재귀
Invoke-ScriptAnalyzer -Path .\scripts -Recurse -Settings PSGallery
# CI에 통합 (exit code 활용)
$results = Invoke-ScriptAnalyzer -Path .\scripts -Recurse
if ($results) {
$results | Format-Table
throw "Linting failed with $($results.Count) issues"
}
PSScriptAnalyzerSettings.psd1 파일을 리포 루트에 두면 팀 전체가 동일 규칙을 공유합니다. 한국의 카카오엔터프라이즈와 일본의 사이버에이전트는 CI 게이트로 이 패턴을 표준화하고 있습니다.
5. Pester 5로 테스트 작성
Pester는 PowerShell의 사실상 표준 테스트 프레임워크입니다. 4.x와 5.x의 문법 차이가 크니 새 프로젝트는 반드시 5.x를 쓰세요.
# Tests/Get-UserInfo.Tests.ps1
BeforeAll {
. $PSScriptRoot/../src/Get-UserInfo.ps1
}
Describe "Get-UserInfo" {
Context "유효한 사용자" {
It "이름을 반환한다" {
$result = Get-UserInfo -UserId 1
$result.Name | Should -Be "Alice"
}
It "Mock된 API를 호출한다" {
Mock Invoke-RestMethod { @{ name = "Test" } }
Get-UserInfo -UserId 1
Should -Invoke Invoke-RestMethod -Times 1
}
}
Context "에러 처리" {
It "존재하지 않는 ID는 throw한다" {
{ Get-UserInfo -UserId -1 } | Should -Throw
}
}
}
# 실행
Invoke-Pester -Path ./Tests -Output Detailed
Pester 5의 핵심은 discovery/run 분리입니다. BeforeAll은 discovery 후에 실행되고, It 안에서만 사용할 수 있는 cmdlet들이 있습니다(Should, Mock 등). 4.x 마인드로 작성하면 디버깅이 매우 어렵습니다.
6. PSReadLine과 Predictive IntelliSense
Windows Terminal에서 PowerShell이 정말 강력해진 건 PSReadLine 덕분입니다.
# 예측 출처: History + 플러그인
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Set-PSReadLineOption -PredictionViewStyle ListView
# 키 바인딩 (bash 스타일)
Set-PSReadLineOption -EditMode Emacs
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
# Az Predictor 설치
Install-PSResource Az.Tools.Predictor
Enable-AzPredictor
# GitHub Copilot for CLI는 별도 설치
# gh extension install github/gh-copilot
$PROFILE 파일(보통 ~/Documents/PowerShell/Microsoft.PowerShell_profile.ps1)에 위 설정을 넣으면 모든 세션에 적용됩니다. Az Predictor는 Azure cmdlet의 다음 파라미터를 ML로 추천하고, Copilot for CLI는 자연어로 명령을 생성합니다.
7. WinGet — Windows의 공식 패키지 매니저
WinGet은 Microsoft가 2021년에 출시한 공식 패키지 매니저로, 2026년 현재 1.10이 안정 버전입니다. Windows 11과 Windows 10 21H2 이상에 기본 탑재되어 있습니다.
# 검색
winget search "vs code"
# 설치 (silent, 사용자 단위)
winget install Microsoft.VisualStudioCode --scope user --silent
# 업그레이드 (모든 패키지)
winget upgrade --all
# 내보내기/가져오기 — 신규 머신 셋업의 핵심
winget export -o C:\my-apps.json
winget import -i C:\my-apps.json
# Configuration 파일 (DSC와 통합)
winget configure --file workstation-setup.winget
WinGet의 진짜 장점은 Microsoft Store + community repo 통합입니다. Chocolatey와 Scoop이 갖는 약점(스토어 앱 미지원, 라이선스 검증 부재)을 해결하고, 엔터프라이즈에서는 사내 private source를 등록할 수 있습니다.
8. Chocolatey와 Scoop의 자리
WinGet이 표준이 됐지만, Chocolatey와 Scoop은 여전히 유효한 선택지입니다.
- Chocolatey — 2011년 출시, 엔터프라이즈 기능(Chocolatey for Business)이 강력합니다. Windows-only 가운데 가장 큰 community 패키지 풀(10,000+).
- Scoop — 개발자 친화적, 비관리자 권한으로 설치 가능, 환경 변수 자동 관리, "한 도구 = 한 폴더" 철학.
# Chocolatey
choco install -y git nodejs python3
choco upgrade all -y
# Scoop
scoop install git nodejs python
scoop update *
# 비교 기준
# - 어드민 권한 필요 여부: choco (필요) vs scoop (불필요)
# - 패키지 격리: choco (전역) vs scoop (~/scoop/apps)
# - 엔터프라이즈: choco가 우세
실무 권장: 개발자 워크스테이션은 Scoop, 서버는 WinGet 또는 Chocolatey가 좋은 출발점입니다.
9. Sysinternals 2024.x — Mark Russinovich의 보물상자
Sysinternals는 1996년 Mark Russinovich와 Bryce Cogswell이 만든 도구 모음으로, 2006년 Microsoft가 인수했습니다. Mark는 현재 Azure CTO입니다. 2024.x 버전이 2026년 5월 기준 최신입니다.
핵심 도구:
- Process Explorer (procexp) — Task Manager의 슈퍼셋. 부모-자식 트리, 핸들/DLL 검색, DigiSign 검증.
- Process Monitor (procmon) — 파일/레지스트리/네트워크/프로세스 실시간 추적. 디버깅의 끝판왕.
- Autoruns — 시작 프로그램, 서비스, 드라이버, 스케줄러를 한 화면에 표시. 악성코드 헌팅에 필수.
- TCPView — netstat의 GUI, 실시간 갱신.
- RAMMap — 메모리 사용 분석, 캐시/페이지 풀 시각화.
- Strings — 바이너리에서 ASCII/Unicode 문자열 추출.
- SDelete — DoD 5220.22-M 표준 안전 삭제.
- BgInfo — 데스크탑 배경에 호스트 정보 표시(서버 식별용).
- ZoomIt — 화면 줌+주석, Mark Russinovich가 발표에 사용해 유명해진 도구.
# Sysinternals Live — 설치 없이 직접 실행
# 네트워크 위치를 매핑하거나 \\live.sysinternals.com\tools 경로 사용
Start-Process "\\live.sysinternals.com\tools\procexp64.exe"
# 또는 WinGet으로 한 번에
winget install 9P7KNL5RWT25 # Sysinternals Suite
live.sysinternals.com\tools는 항상 최신 빌드를 호스팅합니다. 인시던트 대응 중 USB 없이 즉시 실행할 수 있어서 보안 팀의 표준 무기입니다.
10. Windows Terminal 1.21 — 현대적 터미널 경험
cmd.exe와 PowerShell.exe의 낡은 콘솔 호스트를 떠나야 할 시간입니다. Windows Terminal은 2019년 오픈소스로 시작해서 2026년 1.21 버전에 이르렀습니다.
핵심 기능:
- 탭과 분할 창 — Alt+Shift+D로 분할, Alt+Shift+- / + 로 가로/세로 분할
- 프로필 — pwsh, cmd, WSL2 Ubuntu, Azure Cloud Shell, SSH 세션을 한 곳에
- GPU 렌더링 — DirectWrite로 수만 줄 출력도 부드럽게
- Quake mode — Win+` 로 화면 위에서 슬라이드 다운
- Settings UI — JSON 직접 편집 + GUI 모두 지원
- Color schemes — Campbell, One Half Dark, Solarized 등 내장
settings.json 예시:
{
"defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
"profiles": {
"list": [
{
"guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
"name": "PowerShell 7.5",
"commandline": "pwsh.exe -NoLogo",
"colorScheme": "One Half Dark",
"font": { "face": "CaskaydiaCove Nerd Font", "size": 11 }
}
]
},
"keybindings": [
{ "command": { "action": "splitPane", "split": "auto" }, "keys": "alt+shift+d" }
]
}
Nerd Font(예: CaskaydiaCove)를 쓰면 oh-my-posh와 starship 같은 프롬프트의 아이콘이 제대로 표시됩니다.
11. WSL2 — Windows 안의 진짜 Linux 커널
WSL2는 Microsoft가 Hyper-V 위에 띄우는 경량 Linux 커널입니다. WSL1의 syscall 변환 방식과 달리, WSL2는 실제 Linux 커널을 그대로 실행합니다.
# 설치
wsl --install
wsl --install -d Ubuntu-24.04
# 배포판 관리
wsl --list --verbose
wsl --set-default Ubuntu-24.04
wsl --shutdown # 모든 인스턴스 종료
wsl --export Ubuntu-24.04 C:\backup.tar
wsl --import Ubuntu-prod C:\WSL\prod C:\backup.tar
WSL2의 핵심 사용처:
- Docker Desktop / Podman Desktop / Rancher Desktop — 모두 WSL2 백엔드를 기본으로 사용.
- 개발 환경 — Linux 도구체인을 Windows에서 그대로.
- systemd 지원 (2022년부터) —
/etc/wsl.conf에systemd=true추가. - GUI 앱 (WSLg) — Wayland 기반, X11/Wayland 모두 지원.
.wslconfig (사용자 홈 디렉토리)로 리소스 제한:
[wsl2]
memory=8GB
processors=4
swap=2GB
networkingMode=mirrored
firewall=true
mirrored 네트워킹 모드(Windows 11 22H2+)는 WSL2의 IP를 Windows와 공유해서, localhost로 양방향 접근이 됩니다.
12. Windows Containers — Docker가 아닌 또 다른 길
WSL2 위 Linux 컨테이너와 별도로, Windows Container 자체가 존재합니다. Windows Server 2016부터 지원하며, IIS/MSSQL/Legacy .NET Framework 워크로드를 컨테이너화할 때 씁니다.
두 가지 격리 모드:
- Process isolation — 호스트와 커널 공유, 빠름, 같은 Windows 빌드 필요
- Hyper-V isolation — 각 컨테이너가 경량 VM, 더 안전, 다른 Windows 버전 가능
# Windows feature 활성화
Enable-WindowsOptionalFeature -Online -FeatureName containers -All
# Docker Engine for Windows containers
# 1) Docker Desktop에서 "Switch to Windows containers" (개발용)
# 2) 또는 Mirantis Container Runtime (프로덕션)
docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2025 powershell
NHN Cloud의 ASP.NET 레거시 마이그레이션 사례에서, IIS 컨테이너화로 호스트 머신 수를 60% 줄인 보고가 있습니다.
13. DSC v3 — Desired State Configuration의 부활
DSC는 PowerShell 기반 선언형 구성 관리 도구로, 2014년 출시 후 한동안 정체됐다가 DSC v3(2024년 GA, cross-platform)로 부활했습니다. v3는 Rust로 재작성된 엔진을 사용하고, JSON/YAML 입력을 받습니다.
# example.dsc.config.yaml
$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
resources:
- name: Web server packages
type: Microsoft.WinGet/Package
properties:
id: Microsoft.IIS.Express
source: winget
- name: Service state
type: Microsoft.Windows/Service
properties:
name: W3SVC
startupType: Automatic
state: Running
# 적용
dsc config set --file example.dsc.config.yaml
# 현재 상태 확인
dsc config get --file example.dsc.config.yaml
# Drift 탐지
dsc config test --file example.dsc.config.yaml
DSC v3의 강점은 PowerShell, WinGet, registry, service, file 모두 통일된 인터페이스에서 관리한다는 점, 그리고 Linux 리소스(systemd, apt 등)도 같은 문법으로 다룬다는 점입니다. Ansible의 멱등성(idempotency)에 PowerShell의 표현력을 더한 형태로 보면 됩니다.
14. Ansible for Windows
Ansible은 SSH가 아닌 WinRM 또는 SSH(Windows Server 2019+ 기본)로 Windows를 관리합니다.
# playbooks/iis.yml
- hosts: windows
tasks:
- name: Install IIS
ansible.windows.win_feature:
name: Web-Server
state: present
include_management_tools: yes
- name: Deploy site files
ansible.windows.win_copy:
src: ./dist/
dest: C:\inetpub\wwwroot\
inventory.ini:
[windows]
win-01 ansible_host=10.0.0.5
[windows:vars]
ansible_user=Administrator
ansible_password={{ vault_admin_pw }}
ansible_connection=winrm
ansible_winrm_transport=ntlm
ansible_port=5985
Ansible의 장점은 푸시 방식, 에이전트리스, YAML 친화성입니다. 단점은 WinRM 설정의 보안 복잡도(Kerberos vs NTLM vs CredSSP)와 일부 cmdlet 래핑의 부재입니다.
15. SCCM / Intune / Microsoft Endpoint Manager
엔터프라이즈 데스크탑/서버 관리의 양대 산맥:
- SCCM (System Center Configuration Manager) — 온프레미스 기반. 윈도우 패치, 소프트웨어 배포, OS 이미지 배포. 한국 대기업 SI 환경의 사실상 표준.
- Intune (Microsoft Endpoint Manager) — 클라우드 기반. BYOD, 모바일 기기까지 포괄.
2026년 트렌드는 co-management(SCCM + Intune 병행) 또는 cloud-attach(SCCM 인프라를 Intune으로 점진 이전)입니다. 삼성SDS와 LG CNS의 다수 프로젝트가 이 단계에 있습니다.
PowerShell 연동:
# ConfigMgr cmdlet (5.1 전용)
Import-Module ConfigurationManager
Set-Location "PRI:" # site code
Get-CMDevice -Name "PC-001"
# Microsoft Graph로 Intune 관리 (7.x 가능)
Connect-MgGraph -Scopes "DeviceManagementConfiguration.ReadWrite.All"
Get-MgDeviceManagementManagedDevice -Top 10
ConfigMgr 모듈은 여전히 PowerShell 5.1을 요구하므로, Intune 측은 Microsoft Graph로 7.x에서 통합 관리하는 하이브리드 패턴이 일반적입니다.
16. Azure CLI 2 vs Az PowerShell
Azure를 자동화하는 두 가지 방식:
- Azure CLI 2 (az) — Python 기반, bash/zsh/pwsh 모두에서 동일하게 동작, JSON 출력 기본.
- Az PowerShell — PowerShell 네이티브, 객체 파이프라인, splatting, PSCustomObject.
# Az PowerShell
Install-PSResource Az
Connect-AzAccount
Get-AzVM -ResourceGroupName "prod-rg" |
Where-Object { $_.PowerState -eq "VM running" } |
Select-Object Name, Location, HardwareProfile
# Azure CLI (pwsh 안에서 호출)
az vm list --resource-group prod-rg --query "[?powerState=='VM running'].{name:name,location:location}" -o table
선택 기준:
- CI/CD 파이프라인: Azure CLI (cross-platform, JSON 파싱 단순)
- 운영 자동화 / PowerShell 친화 팀: Az PowerShell (객체 파이프라인 강점)
- Bicep/ARM 배포: 둘 다 동일하게 가능
17. AWS Tools for PowerShell, GCP PowerShell, GitHub CLI
# AWS
Install-PSResource AWS.Tools.Common
Install-PSResource AWS.Tools.EC2
Set-AWSCredential -AccessKey AKIA... -SecretKey ... -StoreAs prod
Get-EC2Instance -ProfileName prod
# GCP
Install-PSResource GoogleCloud
Get-GceInstance -Project my-project
# GitHub CLI (gh)
winget install GitHub.cli
gh auth login
gh pr list --json number,title,author | ConvertFrom-Json | Format-Table
특히 gh CLI는 출력이 깨끗한 JSON이라 PowerShell의 ConvertFrom-Json과 환상의 짝궁입니다. PR/Issue 자동화에서 광범위하게 쓰입니다.
18. Try/Catch, 공통 파라미터, Splatting
Production-grade PowerShell의 3대 요소:
function Invoke-SafeRestApi {
[CmdletBinding()]
param(
[Parameter(Mandatory)][string]$Uri,
[int]$Retries = 3,
[int]$DelaySeconds = 2
)
for ($i = 1; $i -le $Retries; $i++) {
try {
$params = @{
Uri = $Uri
Method = 'Get'
TimeoutSec = 30
MaximumRetryCount = 0
ErrorAction = 'Stop'
}
return Invoke-RestMethod @params
}
catch [System.Net.Http.HttpRequestException] {
Write-Warning "Attempt $i failed: $($_.Exception.Message)"
if ($i -eq $Retries) { throw }
Start-Sleep -Seconds $DelaySeconds
}
finally {
Write-Verbose "Attempt $i complete"
}
}
}
# 공통 파라미터 자동 활성화: -Verbose, -ErrorAction, -ErrorVariable
Invoke-SafeRestApi -Uri "https://api.example.com/health" -Verbose -ErrorAction Continue
[CmdletBinding()] 한 줄로 Verbose, Debug, ErrorAction, WarningAction 등 공통 파라미터가 자동 활성화됩니다. @params splatting은 가독성과 재사용성 모두 잡습니다.
19. Pipeline 객체와 PSCustomObject
PowerShell의 진짜 힘은 객체 파이프라인입니다. bash가 텍스트를 흘려보내는 사이, PowerShell은 .NET 객체를 흘려보냅니다.
# 파이프라인 예시
Get-Process |
Where-Object { $_.WorkingSet64 -gt 500MB } |
Sort-Object -Property WorkingSet64 -Descending |
Select-Object -First 10 Name, Id, @{N='RAM(MB)';E={[int]($_.WorkingSet64/1MB)}} |
Format-Table
# PSCustomObject = PowerShell의 DTO
$report = Get-Service | ForEach-Object {
[PSCustomObject]@{
Name = $_.Name
Status = $_.Status
StartType = $_.StartType
CheckedAt = Get-Date
}
}
$report | Export-Csv services.csv -NoTypeInformation
$report | ConvertTo-Json -Depth 3 | Set-Content services.json
ForEach-Object -Parallel을 더하면 IO bound 작업이 비약적으로 빨라집니다:
$servers = Get-Content servers.txt
$servers | ForEach-Object -Parallel {
Test-NetConnection $_ -Port 443 -InformationLevel Quiet
} -ThrottleLimit 32
20. GUI 자동화 — Out-GridView, ImportExcel, PSWriteHTML
PowerShell도 가벼운 GUI를 만들 수 있습니다:
# Out-GridView로 대화형 선택
$selected = Get-Process | Out-GridView -PassThru -Title "프로세스 선택"
$selected | Stop-Process -WhatIf
# ImportExcel — Excel 없이 .xlsx 읽고 쓰기
Install-PSResource ImportExcel
Get-Service | Export-Excel -Path C:\services.xlsx -AutoSize -TableStyle Medium2
# PSWriteHTML — 인터랙티브 HTML 리포트
Install-PSResource PSWriteHTML
New-HTML -FilePath C:\report.html -ShowHTML {
New-HTMLTab -Name "Services" {
New-HTMLTable -DataTable (Get-Service) -ScrollX
}
}
PSWriteHTML로 만든 리포트는 DataTables, Charts.js 기반이라 검색, 정렬, 필터링이 다 됩니다. 매일 아침 자동 전송되는 운영 리포트에 자주 쓰입니다.
21. Active Directory와 Group Policy cmdlet
Import-Module ActiveDirectory # RSAT 필요, 여전히 5.1 친화적
# 사용자 조회
Get-ADUser -Filter "Department -eq 'Engineering'" -Properties EmailAddress |
Select-Object SamAccountName, EmailAddress
# 그룹 멤버
Get-ADGroupMember -Identity "Domain Admins" -Recursive |
Get-ADUser -Properties LastLogonDate |
Select-Object Name, LastLogonDate
# 로컬 사용자
New-LocalUser -Name "deployer" -Password (Read-Host -AsSecureString) -Description "CI Deployer"
Add-LocalGroupMember -Group "Administrators" -Member "deployer"
# Group Policy
Get-GPO -All | Select-Object DisplayName, CreationTime, ModificationTime
Backup-GPO -Name "Default Domain Policy" -Path C:\GPOBackups
Active Directory cmdlet은 7.x에서 WindowsCompatibility로 우회 사용 가능하지만, 일부 시나리오에서는 여전히 5.1이 안정적입니다.
22. Microsoft Graph PowerShell SDK
기존 AzureAD와 MSOnline 모듈은 2024년에 폐기되었고, Microsoft Graph PowerShell SDK가 후속입니다.
Install-PSResource Microsoft.Graph -Scope CurrentUser
# 권한 부여 후 연결
Connect-MgGraph -Scopes "User.Read.All","Group.Read.All"
# 사용자 조회 (Azure AD 사용자)
Get-MgUser -Filter "department eq 'IT'" -Top 100 |
Select-Object DisplayName, UserPrincipalName, Mail
# Conditional Access 정책
Get-MgIdentityConditionalAccessPolicy |
Select-Object DisplayName, State
# Intune 디바이스
Get-MgDeviceManagementManagedDevice -Top 50 |
Where-Object { $_.OperatingSystem -eq "Windows" }
Disconnect-MgGraph
Microsoft Graph는 REST API의 모든 면을 PowerShell화한 결과로, 모듈 수가 60+개라 크기가 크지만 Microsoft.Graph.Authentication만 깔고 필요한 sub-module을 그때그때 받는 식이 좋습니다.
23. Windows Server 2025의 신기능
2024년 11월 GA된 Windows Server 2025의 DevOps 관련 핵심 변화:
- Hotpatching for Windows Server — 재부팅 없이 보안 패치 (Azure Arc 등록 시 무료).
- OpenSSH 기본 탑재 (server-side) —
Add-WindowsFeature -Name OpenSSH-Server. - Sysmon이 기본 통합 — 보안 이벤트 로깅 강화.
- DTrace — Linux의 strace/eBPF에 해당.
- WSL2 on Server — 서버에서도 WSL2 사용 가능.
- SMB over QUIC — VPN 없이 인터넷 너머 파일 공유.
- Active Directory 30+년 만의 대규모 업데이트 — 32k page size, OPTIONAL_FEATURE 도입.
# SSH 활성화
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service sshd -StartupType Automatic
# Default shell을 pwsh로
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force
이로써 Linux 워크플로(SSH + 표준 도구)가 Windows에서도 일급 시민이 됐습니다.
24. Best Practices — 실전 권장 사항
장기 운영을 위한 베스트 프랙티스:
#Requires -Version 7.4— 스크립트 최상단에 선언, 잘못된 인터프리터 차단.- 별칭 금지 —
gci,ls,?,%대신Get-ChildItem,Where-Object,ForEach-Object사용. 가독성과 정적 분석 모두 향상. - 승인된 동사(Approved Verbs) —
Get-Verb로 확인. 새 함수명은 반드시Get-,Set-,New-,Invoke-등. - Code-Signing 인증서 — 프로덕션 스크립트는 반드시 사인.
Set-AuthenticodeSignature -FilePath script.ps1 -Certificate $cert - Execution Policy — 머신은
RemoteSigned또는AllSigned, 절대Bypass를 영구 적용하지 말 것. - Constrained Language Mode — 외부 입력을 다루는 환경에선 활성화 검토.
- PSScriptAnalyzer + Pester를 CI 게이트로 — 머지 전 자동 차단.
- 모듈 매니페스트(.psd1) — 버전, 의존성, 내보낼 함수를 명시.
- 로깅 —
Start-Transcript로 세션 전체 기록, 또는Write-Information/Write-Verbose명확히 구분. - 에러 처리 —
$ErrorActionPreference = 'Stop'을 기본값으로, try/catch로 명시적 처리.
25. PowerShell Universal과 PowerShell Studio
Ironman Software의 PowerShell Universal은 PowerShell 스크립트를 웹 API/대시보드/스케줄러로 즉시 노출할 수 있는 도구입니다. 사내 self-service 포털 구축에서 가장 자주 쓰입니다.
# Pode/PSU의 페이지 정의 (의사 코드)
New-UDPage -Name "VM Restart" -Content {
New-UDTextbox -Id "vmName"
New-UDButton -Text "Restart" -OnClick {
$name = (Get-UDElement -Id "vmName").value
Restart-AzVM -Name $name -ResourceGroupName "prod-rg"
Show-UDToast "Restarted $name"
}
}
**PowerShell Studio (SAPIEN Technologies)**는 GUI 빌더 포함 풀 IDE로, 폼 기반 운영 도구를 시각적으로 만들 때 유용합니다. VS Code + PowerShell 확장이 표준이지만, 폼/GUI 작업이 많은 팀에는 여전히 좋은 선택입니다.
26. 한국 / 일본 / 글로벌 Windows DevOps 현장
한국 사례:
- NHN Cloud — Windows VM과 SQL Server 워크로드, 자체 PowerShell 자동화 라이브러리.
- Samsung SDS — 글로벌 사이트 운영에 SCCM + Intune + PowerShell DSC v3 도입 중.
- Naver Cloud — Windows 서버 호스팅, Hyper-V 기반 클라우드 콘솔.
- LG CNS — SI 프로젝트의 Active Directory + GPO + ConfigMgr 표준 패턴.
- 카카오엔터프라이즈 — Pester + PSScriptAnalyzer를 CI 게이트로 표준화.
일본 사례:
- NEC — 정부/금융 시스템의 Windows 운영, JIS 인증 자동화 도구.
- IIJ — Windows VPS 호스팅, WSUS + PowerShell 패치 자동화.
- Microsoft Japan (도쿄) — PowerShell 7.5 i18n 기여, PSReadLine 일본어 입력 안정화.
- 사이버에이전트 — 게임 운영에 Windows 컨테이너 활용.
- 후지쯔 — 엔터프라이즈 SCCM/Intune SI 사업.
글로벌 트렌드:
- Microsoft 자체가 Bing/Office 인프라의 상당 부분을 PowerShell 7로 운영.
- GitHub Actions의
windows-2022,windows-2025러너에 PS 7.5 기본 포함. - Azure DevOps Pipelines + Azure PowerShell이 여전히 강력한 조합.
Windows DevOps는 죽지 않았습니다. 오히려 PowerShell 7, WSL2, OpenSSH, DSC v3, Microsoft Graph가 합쳐지면서 리눅스 DevOps에 가까운 워크플로가 가능해졌고, 동시에 Active Directory와 SCCM 같은 엔터프라이즈 자산도 그대로 활용할 수 있습니다. 2026년의 Windows DevOps 엔지니어는 양쪽 세계의 최고 도구를 모두 손에 쥐고 있습니다.
References
- PowerShell 공식 문서 — https://learn.microsoft.com/powershell/
- PowerShell GitHub — https://github.com/PowerShell/PowerShell
- PowerShell Gallery — https://www.powershellgallery.com/
- PSScriptAnalyzer — https://github.com/PowerShell/PSScriptAnalyzer
- Pester — https://pester.dev/
- PSReadLine — https://github.com/PowerShell/PSReadLine
- WinGet (Windows Package Manager) — https://learn.microsoft.com/windows/package-manager/
- Chocolatey — https://chocolatey.org/
- Scoop — https://scoop.sh/
- WSL2 공식 — https://learn.microsoft.com/windows/wsl/
- Windows Terminal — https://github.com/microsoft/terminal
- Sysinternals — https://learn.microsoft.com/sysinternals/
- Sysinternals Live — https://live.sysinternals.com/
- DSC v3 — https://learn.microsoft.com/powershell/dsc/overview
- Ansible Windows — https://docs.ansible.com/ansible/latest/os_guide/windows.html
- Az PowerShell — https://learn.microsoft.com/powershell/azure/
- AWS Tools for PowerShell — https://aws.amazon.com/powershell/
- Microsoft Graph PowerShell SDK — https://learn.microsoft.com/powershell/microsoftgraph/
- Windows Server 2025 — https://learn.microsoft.com/windows-server/get-started/whats-new-in-windows-server-2025
- Mark Russinovich — https://learn.microsoft.com/sysinternals/community/mark-russinovich
- Ironman Software PowerShell Universal — https://ironmansoftware.com/powershell-universal
- SAPIEN PowerShell Studio — https://www.sapien.com/software/powershell_studio
- GitHub CLI — https://cli.github.com/
- NHN Cloud — https://www.nhncloud.com/
- Samsung SDS — https://www.samsungsds.com/