PowerShell은 명령줄 셸, 스크립팅 언어 및 구성 관리 프레임워크로 구성된 플랫폼 간 작업 자동화 솔루션. Windows, Linux 및 maxOS에서 실행할 수 있다.
PowerShell의 명령을 cmdlet(command-lets으로 발음)이라고 한다. cmdlet 외에도 PowerShell을 사용하면 시스템에서 사용할 수 있는 모든 명령을 실행할 수 있다.
cmdlet은 독립 실행 파일이 아닌 네이티브 PowerShell 명령이다. cmdlet은 PowerShell 모듈에 수집되어 요청 시 로드될 수 있다. cmdlet은 모든 컴파일된 .NET 언어 또는 PowerShell 스크립팅 언어로 쓸 수 있다.
동사-명사 형식의 쌍으로 cmdlet의 이름을 지정한다. 예를 들어 PowerShell에 포함되어 있는 Get-Command cmdlet은 명령 셸에 등록된 모든 cmdlet을 검색한다. 동사는 cmdlet이 수행하는 작업을 나타내고, 명사는 해당 cmdlet 작업이 수행되는 대상 리소스를 나타낸다. 기본적으로 명령어는 대소문자를 구분하지 않는다.
동사 | 명사 |
---|---|
Get, New, Restart, Resume, Set, Start, Stop, Suspend 등 | Computer, Service, Host, Alias, ChildItem 등 |
$PSVersionTable
PowerShell에서는 Linux 명령어 형식의 명령어를 사용할 수 있다. 주요 명령어의 경우 별칭(alias)로 정의되어 있으므로 "Get-Alias" 명령어를 통해 별칭 목록을 확인할 수 있으며, "Set-Alias" 명령어를 통해 자신만의 명령어를 정의할 수도 있다.
"Get-Help" 명령어를 통해 명령어 사용 방법을 확인할 수 있다. PowerShell 3부터는 운영 체제와 함께 제공되지 않으므로 "Update-Help" 명령어를 통해 도움말을 업데이트할 수 있다.
"Get-Command" 명령어를 통해 더 많은 명령어를 확인할 수 있다.
명령어(cmdlet) | 별칭(alias) | 설명 |
---|---|---|
Get-Location | gl / pwd (= bash 명령어) | 현재 위치 가져오기 |
Set-Location | sl / cd (= cmd.exe 명령어) / chdir | 현재 위치 설정 |
Get-ChildItem | gci / dir / ls | 폴더 내 모든 파일 및 폴더 표시 |
Copy-Item | copy / cp / cpi | 파일 및 폴더 복사 |
New-Item | ni | 파일 및 폴더 만들기 |
Remove-Item | rm / ri / rd / del | 폴더 내의 모든 파일 및 폴더 제거 |
"Get-Help" 명령어를 통해 각 명령어의 사용 방법을 확인할 수 있다.
<PowerShell>
Get-Location
**********************************************
<Output>
Path
____
C:\Documents and Settins\PowerUser
<Parameters>
>> -PassThru
: 지정한 위치 출력됨(미입력시 현재 위치만 설정, 출력은 되지 않는다.)
**********************************************
<PowerShell>
Set-Location -Path C:\Windows -PassThru
**********************************************
<Output>
Path
____
C:\Windows
<Parameters>
>> -Force : 숨겨진 항목이나 시스템 항목 표시
>> -Recurse : 포함된 항목 모두 표시
>> -Filter : 필터
>> -Include : 포함
>> -Exclude : 제외
>> Where-Object : 항목의 다른 속성 기반의 복잡한 필터링 수행
**********************************************
<PowerShell>
Get-ChildItem -Path C:\ -Force
Get-ChildItem -Path C:\ -Recurse
/*
Program Files 폴더 내 2005년 10월 1일 이후 마지막으로 수정되었고,
1MB보다 작거나 10MB보다 크지 않은 모든 실행 파일 검색
*/
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe |
Where-Object -FilterScript {($_.LastWriteTime -gt '2005-10-01')
-and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)}
<Parameters>
>> -Force : 기존 파일 덮어쓰기 (이미 있는 경우, 복사 실패)
>> -Recurse : 재귀 복사
>> -Filter : 필터 (예, -Filter *.txt : 모든 .txt 파일)
<PowerShell>
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination
C:\temp\text
<Parameters>
-ItemType : 파일(File)/폴더(Directory) 유형
**********************************************
<PowerShell>
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
New-Item -Path 'c:\temp\New Folder\file.txt' -ItemType File
<Parameters>
>> -Recurse : 하위 모든 파일 제거 (미입력시 제거 확인을 위한 메시지 출력)
**********************************************
<PowerShell>
Remove-Item -Path C:\temp\DeleteMe
Remove-Item -Path C:\temp\DeleteMe -Recurse