PowerShell Alias 공급자 — 별칭을 다루는 공식 방법

PowerShell Alias 공급자 — 별칭을 다루는 공식 방법

PowerShell에서 명령을 짧게 부르고 싶을 때 쓰는 게 별칭(alias)이에요. 근데 이 별칭이 실제로는 '드라이브'처럼 취급된다는 사실, 알고 계셨나요? 이번 글에서는 PowerShell의 Alias 공급자가 별칭을 어떻게 관리하는지, 그리고 드라이브 문법으로 별칭을 만들고 바꾸고 지우는 방법을 하나씩 풀어볼게요.

출처: Microsoft Learn

본문

공급자 이름

Alias

드라이브

Alias:

기능(Capabilities)

ShouldProcess

자세한 설명

PowerShell의 Alias 공급자는 PowerShell에서 별칭을 가져오고(get), 추가하고(add), 바꾸고(change), 비우고(clear), 삭제하는(delete) 일을 맡아요.

별칭은 cmdlet, 함수, 실행 파일(스크립트 포함)의 또 다른 이름이에요. PowerShell에는 기본 제공되는 별칭 묶음이 있고, 여러분이 직접 만든 별칭을 현재 세션과 PowerShell 프로필에 추가할 수도 있어요.

Alias 드라이브는 별칭 객체만 담는 평평한(flat) 네임스페이스예요. 별칭에는 하위 항목이 없어요.

Alias 공급자는 아래 cmdlet들을 지원하는데, 이 글에서 하나씩 다뤄볼게요.

한편 PowerShell에는 별칭을 조회하고 바꾸기 위해 설계된 전용 cmdlet 묶음도 있어요. Alias cmdlet들을 쓸 때는 이름에 Alias: 드라이브를 붙일 필요가 없어요. 이 글에서는 이 cmdlet들을 다루진 않을게요.

이 공급자가 노출하는 형식

별칭 하나하나는 System.Management.Automation.AliasInfo 클래스의 인스턴스예요.

Alias 드라이브 탐색하기

Alias 공급자는 자기의 데이터 저장소를 Alias: 드라이브로 노출해요. 별칭을 다루려면 아래 명령으로 위치를 Alias: 드라이브로 바꾸면 돼요.

Set-Location Alias:

파일 시스템 드라이브로 돌아가려면 드라이브 이름을 입력하면 돼요. 예를 들면 이렇게요.

Set-Location C:\

다른 PowerShell 드라이브에서도 Alias 공급자를 쓸 수 있어요. 다른 위치에서 별칭을 참조하고 싶다면 경로에 Alias: 드라이브 이름을 넣으면 되죠.

참고 — PowerShell은 공급자 경로를 익숙하게 다룰 수 있도록 별칭을 사용해요. dir, ls 같은 명령은 Windows에서는 Get-ChildItem의 별칭이고, Linux와 macOS에서는 dir이 그 별칭이에요. cdSet-Location의 별칭, pwdGet-Location의 별칭이에요.

Alias: 드라이브의 내용 표시하기

이 명령은 현재 위치가 Alias: 드라이브일 때 모든 별칭 목록을 가져와요. 와일드카드 문자 *로 현재 위치의 모든 내용을 나타냈죠.

PS Alias:\> Get-Item -Path *

Alias: 드라이브에서는 현재 위치를 뜻하는 점(.)과 현재 위치의 모든 항목을 뜻하는 와일드카드(*)가 같은 효과를 내요. 예를 들어 Get-Item -Path .Get-Item \*는 같은 결과를 만들어내요.

Alias 공급자에는 컨테이너가 없어서 위 명령을 Get-ChildItem과 함께 써도 효과가 같아요.

Get-ChildItem -Path Alias:

특정 별칭 가져오기

이 명령은 ls 별칭을 가져와요. 경로가 포함돼 있으니 어떤 PowerShell 드라이브에서든 쓸 수 있어요.

Get-Item -Path Alias:ls

Alias: 드라이브 안에 있다면 경로에서 드라이브 이름을 빼도 돼요.

별칭의 정의(definition)를 알아내려면 공급자 경로 앞에 달러 기호($)를 붙일 수도 있어요.

$Alias:ls

특정 cmdlet의 모든 별칭 가져오기

이 명령은 Get-ChildItem cmdlet과 연결된 별칭 목록을 가져와요. 여기서 cmdlet 이름을 저장하는 Definition 속성을 사용했어요.

Get-Item -Path Alias:* | Where-Object {$_.Definition -eq "Get-ChildItem"}

별칭 만들기

Alias: 드라이브에서 별칭 만들기

이 명령은 Get-Service cmdlet에 대한 serv 별칭을 만들어요. 현재 위치가 Alias: 드라이브라서 -Path 매개 변수는 필요 없어요.

이 명령은 또 -Options 동적 매개 변수를 써서 별칭에 AllScope 옵션을 설정해요. -Options 매개 변수는 Alias: 드라이브에 있을 때만 New-Item cmdlet에서 쓸 수 있어요. 점(.)은 현재 디렉터리, 즉 Alias: 드라이브를 가리켜요.

PS Alias:\> New-Item -Path . -Name serv -Value Get-Service -Options "AllScope"

절대 경로로 별칭 만들기

명령을 호출하는 어떤 항목에 대해서든 별칭을 만들 수 있어요. 이 명령은 Notepad.exe에 대한 np 별칭을 만들어요.

New-Item -Path Alias:np -Value C:\windows\notepad.exe

