about_Command_Precedence

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

여기에 소개를 삽입합니다.

항목

about_Command_Precedence

간단한 설명

Windows PowerShell®이 실행할 명령을 결정하는 방법에 대해 설명합니다.

자세한 설명

이 항목에서는 Windows PowerShell이 실행할 명령을 결정하는 방법을 설명합니다. 특히, 세션에 동일한 이름의 명령이 두 개 이상 있는 경우가 여기에 해당합니다. 기본적으로 실행되지 않는 명령을 실행하는 방법도 설명하고 세션에서 명령 이름 충돌을 방지하는 방법도 설명합니다.

명령 우선 순위

세션에 동일한 이름의 명령이 포함된 경우 Windows PowerShell은 다음 규칙을 사용하여 실행할 명령을 결정합니다.

이러한 규칙은 모듈, 스냅인 및 기타 세션에서 세션에 명령을 추가할 때 매우 중요합니다.

-- 명령에 대한 경로 지정하는 경우 Windows PowerShell은 경로로 지정된 위치에서 명령을 실행합니다.

예를 들어 다음 명령은 C:\TechDocs 디렉터리에의 FindDocs.ps1 스크립트를 실행합니다.

             C:\TechDocs\FindDocs.ps1

명령이 Path 환경 변수($env:path)에 나열된 경로에 있지 않거나 스크립트 파일의 경로를 지정하지 않은 경우, Windows PowerShell은 보안 기능으로서 Windows PowerShell 스크립트를 포함하는 실행 파일(네이티브) 명령을 실행하지 않습니다.

현재 디렉터리에 있는 스크립트를 실행하려면 전체 경로를 지정하거나 현재 디렉터리를 나타내는 점(.)을 입력합니다.

예를 들어 현재 디렉터리의 FindDocs.ps1 파일을 실행하려면 다음을 입력합니다.

             .\FindDocs.ps1

-- 경로를 지정하지 않으면 Windows PowerShell은 명령을 실행할 때 다음 우선 순위를 사용합니다.

              1. Alias
              2. Function
              3. Cmdlet 
              4. Native Windows commands

따라서 "help"를 입력하는 경우 Windows PowerShell은 먼저 "help"라는 별칭을 찾은 다음 "Help" 함수를 찾고 마지막으로 "help" cmdlet을 찾습니다. 그런 후 첫 번째로 찾은 "help" 항목을 실행합니다.

예를 들어 세션에 Get-Map 함수가 있고 Get-Map이라는 cmdlet을 가져올 경우, 기본적으로 "Get-Map"을 입력하면 Windows PowerShell은 Get-Map 함수를 실행합니다.

-- 세션에 동일한 이름을 가진 두 cmdlet과 같이 이름이 같은 동일한 형식의 항목이 포함되어 있으면 Windows PowerShell은 가장 최근에 세션에 추가된 항목을 실행합니다.

예를 들어 Get-Date라는 cmdlet이 있고 Get-Date라는 다른 cmdlet을 가져오려는 경우 "Get-Date"를 입력하면 Windows PowerShell은 기본적으로 가장 최근에 가져온 cmdlet을 실행합니다.

숨겨진 항목과 바뀐 항목

이러한 규칙의 결과로, 항목은 이름이 같은 항목으로 바뀌거나 이러한 항목에 의해 숨겨질 수 있습니다.

-- 모듈 또는 스냅인 이름으로 항목 이름을 한정하는 것과 같이 원본 항목에 여전히 액세스할 수 있는 경우 항목이 "숨겨지거나" "섀도 처리"됩니다.

예를 들어 세션에서 cmdlet과 이름이 같은 함수를 가져오는 경우 cmdlet을 스냅인 또는 모듈에서 가져왔으므로 cmdlet은 숨겨집니다(바뀌지는 않음).

'-- 더 이상 원본 항목에 액세스할 수 없는 경우 항목은 "바뀌거나" "덮어쓰입니다".

예를 들어 세션의 변수와 이름이 같은 변수를 가져오는 경우 원래 변수가 바뀌어 더 이상 액세스할 수 없게 됩니다. 모듈 이름으로 변수를 한정할 수는 없습니다.

또한 명령줄에 함수를 입력하고 동일한 이름의 함수를 가져오는 경우 원래 함수가 바뀌어 더 이상 액세스할 수 없게 됩니다.

숨겨진 명령 찾기

Get-Command cmdlet의 모든 매개 변수는 숨겨지거나 바뀌더라도 지정한 이름의 모든 명령을 가져옵니다. 기본적으로 Windows PowerShell 3.0부터 Get-Command는 명령 이름을 입력할 때 실행되는 명령만 가져옵니다.

다음 예제에서 세션에는 Get-Date 함수 및 Get-Date cmdlet이 포함됩니다.

다음 명령은 "Get-Date"를 입력할 때 실행되는 Get-Date 명령을 가져옵니다.

          PS C:\> Get-Command Get-Date

          CommandType     Name                                               ModuleName
          -----------     ----                                               ----------
          Function        get-date

다음 명령은 All 매개 변수를 사용하여 모든 Get-Date 명령을 가져옵니다.

          PS C:\> Get-Command Get-Date -All

          CommandType     Name                                               ModuleName
          -----------     ----                                               ----------
          Function        get-date
          Cmdlet          Get-Date                                           Microsoft.PowerShell.Utility

