Windows PowerShell 기본 명령어 익히기
Windows의 GUI 환경은 휼륭(최소한 Windows 10버전은)하지만 가끔은 마우스로 원하는 기능을 찾기가 정말 힘들 때가 있다.
특히 Windows에서 시험환경이나 반복되는 작업을 할 경우에는 아무래도 명령어라인 콘솔이 있으면 더 편리하게 작업을 할 수 있다.
윈도우즈10/11 환경에서 간단한 명령어로 조금 편하게 쓸 수 있는 기능들을 정리해 본다.
[2026-09 전면 갱신] 처음 쓸 때는 Windows 기본 탑재 PowerShell 5.1 기준이었지만, 현재 표준은 PowerShell 7.x다 (
winget install Microsoft.PowerShell로 설치, 5.1과 공존). 본문 전체를 PowerShell 7 기준으로 손봤다 — 달라진 것: ①Get-WmiObject제거 →Get-CimInstance, ②wget/curl별칭 제거 → 실제 exe 또는Invoke-WebRequest직접 사용, ③ 업타임은 함수 없이 내장Get-Uptime한 줄, ④ 사용자 프로파일 경로가Documents\PowerShell로 변경.
PowerShell 설명서를 사용하는 방법 페이지를 읽고 시작하자.
PowerShell 버전
먼저 도움말을 찾으려면 버전을 정확히 알고 있어야 한다. Windows에 기본 탑재된 것은 여전히 5.1(PSEdition: Desktop)이고, winget으로 설치하는 PowerShell 7은 Core 에디션으로 표시된다.
❯ $PSVersionTable
Name Value
---- -----
PSVersion 7.5.2
PSEdition Core
GitCommitId 7.5.2
OS Microsoft Windows 10.0.26200
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
5.1과 7은 프로파일·모듈 경로가 서로 달라 완전히 독립적으로 공존한다. 새로 배운다면 7만 쓰면 된다.
PowerShell 프로파일 설정
Linux 최초 구동시 “.bashrc”와 같이 PowerShell 기본 설정은 아래의 명령어로 확인 할 수 있고 자신만의 명령어를 정의하려면 “CurrentUserCurrentHost” 파일에 추가해서 Alias 또는 function을 정의할 수 있다.
❯ $PROFILE | Select-Object *
AllUsersAllHosts : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\softr\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\softr\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PowerShell 7의 사용자 프로파일은 Documents\PowerShell\이다 — 5.1의 Documents\WindowsPowerShell\과 다른 폴더라는 점에 주의. 프로파일 구성을 본격적으로 하려면 PowerShell 기본 설정 글에 정리해뒀다.
기본 환경 설정 및 수정
Visual Studio Code를 사용한다면 터미널에서 code $PROFILE 하면 로그인 사용자의 기본 설정파일이 열린다. ( 기본 텍스트 편집도구 노트패드를 사용할 수 있다. notepad.exe $PROFILE )
아래와 같이 인코딩 설정과 기본 Function을 정의해서 사용한다.
$PROFILE에 내용을 수정한 후 ”. $PROFILE” 명령어로 변경 내용을 적용할 수 있다.
PowerShell 도움말
PowerShell의 명령어(cmdlet)는 익숙하지가 않아 무조건 찾아보는 편인데 명령어를 입력하고 Tab을 누르면 해당 구문으로 시작하는 명령어를 보여준다. (파라미터도 동일하게 - 을 입력후 Tab)
“Get-Help -Name 검색어”
-Online 옵션을 사용하면 도움말 사이트로 연결된다.
❯ Get-Help -Name Uninstall
Name Category Module Synopsis
---- -------- ------ --------
Uninstall-Package Cmdlet PackageManagement Uninstall-Package...
명령어 정리
PowerShell cmdlet은 리눅스 bash 환경의 명령어와는 형식이 달라 접근하기가 어렵지만 명령어 뒤에 하이픈(-)을 치고 탭을 누르면 파라미터 목록들을 확인할 수 있는 등 편리한 기능들이 많다.
Windows Terminal에서 주로 쓰는 명령어를 정리해본다.
Get/Set-Alias
PowerShell에서는 Linux 명령어 형식의 명령어를 사용할 수 있는데 주요 명령어들이 Alias로 정의되어 있고 “Get-Alias”로 목록을 볼 수 있다.
❯ Get-Alias ls, md, cp, rm, history, kill, man, cat, grep
CommandType Name Version Source
----------- ---- ------- ------
Alias ls -> Get-ChildItem
Alias md -> mkdir
Alias cp -> Copy-Item
Alias rm -> Remove-Item
Alias history -> Get-History
Alias kill -> Stop-Process
Alias man -> help
Alias cat -> Get-Content
Alias grep -> Select-String
“Set-Alias”로 자신의 명령어를 정의할 수 있다. 아래와 같은 자신만의 명령어를 정의하여 $PROFILE 에 추가한다.
Set-Alias vi -Value vim
Set-Alias python -Value 'C:\Python311\python.exe'
Set-Alias grep -Value select-string
Set-Alias hash -Value Get-FileHash
Set-Alias find -Value Get-ChildItem
Uninstall-Package : 설치된 프로그램 삭제
“Get-Package -Name Ahn*“ 명령어로 프로그램 이름을 찾을 수 있고 “Uninstall-Packages”로 설치된 패키지를 지울 수 있다.
PowerShell 7의 PackageManagement로는 그걸로 설치한 패키지만 관리된다. 요즘 앱 설치·삭제의 표준은 winget이다:
winget list 이름→winget uninstall 이름.
❯ Uninstall-Package -Name ipMonitor10
경고: Reboot is required to complete the uninstallation
operation.
Name Version Source
---- ------- ------
ipMonitor10 10.9.1
Get-Content : 파일 정보 확인 및 출력
파일의 내용이나 정보 확인한다. (cmd 에서는 type이었던거 같은데)
cat, type 명령어도 모두 “Get-Content”와 매핑되어 있다. 유니코드 텍스트는 Get-Content -Encoding UTF8 .\README.md 와 같이 인코딩을 설정한다.
❯ Get-Content .\.wakatime.cfg
[settings]
debug = false
hidefilenames = false
ignore =
COMMIT_EDITMSG$
PULLREQ_EDITMSG$
MERGE_MSG$
TAG_EDITMSG$
api_key=0e64xxxx-xxxx-xxxx-xxxx-xxxx2865xxxx
> Get-Content -Encoding UTF8 FILENAME
Get-Process : 프로세스 정보 조회
PowerShell cmdlet의 결과는 Object로 관리되고 해당 변수의 값을 가져올 수 있다.
아래와 같이 프로세스의 이름으로 찾거나 특정 TCP포트를 사용하는 프로세스 Id를 검색 하고 “Stop-Process -Name” 명령어로 Kill 할 수 있다.
❯ Get-Process -Name Excel
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
2637 120 340672 154236 177.05 22336 1 EXCEL
❯ Get-Process -Id (Get-NetTCPConnection -LocalPort 58803).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
247 22 9216 20540 1.45 11060 1 python
❯ Get-Process | Where-Object WorkingSet -GT 200MB
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
553 29 294220 371320 4.17 2940 1 chrome
384 24 169596 228740 2.17 3516 1 chrome
885 37 350068 333012 161.72 4800 1 chrome
782 40 310540 268384 420.88 6356 1 chrome
720 38 188112 227416 5.66 7220 1 chrome
484 33 254968 326592 5.41 8676 1 chrome
560 30 268180 332336 21.13 8840 1 chrome
386 25 181316 234008 9.19 9856 1 chrome
517 28 266468 347180 6.02 14944 1 chrome
3847 117 456432 409476 2,551.25 23436 1 chrome
1234 78 473476 401984 97.58 23764 1 chrome
윈도우즈에서 열려있는 창의 목록을 확인
아래와 같이 Get-Title 함수를 $PROFILE에 추가할 수있다.
Function Get-Title { Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize }
Get-Process 결과에서 윈도우즈 타이틀 오브젝트를 선택하고 테이블 포맷으로 변경해서 표시한다.
> Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize
Id Name MainWindowTitle
-- ---- ---------------
22624 ApplicationFrameHost 설정
23436 chrome Get-Process (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn - Chrome
23536 KakaoTalk 카카오톡
19884 stsess AhnLab Safe Transaction - Windows의 hosts 파일 변경이 탐지되었습니다. 악성코드에 의한 hosts 파일이 변경...
27088 SystemSettings 설정
16128 TextInputHost Windows 입력 환경
9032 WindowsTerminal Windows PowerShell
실행중인 프로세스 파일버전 표시.
특정 프로세스의 바이너리 정보를 확인할 때 사용한다.
❯ Get-Process liveview -FileVersionInfo
ProductVersion FileVersion FileName
-------------- ----------- --------
1.0.0.1 1.0.0.1 C:\IIOT-LIVEVIEW\LIVEVIEW.exe
Resolve-DnsName : 도메인의 IP 찾기.
nslookup 명령어를 사용해도 된다. (C:\Windows\System32\nslookup.exe)
가끔 도메인이 필요할 때가 있어 duckdns.org 서비스를 이용하는데 내 노트북의 IP가 제대로 업데이트 되었는지 확인 할 때 사용한다.
❯ Resolve-DnsName softroom.duckdns.org
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
softroom.duckdns.org A 60 Answer 106.xxx.xxx.xxx
디렉토리나 이름 및 파일 찾기
디렉토리에서 css 이름을 가진 디렉토리 찾기
Get-ChildItem -Directory Get-ChildItem -File
❯ Get-ChildItem -Directory | Where-Object { $_.Name -eq 'css' }
디렉터리: D:\Dropbox\Public\butteryoon.github.io
Mode LastWriteTime Length Name
---- ------------- ------ ----
da---- 2020-09-05 오후 7:32 css
지정한 하위 디렉토리 전체에서 특정이름을 가진 파일을 찾기
❯ Get-ChildItem -Path C:\ -Include svccare* -Recurse
디렉터리: C:\Program Files (x86)\infitec
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2017-12-13 오후 3:31 219520 svccare.exe
디렉터리: C:\Windows\Prefetch
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020-09-09 오후 2:11 10298 SVCCARE.EXE-642142C3.pf
인터넷에서 파일 다운로드
5.1에서는 wget/curl이 Invoke-WebRequest의 별칭이었지만, PowerShell 7에서는 이 별칭들이 제거됐다 — Windows 10 이후 기본 탑재된 실제 curl.exe와의 충돌을 없애기 위해서다. 지금은 둘 중 하나를 쓰면 된다.
# 내장 cmdlet — 결과를 객체로 다뤄야 할 때
Invoke-WebRequest https://example.com/file.zip -OutFile file.zip
# 기본 탑재 curl.exe — 단순 다운로드는 이쪽이 빠르고 편하다
curl.exe -LO https://example.com/file.zip
5.1에서 넘어온 스크립트에
wget ...이 있다면 PowerShell 7에서는 그대로 실패하니 위 형태로 바꿔야 한다.
Windows Uptime
PowerShell 7에는 Get-Uptime이 내장되어 함수를 만들 필요가 없어졌다.
❯ Get-Uptime
Days : 2
Hours : 7
Minutes : 41
❯ Get-Uptime -Since # 부팅 시각
2026년 9월 5일 토요일 오후 2:12:33
5.1에서 쓰던 Get-WmiObject는 7에서 제거됐다 — WMI 조회가 필요하면 Get-CimInstance를 쓴다.
❯ Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object LastBootUpTime
HASH 함수
Linux에서 해시값을 구할 때 쓰는 md5sum, sha256 과 동일한 기능이다.
❯ Get-FileHash -Algorithm md5 .\README.md
Algorithm Hash Path
--------- -------------------------------- ---------
MD5 327FD51206F4DA87C368F467B067A73F README.md
❯ Get-FileHash -Algorithm sha256 .\README.md
Algorithm Hash Path
--------- ---------------------------- ----
SHA256 88F9ED20AB1ACDC0C8699A63174903C994670AEEB67B1725E147A937E8236B78 README.md
Symbolic Link
리눅스에서 “ln -s” 과 동일한 심볼릭링크 명령어로 링크를 걸 수 있다.
New-Item -ItemType SymbolicLink -Path “Link” -Target “Target”
❯ New-Item -ItemType SymbolicLink -Path Dropbox -Target D:\Dropbox\
Directory: C:\Users\softr
Mode LastWriteTime Length Name
---- ------------- ------ ----
l---- 2021-01-14 오후 5:49 Dropbox -> D:\Dropbox\
네트워크 재시작
WiFi와 이더넷 환경을 전환하다보면 인터넷이 연결이 되지 않는 경우가 있는데 이럴 때는 “어뎁터 설정 변경” 메뉴에서 특정 연결을 “사용안함”으로 바꿨다가 “사용”으로 하면 해결될 때가 있는데 이 기능을 터미널 상에서 하는 방법이다.
이더넷 어뎁터의 목록을 확인하고 (Get-NetAdapter) 이더넷 디바이스를 재시작(Restart-NetAdapter) 한다.
❯ Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
vEthernet (WSL) Hyper-V Virtual Ethernet Adapter 52 Up 00-15-5D-A5-83-9E 10 Gbps
Wi-Fi Qualcomm Atheros QCA9377 Wireless Netw… 7 Disconnected 74-DF-BF-69-F5-19 200 Mbps
이더넷 Realtek PCIe GbE Family Controller 4 Up 54-EE-75-AB-61-E9 1 Gbps
로컬 영역 연결 NexG SSL VPN Virtual Adapter - VPN 3 Disconnected 5E-84-92-54-22-4D 100 Mbps
❯ Restart-NetAdapter -Name "이더넷"
참고 URL
- 1장 - PowerShell 시작
- PowerShell이란?
- Windows Terminal Preview 릴리스
- execution of scripts is disabled on this system.
- Use Windows PowerShell to search for files