Command
Powershell Command 란 Powershell 상에서 입력 하여 동작을 기대하는 “명령어” 를 말한다. 예를 들면
이런 것들이 모두 Command라고 할 수 있다.
Powershell 에서 사용 하는 Command 의 Type은 Cmdlet, Alias, Function, Application 으로 분리 할 수 있다.
우선 Command 들의 정보를 조회하기 위해 사용 되는 Get-Command 를 사용해 보자
Get-Command
현재 Powershell 에서 사용 할 수 있는 명령들이 목록으로 나타날 것이다. 그리고 가장 왼쪽줄 CommandType 으로 해당 명령의 타입을 파악 할 수 있다. 위와 같이 입력 하면 3가지 타입 (Cmdlet, Alias, Function) 에 해당 되는 명령들만 보일 것이다.
특정 타입에 해당되는 명령들만 보고 싶을 땐 다음과 같이 입력 한다.
#Get-Command -CommandType [Type] Get-Command -CommandType Cmdlet
따라서 Type에 Application을 넣어 모든 Application Command를 확인 할 수 있지만 굉장히 많아 보는데 오래 걸릴 것이다. (Ctrl + C 로 도중에 중단 할 수 있다.)
추가로 하나의 Command의 정보를 파악 하기 위해선 다음과 같이 입력 한다. 예를 들어 Get-Location 이라는 명령을 대상으로 할 때.
#Get-Command [Name] Get-Command Get-Location
CommandType, Name, Definition 정보를 확인 할 수 있을 것이다.
이제 Command Type에 대해서 하나씩 알아 보자.
Cmdlet
Command-Let 의 줄임 말이며 Powershell 에서 개체를 조작하고 Powershell 상에서 실행되는 기능 명령이다. 기본 제공되는 명령이며 Cmdlet 역시 .NET 개체이므로 Cmdlet(PSCmdlet) 개체를 상속 하여 직접 만들 수 있다.
Cmdlet 들은 일관된 이름 규칙을 지킨다. “동사-명사” 형태로 구성 되는데 새로운 Cmdlet이나 Function을 만들때 이 이름 규칙을 지키는 것이 놓다. “동사”는 파워쉘에서 권장하는 목록이 준비 되어 있는데 보는 명령은 다음과 같다.
Get-Verb
동사들의 목록을 볼 수 있는데 동사는 목록에서 선택하고 명사부분에 임의의 명사를 사용 하면 된다.
예를 들어 Database를 Backup 하는 Cmdlet 또는 Function을 만든다면 다음이름이 적당 할 것이다.
Backup-Database
Function
Cmdlet과는 다르게 순차적인 명령들의 모임이라 볼 수 있다. 스크립트로 쉽게 만들 수 있으며 하나의 Function안에 여러 Cmdlet이나 Function이 사용 된다. Parameter, return 을 쉽게 작성 할 수 있으며 텍스트로 간편하게 작성 할 수 있다.
간단한 명령만으로 Function의 내부 로직(Get-command의 Definition)까지 쉽게 알 수 있다. 기본 제공되는 Function 명령중 Clear-Host가 있는데 내용을 조회 하기 위해선 다음과 같이 입력 하자.
(Get-Command Clear-Host).Definition
마치 스크립트를 조회 한듯 Function의 내용을 볼 수 있을 것이다.
Function 역시 Cmdlet과 같은 이름 규칙을 가진다.
Alias
말 그대로 가명인데 Cmdlet, Function 명령의 다른 이름을 지정하여 똑같이 수행 할 수 있게 해 준다. 예를 들어 기존의 cmd에서 즐겨 사용하던 Dir 을 Powershell 에서 입력 하면 기대하는 동작이 똑같이 수행 되는데 사실 이는 cmd의 Dir이 실행 되는 것이 아니라 Powershell의 Get-ChildItem 명령이 수행 되는 것이다. 추가로 Unix, Linux 시스템에서는 비슷한 기능을 ls라는 명령어로 즐겨 사용하는데, 이 명령 역시 기본적으로 Get-ChildItem 의 Alias로 등록 되어 있어 Get-ChildItem, Dir 과 동일하게 작동 한다.
Alias를 활용하면 기존 시스템, 다른 시스템의 친숙한 명령들을 Powershell Cmdlet, Function에 매핑 시켜 사용 할 수 있기 때문에 이질감을 줄일 수 있을 뿐만 아니라. Cmdlet, Function의 이름규칙을 기키지 않아도 되기 때문에 자주 쓰는 명령을 짧고 편하게 사용 할 수 있다.
Alias가 어느 명령의 Alias인지 알기 위해서는 다음과 같이 입력 한다. (dir을 예로 듬)
Get-Alias dir
명령이 어떤 Alias를 가지고 있는지 확인하기 위해서는 다음과 같이 입력 한다. (Get-ChildItem을 예로 듬)
Get-Alias -Definition Get-ChildItem
Application
환경 변수의 Path 경로 아래에 있는 파일 그 자체를 말한다. ping 이나 ipconfig와 같은 툴들이 될 수 있으며 실행 파일이 아니라도 Application으로 분류되고 접근 가능하다. Get-Command 명령을 이용하여 조회 하면 해당 파일의 전체 경로를 Definition에서 확인 할 수 있다.
자주 사용하는 ping 명령을 Get-Command로 조회 해 보자.
Get-Command ping
C:Windowssystem32PING.EXE 에 있다는 것을 확인 할 수 있을 것이다.
참고로 환경변수의 Path는 다음 변수로 조회 할 수 있다.
$Env:Path