새 함수에 대한 별칭 만들기

어떤 함수에 대해서도 별칭을 만들 수 있어요. 이 기능으로 cmdlet과 그 매개 변수를 함께 포함하는 별칭도 만들 수 있죠.

첫 번째 명령은 현재 디렉터리를 System32 디렉터리로 바꾸는 CD32 함수를 만들고, 두 번째 명령은 CD32 함수에 대한 go 별칭을 만들어요.

명령이 끝나면 CD32go든 아무거나 써서 함수를 호출할 수 있어요.

function CD32 {Set-Location -Path C:\windows\system32}
Set-Item -Path Alias:go -Value CD32

별칭 바꾸기

별칭의 옵션 바꾸기

Set-Item cmdlet을 -Options 동적 매개 변수와 함께 쓰면 별칭의 -Options 속성 값을 바꿀 수 있어요.

이 명령은 dir 별칭에 AllScopeReadOnly 옵션을 설정해요. Set-Item cmdlet의 -Options 동적 매개 변수를 사용했죠. -Options 매개 변수는 Set-ItemAliasFunction 공급자와 함께 쓸 때 사용할 수 있어요.

Set-Item -Path Alias:dir -Options "AllScope, ReadOnly"

별칭이 참조하는 명령 바꾸기

이 명령은 Set-Item cmdlet으로 gp 별칭이 Get-ItemProperty cmdlet 대신 Get-Process cmdlet을 가리키게 바꿔요. gp 별칭의 Options 속성 값이 ReadOnly로 설정돼 있어서 -Force 매개 변수가 필요해요. 명령이 Alias: 드라이브 안에서 실행되므로 경로에 드라이브를 명시하지 않았어요.

Set-Item -Path gp -Value Get-Process -Force

이 변경은 별칭과 명령 사이의 연결 관계를 정의하는 네 가지 속성에 영향을 줘요. 변경 결과를 확인하려면 다음 명령을 입력해 보세요.

Get-Item -Path gp | Format-List -Property *

별칭 이름 바꾸기

이 명령은 Rename-Item cmdlet으로 popd 별칭의 이름을 pop으로 바꿔요.

Rename-Item -Path Alias:popd -NewName pop

별칭 복사하기

이 명령은 pushd 별칭을 복사해서 Push-Location cmdlet에 대한 새 push 별칭을 만들어요.

새 별칭이 만들어지면 Description 속성은 null 값을 갖고, Option 속성은 None 값을 가져요. 명령이 Alias: 드라이브 안에서 실행됐다면 -Path 매개 변수 값에서 드라이브 이름을 빼도 돼요.

Copy-Item -Path Alias:pushd -Destination Alias:push

별칭 삭제하기

이 명령은 현재 세션에서 serv 별칭을 삭제해요. 어떤 PowerShell 드라이브에서든 쓸 수 있어요.

Remove-Item -Path Alias:serv

이 명령은 "s"로 시작하는 별칭들을 삭제해요. 읽기 전용(read-only) 별칭은 삭제하지 않아요.

Clear-Item -Path Alias:s*

읽기 전용 별칭 삭제하기

이 명령은 Options 속성 값이 Constant인 별칭을 제외하고 현재 세션의 모든 별칭을 삭제해요. -Force 매개 변수 덕분에 Options 속성 값이 ReadOnly인 별칭도 삭제할 수 있어요.

Remove-Item Alias:* -Force

동적 매개 변수

동적 매개 변수는 PowerShell 공급자가 추가하는 cmdlet 매개 변수로, 해당 cmdlet이 공급자가 활성화된 드라이브에서 사용될 때만 쓸 수 있어요.

Options [System.Management.Automation.ScopedItemOptions]

별칭의 Options 속성 값을 결정해요.

  • None: 옵션이 없어요. 이 값이 기본값이에요.
  • Constant: 별칭을 삭제할 수 없고 속성도 바꿀 수 없어요. Constant는 별칭을 만들 때만 쓸 수 있어요. 기존 별칭의 옵션을 Constant로 바꾸는 건 불가능해요.
  • Private: 별칭이 현재 스코프에서만 보이고, 자식 스코프에서는 보이지 않아요.
  • ReadOnly: -Force 매개 변수를 쓰지 않으면 별칭의 속성을 바꿀 수 없어요. Remove-Item으로 별칭을 삭제하는 건 가능해요.
  • AllScope: 별칭이 새로 만들어지는 모든 스코프에 복사돼요.
지원되는 cmdlet

파이프라인 사용하기

공급자 cmdlet은 파이프라인 입력을 받아들여요. 파이프라인을 쓰면 한 cmdlet에서 나온 공급자 데이터를 다른 공급자 cmdlet으로 넘기는 식으로 작업을 단순화할 수 있어요. 파이프라인을 공급자 cmdlet과 함께 쓰는 방법을 더 알고 싶다면 이 글 곳곳에 걸어둔 cmdlet 참조 문서를 보면 돼요.

도움말 얻기

Windows PowerShell 3.0부터는 공급자 cmdlet이 파일 시스템 드라이브에서 어떻게 동작하는지 설명하는 맞춤형 도움말 항목을 받을 수 있어요.

파일 시스템 드라이브에 맞춰진 도움말 항목을 보려면 파일 시스템 드라이브에서 Get-Help 명령을 실행하거나, Get-Help-Path 매개 변수로 파일 시스템 드라이브를 지정하면 돼요.

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path Alias:

더 알아보기