▣ Windows에서 사용하는 PowerShell 명령어 정리 및 CMD를 PS1으로 활용하는 방법- By Chat GPT
윈도우를 사용하면서 가끔 사용했던 PowerShell ^^ 이라는 녀석이 있습니다.
이 녀석은 명령프롬프트와 같은 명령어 형식을 가진 것도 있고 그렇지 않은 것도 있습니다.
예를 들어보자면 ping 같은 명령어의 경우 파워쉘과 명령 프롬프트가 동일합니다.
반면에 dir 명령어는 서로 다른 결과값을 보여 줍니다.
그래서 이 파워쉘(PowerShell)에 대해서 공부가 필요합니다.
이번에도 Chat GPT에게 물어봤습니다. 이런 지식검색에서는 Chat GPT가 엄청 뛰어납니다.
사람이 구글검색으로 하나하나 사이트 찾아가면서 정리해야 하는 것을 순식간에 정리해 줍니다.
아래 내용 참고 바랍니다.
저도 어디까지나 나중에 찾아볼 일이 있을 때를 대비해서 포스팅으로 올리는 거라서.....
참고용으로 활용하면 좋을 것 같습니다.
🗺️ Windows에서 사용하는 PowerShell 명령어 정리
✅ 아래 표는 **Windows PowerShell 5.x(클래식) 및 PowerShell 7.x(Core)**에서 자주 쓰이는 기본 Cmdlet을 기능별로 정리한 것입니다. 각 항목에 “기본 구문 / 주요 매개변수 / 대표 예시”를 넣어 실무·시험 대비 모두 활용할 수 있도록 구성했습니다.
범주 | Cmdlet | 핵심 용도 | 기본 구문 & 주요 매개변수 | 실전 예시 & 팁 |
도움말·학습 | Get-Help | 도움말 보기 | Get-Help <이름> [-Online] [-Examples] | Get-Help Get-Service -Full |
Get-Command | 사용 가능한 명령·함수·에일리어스 검색 | Get-Command -Noun Service | 이름 구조: 동사-명사 | |
Get-Member | 객체 속성·메서드 확인 | `… | Get-Member` | |
파일·디렉터리 | Get-Item / Set-Item | 파일·폴더 조회/수정 | Get-Item .\*.log | 별칭: gi, si |
Get-ChildItem | 목록 (리눅스 ls) | Get-ChildItem -Recurse -Filter *.ps1 | 별칭: gci, dir, ls | |
Copy-Item / Move-Item / Remove-Item | 복사·이동·삭제 | Copy-Item Src -Destination Dst -Recurse | -Force 숨김 파일 포함 | |
New-Item | 새 파일/디렉터리 | New-Item MyDir -ItemType Directory | 빈 파일: -ItemType File | |
텍스트·입·출력 | Get-Content / Set-Content | 파일 읽기/쓰기 | Get-Content .\notes.txt -Tail 10 | 실시간 모니터: -Wait |
Add-Content | 내용 추가 | Add-Content log.txt "----" | ||
Out-File / Out-Host | 파이프 출력 리디렉션 | `Get-Service | Out-File svc.txt` | |
프로세스·서비스 | Get-Process / Stop-Process | 프로세스 목록·종료 | Stop-Process -Name notepad -Force | `Get-Process |
Get-Service / Start-Service / Restart-Service | 서비스 관리 | Restart-Service Spooler | 상태 필터: -Status Running | |
시스템·OS | Get-EventLog | 이벤트 로그 조회 | Get-EventLog -LogName System -Newest 20 | EventID 필터: -InstanceId |
Get-HotFix | 패치(Hotfix) 목록 | `Get-HotFix | Where Id -Like KB*` | |
Get-WmiObjectGet-CimInstance | WMI/CIM 쿼리 | Get-CimInstance Win32_LogicalDisk | CIM이 WMI의 차세대 | |
네트워크 | Test-Connection | Ping 대체 | Test-Connection 8.8.8.8 -Count 5 | 결과 객체화 (표·CSV export 용이) |
Invoke-WebRequest / Invoke-RestMethod | HTTP GET/POST, REST API | Invoke-RestMethod https://api.github.com/repos/PowerShell/PowerShell/releases | 자동 JSON 파싱 | |
보안·자격 증명 | Get-Credential | 자격 증명 입력 대화창 | $cred = Get-Credential | PSCredential 객체 반환 |
ConvertTo-SecureString / ConvertFrom-SecureString | 암호화 문자열 변환 | `… | ConvertFrom-SecureString -AsPlainText -Force` | |
패키지·모듈 | Install-Module / Update-Module | PSGallery 모듈 설치 | Install-Module Az -Scope CurrentUser | 최초 실행 시 TLS 설정 필요 |
Import-Module | 모듈 로드 | Import-Module ActiveDirectory | ||
스크립트·제어 흐름 | ForEach-Object | 파이프라인 루프 | `… | ForEach-Object { $_.Name }` |
Where-Object | 조건 필터 | Where-Object {$_.Status -eq "Running"} | 별칭 ? | |
If, Switch, Try/Catch | 흐름·예외 처리 | if ($x -gt 5) { … } | 키워드 (Cmdlet 아님) | |
직렬화·데이터 | ConvertTo-Json / ConvertFrom-Json | JSON 변환 | `Get-Date | ConvertTo-Json` |
Export-Csv / Import-Csv | CSV 내보내기·읽기 | `Get-Process | Export-Csv ps.csv -NoTypeInformation` | |
환경·세션 | $env: 드라이브 | 환경 변수 접근 | $env:PATH | 설정: $env:EDITOR="vim" |
Set-Location | 경로 변경 (Unix cd) | Set-Location HKLM:\Software | 레지스트리 드라이브 이동 | |
Get-History / Invoke-History | 명령 기록 | Invoke-History 12 | 별칭: history | |
원격 관리 | Enter-PSSession / Invoke-Command | PowerShell Remoting | Enter-PSSession -Computer Server01 | WS‑Man(5985/5986) 기반 |
잡·병렬 | Start-Job / Get-Job | 백그라운드 잡 | Start-Job -ScriptBlock {Get-Date} | 결과 수집: Receive-Job |
ForEach-Object -Parallel (PS 7) | 파이프라인 병렬 | `1..10 | ForEach-Object -Parallel { $_ * $_ }` |
✅ PowerShell 사용 팁 & 추가 개념 (시험·실무 공통)
- 객체 기반 파이프라인
- ls | Select Name,Length | Sort Length -Desc 처럼 각 단계가 구조화된 객체를 주고받음.
- Format-Table/Format-List는 마지막에 사용(그 이후엔 텍스트가 되어 필터링 불가).
- 동사-명사 규칙
- Get-, Set-, New-, Remove-, Add-, Clear-, Start-, Stop-, Test-, Invoke- 등 표준 동사를 먼저 확인하면 cmdlet 기능이 보입니다.
- 파워셸 에일리어스
- Linux 친화: ls→Get-ChildItem, cat→Get-Content, mv→Move-Item.
- 스크립트에는 가독성을 위해 정식 cmdlet 이름을 쓰는 것이 권장.
- 보안 실행 정책
- Get-ExecutionPolicy, Set-ExecutionPolicy RemoteSigned 등으로 스크립트 실행 제어.
- 원격 관리 (WinRM)
- Enable-PSRemoting -Force(관리자) 1회 설정 후 Enter-PSSession/Invoke-Command 사용.
- 모듈 자동 로드 & 패키지
- PS 3.0부터 경로에 놓인 모듈은 Import-Module 없이 자동 로드.
- PowerShell Gallery(https://www.powershellgallery.com)에서 Install-Module로 손쉽게 확장.
- 크로스 플랫폼 (PowerShell Core ≥ 6)
- macOS/리눅스에서도 동일 cmdlet 다수 사용 가능하지만 레지스트리·WMI 등 Windows 전용 기능은 제한.
이 표와 팁들을 참고하면 **시스템 관리 자동화, 로그 분석, 클라우드 스크립팅(Az/AWS/AzureAD)**에 바로 응용할 수 있습니다.
🗺️ BAT( cmd.exe ) → PowerShell (.ps1) 로 마이그레이션하는 실전 가이드
영역 | 배치 스크립트 방식 | PowerShell 방식 | 메모 |
주석 | REM … 또는 :: … | # … | <# … #> 블록 주석 지원 |
변수 | %VAR%SET VAR=value | $var = 'value' | 대소문자 구분 X, 문자열 기본은 객체 |
입력 | SET /P answer=Yes/No? | $answer = Read‑Host 'Yes/No?' | |
출력 | ECHO Hello | Write‑Host 'Hello' (간단)Write‑Output 'Hello' (파이프 전달) | |
조건 | IF EXIST file.txt … | if (Test‑Path 'file.txt') { … } | 불리언 표현식 사용 |
반복 | FOR %%f IN (*.txt) DO … | Get‑ChildItem *.txt | ForEach‑Object { … }foreach ($f in Get‑ChildItem *.txt) { … } | 파이프라인 루프가 핵심 |
루프 제어 | GOTO :EOF, EXIT /B | break, continue, return | |
함수 | CALL :label …:label | function Move‑OldLogs { … } | 네임스페이스·리턴값 지원 |
에러 처리 | 명령 뒤 && / ` | <br>ERRORLEVEL` 검사 | |
실행 | script.bat (더블 클릭) | .\script.ps1powershell -File script.ps1 | 실행 정책 주의: Set‑ExecutionPolicy |
1️⃣ 핵심 차이 이해
- 객체‑기반 파이프라인
- PowerShell은 문자열이 아니라 객체를 넘겨줌 → 정렬·필터·서식이 강력
- | 뒤에서 Select‑Object Name, Length 처럼 속성 활용
- 명령 이름 = 동사‑명사
- Copy‑Item, Remove‑Item … 읽기 쉽고, 일관성 있음
- 리디렉션/파이프도 객체
- > 는 텍스트 리디렉션이지만, 가능하면 Out‑File 사용
- 모듈 생태계
- 필요한 기능은 Install‑Module로 확장 (예: ActiveDirectory, Az)
2️⃣ 변환 절차
단계 설명
① 요구사항 파악 | 배치가 하는 일(복사, 압축, 서비스 재시작 등) 목록화 |
② 바인딩 매핑 | 각 명령을 대응 Cmdlet로 치환 (xcopy → Copy‑Item -Recurse) |
③ 변수/제어 흐름 변환 | %VAR% → $Var , IF/FOR → if/foreach |
④ 에러·로그 개선 | try/catch, Write‑Verbose, 로그 파일 Start‑Transcript |
⑤ 테스트 & 병행 실행 | 동일 입력·출력으로 결과 비교 후 스위치 오버 |
⑥ 배포 & 실행 정책 | .ps1 저장 후 GPO, Intune, Scheduled Task 등으로 배포 |
3️⃣ 자주 쓰는 배치 → PowerShell 치트시트
작업 | Batch | PowerShell |
파일 복사(재귀) | xcopy C:\Src D:\Dst /E /I /Y | Copy‑Item 'C:\Src\*' 'D:\Dst' -Recurse -Force |
7일 지난 로그 삭제 | forfiles /p C:\log /s /m *.log /d -7 /c "cmd /c del @path" | Get‑ChildItem C:\log *.log -Recurse | Where‑Object { $_.LastWriteTime -lt (Get‑Date).AddDays(-7) } | Remove‑Item -Force |
서비스 재시작 | NET STOP Spooler & NET START Spooler | Restart‑Service -Name Spooler |
Ping 확인 후 분기 | PING -n 1 8.8.8.8 >nul && ECHO OK | if (Test‑Connection 8.8.8.8 -Quiet -Count 1) { 'OK' } |
환경 변수 설정 | SET PATH=%PATH%;C:\Tools | $env:PATH += ';C:\Tools' |
4️⃣ 샘플 전체 변환
🔹 원본 BAT
@ECHO OFF
REM ① 백업 디렉터리 생성
IF NOT EXIST "D:\Backup" MD "D:\Backup"
REM ② 로그 복사
XCOPY "C:\Logs\*.log" "D:\Backup" /Y /S
REM ③ 30일 지난 로그 삭제
FORFILES /P "C:\Logs" /S /M *.log /D -30 /C "cmd /c DEL @path"
REM ④ 서비스 재시작
NET STOP MyAppSvc
NET START MyAppSvc
🔹 PowerShell 버전
<# Backup‑Logs.ps1 #>
$ErrorActionPreference = 'Stop' # 오류 발생 시 중단
# ① 백업 폴더 보장
$backup = 'D:\Backup'
if (-not (Test-Path $backup)) {
New-Item -Path $backup -ItemType Directory | Out-Null
}
# ② 로그 복사
Copy-Item 'C:\Logs\*.log' -Destination $backup -Recurse -Force
# ③ 30일 초과 로그 삭제
Get-ChildItem 'C:\Logs' -Filter *.log -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -Force
# ④ 서비스 재시작
Restart-Service -Name 'MyAppSvc' -Force
Write-Host "✅ 백업 및 서비스 재시작 완료" -ForegroundColor Green
- 장점: 오류 시 중단 & 메시지 컬러 출력, 객체 파이프라인으로 가독성 UP
- .ps1 실행: 관리자 PowerShell에서 Set‑ExecutionPolicy RemoteSigned (최초 1회) → .\Backup‑Logs.ps1
5️⃣ 추가 자동화 팁
- 작업 스케줄러
- “프로그램/스크립트”에 powershell.exe, “인수”에 -NoProfile -File "D:\Scripts\Backup‑Logs.ps1"
- 로그 캡처 Start‑Transcript / Stop‑Transcript
- 병렬 처리 (PS 7) Foreach‑Object -Parallel 로 속도 개선
- 리눅스 호환 PowerShell Core로 동일 스크립트 재사용 가능
이 가이드를 따라가면 기존 BAT 자동화 작업을 점진적으로 PowerShell로 이전하면서, 동시에 강력한 객체 지향 파이프라인·에러 처리·모듈 생태계를 활용할 수 있습니다.
'정보보안' 카테고리의 다른 글
🔧 Kali Linux(칼리리눅스) 설치 된 구형 노트북 간헐적 부팅 오류 해결 과정-By Chat GPT (0) | 2025.05.02 |
---|---|
📚 TTL(Time To Live)란? - By Chat GPT (0) | 2025.04.29 |
📖 MS OS ( DOS, Windows)에서 사용되는 내부명령어에 대해서 정리 - Chat GPT (0) | 2025.04.24 |
📖 리눅스 내부 명령어- Shell Builtin 명령어 정리 ( By chat GPT) (0) | 2025.04.24 |
🧠리눅스에서 커널(Kernel)과 운영체제(OS)의 역할- Chat GPT (0) | 2025.04.23 |