PowerShell은 자동화에 사용되는 명령줄 셸 및 스크립팅 언어입니다. Linux 또는 Windows 명령 셸(bash
)의 cmd.exe
같은 다른 셸과 마찬가지로 PowerShell을 사용하면 PowerShell 명령뿐만 아니라 시스템에서 사용할 수 있는 모든 명령을 실행할 수 있습니다.
명령 유형
모든 운영 체제의 모든 셸에는 다음 세 가지 유형의 명령이 있습니다.
쉘 언어 키워드는 셸의 스크립팅 언어의 일부입니다.
-
bash
키워드의 예로는if
,then
,else
,elif
및fi
있습니다. -
cmd.exe
키워드의 예로는dir
,copy
,move
,if
및echo
있습니다. - PowerShell 키워드의 예로는
for
,foreach
,try
,catch
및trap
있습니다.
셸 언어 키워드는 셸의 런타임 환경 내에서만 사용할 수 있습니다. 키워드의 기능을 제공하는 셸 외부의 실행 파일이 없습니다.
-
OS 네이티브 명령 운영 체제에 설치된 실행 파일입니다. 실행 파일은 PowerShell과 같은 명령줄 셸에서 실행할 수 있습니다. 여기에는 다른 셸이 제대로 작동해야 할 수 있는 스크립트 파일이 포함됩니다. 예를 들어 PowerShell에서 Windows 일괄 처리 스크립트(
.cmd
파일)를 실행하는 경우 PowerShell은cmd.exe
실행하고 실행을 위해 일괄 처리 파일을 전달합니다.셸 환경별 명령 셸의 런타임 환경 내에서만 사용할 수 있는 외부 파일에 정의된 명령입니다. 여기에는 스크립트 및 함수가 포함되거나 셸 런타임에 명령을 추가하는 특수하게 컴파일된 모듈일 수 있습니다. PowerShell에서 이러한 명령은 cmdlet("command-lets"로 발음)라고 합니다.
네이티브 명령 실행
모든 네이티브 명령은 PowerShell 명령줄에서 실행할 수 있습니다. 일반적으로 bash
또는 cmd.exe
것과 똑같이 명령을 실행합니다. 다음 예제는 Ubuntu Linux에서 grep
의 bash
명령 실행을 보여줍니다.
sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
Ubuntu에서 PowerShell을 시작한 후 PowerShell 명령줄에서 동일한 명령을 실행할 수 있습니다.
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
네이티브 명령에 인수 전달
대부분의 셸에는 변수 사용, 식 평가 및 문자열 처리 기능이 포함됩니다. 그러나 각 셸은 이러한 작업을 다르게 수행합니다. PowerShell에서 모든 매개 변수는 하이픈(-
) 문자로 시작합니다.
cmd.exe
대부분의 매개 변수는 슬래시(/
) 문자를 사용합니다. 다른 명령줄 도구에는 매개 변수에 대한 특수 문자가 없을 수 있습니다.
각 셸에는 명령줄에서 문자열을 처리하고 평가하는 고유한 방법이 있습니다. 특정 방식으로 문자열을 따옴표로 묶을 것으로 예상되는 PowerShell에서 네이티브 명령을 실행하는 경우 해당 문자열을 전달하는 방법을 조정해야 할 수 있습니다.
자세한 내용은 다음 문서를 참조하세요.
PowerShell 7.2에는 네이티브 명령 처리를 개선하는 새로운 실험적 기능 PSNativeCommandArgumentPassing
도입되었습니다. 자세한 내용은 $PSNativeCommandArgumentPassing
참조하세요.
출력 및 오류 처리
또한 PowerShell에는 다른 셸보다 여러 개의 출력 스트림이 있습니다.
bash
및 cmd.exe
셸에는 stdout 및 stderr있습니다. PowerShell에는 6개의 출력 스트림이 있습니다. 자세한 내용은 about_Redirection 및 about_Output_Streams참조하세요.
일반적으로 네이티브 명령에 의해 stdout 전송된 출력은 PowerShell의 성공 스트림으로 전송됩니다. 네이티브 명령으로 stderr 전송된 출력은 PowerShell의 오류 스트림으로 전송됩니다.
네이티브 명령에 0이 아닌 종료 코드가 있는 경우, $?
는 $false
로 설정됩니다. 종료 코드가 0이면 $?
는 $true
로 설정된다.
그러나 PowerShell 7.2에서 변경되었습니다. 리디렉션 연산자(2>&1
)를 사용하는 경우와 같이 네이티브 명령에서 리디렉션된 오류 레코드는 PowerShell의 $Error
변수에 기록되지 않으며 $ErrorActionPreference
기본 설정 변수는 리디렉션된 출력에 영향을 주지 않습니다.
많은 기본 명령은 추가 정보를 제공하기 위한 대체 스트림으로서 stderr를 사용하여 기록합니다. 이 동작은 오류를 살펴볼 때 PowerShell에서 혼동을 일으킬 수 있으며 $ErrorActionPreference
출력을 음소거하는 상태로 설정된 경우 추가 출력 정보가 손실될 수 있습니다.
PowerShell 7.3에는 PSNativeCommandErrorActionPreference
출력이 오류로 처리되는지 여부를 제어할 수 있는 새로운 실험적 기능 stderr
추가되었습니다. 자세한 내용은 $PSNativeCommandUseErrorActionPreference
참조하세요.
PowerShell 명령 실행
앞에서 설명한 것처럼 PowerShell 명령을 cmdlet이라고 합니다. Cmdlet은 요청 시 로드할 수 있는 PowerShell 모듈에 수집됩니다. Cmdlet은 컴파일된 모든 .NET 언어로 작성하거나 PowerShell 스크립팅 언어 자체를 사용할 수 있습니다.
다른 명령을 실행하는 PowerShell 명령
PowerShell 호출 연산자(&
)를 사용하면 변수에 저장되고 문자열 또는 스크립트 블록으로 표현되는 명령을 실행할 수 있습니다. 이 명령을 사용하여 네이티브 명령 또는 PowerShell 명령을 실행할 수 있습니다. 이는 네이티브 명령에 대한 명령줄 매개 변수를 동적으로 구성해야 하는 경우 스크립트에서 유용합니다. 자세한 내용은 호출 연산자참조하세요.
Start-Process
cmdlet은 네이티브 명령을 실행하는 데 사용할 수 있지만 명령이 실행되는 방법을 제어해야 하는 경우에만 사용해야 합니다. cmdlet에는 다음 시나리오를 지원하는 매개 변수가 있습니다.
- 다른 자격 증명을 사용하여 명령 실행
- 새 프로세스에서 만든 콘솔 창 숨기기
- stdin 을로, stdout 을로, 그리고 stderr 을로 스트림을 리디렉션
- 명령에 다른 작업 디렉터리 사용
다음 예제에서는 리디렉션된 입력 및 출력 스트림을 사용하여 네이티브 명령 sort.exe
실행합니다.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
자세한 내용은 시작 프로세스을 참조하세요.
Windows에서 Invoke-Item
cmdlet은 지정된 항목에 대한 기본 작업을 수행합니다. 예를 들어 실행 파일을 실행하거나 문서 파일 형식과 연결된 응용 프로그램을 사용하여 문서 파일을 엽니다. 기본 작업은 항목의 유형에 따라 달라 집니다 하 고 항목에 대 한 액세스를 제공 하는 PowerShell 공급자에 의해 확인 됩니다.
다음 예제에서는 기본 웹 브라우저에서 PowerShell 소스 코드 리포지토리를 엽니다.
Invoke-Item https://github.com/PowerShell/PowerShell
자세한 내용은 Invoke-Item참조하세요.
PowerShell