숨겨진 명령 실행

해당 명령과 같은 이름을 가질 수 있는 다른 명령을 구분하는 항목 속성을 지정하여 특정 명령을 실행할 수 있습니다.

이 방법을 사용하여 어떤 명령도 실행할 수 있지만 숨겨진 명령을 실행하는 데 특히 유용합니다.

스크립트가 실행되는 세션에 있을 수 있는 명령을 예측할 수 없으므로 배포하려는 스크립트를 작성할 때 모범 사례로 이 방법을 사용합니다.

한정된 이름

Windows PowerShell 스냅인 또는 모듈에서 가져온 명령이나 원래 시작된 모듈 또는 스냅인의 이름으로 명령 이름을 한정하여 다른 세션에서 가져온 명령을 실행할 수 있습니다.

명령은 한정할 수 있지만 변수 또는 별칭은 한정할 수 없습니다.

예를 들어 Microsoft.PowerShell.Utility 스냅인의 Get-Date cmdlet이 동일한 이름의 별칭, 함수 또는 cmdlet에 의해 숨겨질 경우 cmdlet의 스냅인 한정 이름을 사용하여 실행할 수 있습니다.

          Microsoft.PowerShell.Utility\Get-Date

MapFunctions 모듈에 의해 추가된 New-Map 명령을 실행하려면 모듈로 한정된 이름을 사용합니다.

          MapFunctions\New-Map

명령을 가져온 스냅인 또는 모듈을 찾으려면 명령의 ModuleName 속성을 사용합니다.

          (Get-Command <command-name>).ModuleName

예를 들어 Get-Date cmdlet의 소스를 찾으려면 다음을 입력합니다.

          PS C:\>(Get-Command Get-Date).ModuleName
          Microsoft.PowerShell.Utility

CALL 연산자

Call 연산자(&)를 사용하여 Get-ChildItem(별칭 "dir"), Get-Command 또는 Get-Module 명령으로 가져올 수 있는 명령을 실행할 수도 있습니다.

명령을 실행하려면 Get-Command 명령을 괄호로 묶고 Call 연산자(&)를 사용하여 명령을 실행합니다.

          &(Get-Command ...)  

      - or -

          &(dir ... )

예를 들어 Map 별칭에 의해 숨겨진 Map 함수가 있는 경우 다음 명령을 사용하여 이 함수를 실행합니다.

          &(Get-Command -Name Map -Type function)  

      - or -

          &(dir function:\map)

숨겨진 명령을 변수에 저장하여 보다 쉽게 실행할 수도 있습니다.

예를 들어 다음 명령은 Map 함수를 $myMap 변수에 저장하고 Call 연산자를 사용하여 실행합니다.

          $myMap = (Get-Command -Name map -Type function)

          &($myMap)

명령이 모듈에서 시작된 경우 다음 형식을 사용하여 실행할 수 있습니다.

         & <PSModuleInfo-object> <command>

예를 들어 FileCommands 모듈에서 Add-File cmdlet을 실행하려면 다음 명령 시퀀스를 사용합니다.

         $FileCommands = get-module -name FileCommands
           
         & $FileCommands Add-File

바뀐 항목

사용자의 세션에서 만들거나 프로필을 사용하여 추가하는 함수, 변수 및 별칭과 같이 모듈 또는 스냅인에서 가져오지 않은 항목은 같은 이름의 명령으로 바뀔 수 있습니다. 이러한 항목이 바뀐 경우에는 액세스할 수 없습니다.

변수 및 별칭은 Call 연산자 또는 한정된 이름을 사용하여 실행할 수 없으므로 모듈 또는 스냅인에서 가져온 것이어도 항상 바뀝니다.

예를 들어 사용자 세션에서 Get-Map 함수를 입력하고 Get-Map 함수를 가져오는 경우 원래 함수가 바뀝니다. 따라서 현재 세션에서 해당 함수를 검색할 수 없습니다.

이름 충돌 방지

명령 이름 충돌을 관리하는 가장 좋은 방법은 충돌을 방지하는 것입니다. 명령 이름을 지정할 때는 매우 구체적이거나 고유한 이름을 사용합니다. 예를 들어 명령의 명사에 사용자의 이니셜 또는 회사 이름 약어를 추가합니다.

또한 Windows PowerShell 모듈 또는 다른 세션에서 사용자 세션으로 명령을 가져올 경우 Import-Module 또는 Import-PSSession cmdlet의 Prefix 매개 변수를 사용하여 명령 이름의 명사에 접두사를 추가합니다.

예를 들어 다음 명령은 DateFunctions 모듈을 가져올 때 Windows PowerShell과 함께 제공되는 Get-Date 및 Set-Date cmdlet과의 충돌이 발생하지 않도록 합니다.

          Import-Module -Name DateFunctions -Prefix ZZ

자세한 내용은 Import-Module 및 Import-PSSession을 참조하세요.

참고 항목

about_Path_Syntax

about_Aliases

about_Functions

별칭(공급자)

함수(공급자)

Get-Command

Import-Module

Import-PSSession