본문 바로가기

정보보안

🚚 Windows에서 사용하는 PowerShell 명령어 정리- By Chat GPT

728x90

 

▣ 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 사용 팁 & 추가 개념 (시험·실무 공통)

  1. 객체 기반 파이프라인
    • ls | Select Name,Length | Sort Length -Desc 처럼 각 단계가 구조화된 객체를 주고받음.
    • Format-Table/Format-List는 마지막에 사용(그 이후엔 텍스트가 되어 필터링 불가).
  2. 동사-명사 규칙
    • Get-, Set-, New-, Remove-, Add-, Clear-, Start-, Stop-, Test-, Invoke- 등 표준 동사를 먼저 확인하면 cmdlet 기능이 보입니다.
  3. 파워셸 에일리어스
    • Linux 친화: ls→Get-ChildItem, cat→Get-Content, mv→Move-Item.
    • 스크립트에는 가독성을 위해 정식 cmdlet 이름을 쓰는 것이 권장.
  4. 보안 실행 정책
    • Get-ExecutionPolicy, Set-ExecutionPolicy RemoteSigned 등으로 스크립트 실행 제어.
  5. 원격 관리 (WinRM)
    • Enable-PSRemoting -Force(관리자) 1회 설정 후 Enter-PSSession/Invoke-Command 사용.
  6. 모듈 자동 로드 & 패키지
  7. 크로스 플랫폼 (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️⃣ 핵심 차이 이해

  1. 객체‑기반 파이프라인
    • PowerShell은 문자열이 아니라 객체를 넘겨줌 → 정렬·필터·서식이 강력
    • | 뒤에서 Select‑Object Name, Length 처럼 속성 활용
  2. 명령 이름 = 동사‑명사
    • Copy‑Item, Remove‑Item … 읽기 쉽고, 일관성 있음
  3. 리디렉션/파이프도 객체
    • > 는 텍스트 리디렉션이지만, 가능하면 Out‑File 사용
  4. 모듈 생태계
    • 필요한 기능은 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️⃣ 추가 자동화 팁

  1. 작업 스케줄러
    • “프로그램/스크립트”에 powershell.exe, “인수”에 -NoProfile -File "D:\Scripts\Backup‑Logs.ps1"
  2. 로그 캡처 Start‑Transcript / Stop‑Transcript
  3. 병렬 처리 (PS 7) Foreach‑Object -Parallel 로 속도 개선
  4. 리눅스 호환 PowerShell Core로 동일 스크립트 재사용 가능

이 가이드를 따라가면 기존 BAT 자동화 작업을 점진적으로 PowerShell로 이전하면서, 동시에 강력한 객체 지향 파이프라인·에러 처리·모듈 생태계를 활용할 수 있습니다.

728x90
반응형