항목
    about_Command_Precedence

간단한 설명
    Windows PowerShell에서 실행할 명령을 결정하는 방법에 대해 설명합니다.

자세한 설명
    이 항목에서는 특히 세션에 같은 이름의 명령이 두 개 이상 있을 때 Windows PowerShell에서 실행할 
    명령을 결정하는 방법에 대해 설명합니다.
    기본적으로 실행되지 않는 명령을 실행하는 방법과 세션에서 명령 이름 충돌을 방지하는 방법에 대해서도 설명합니다.



  명령 우선 순위
      세션에 같은 이름의 명령이 있으면 Windows PowerShell에서는 다음 규칙을 사용하여 실행할 명령을 결정합니다.

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

    
      -- 명령의 경로를 지정하면 경로에서 지정하는 위치의 명령이 실행됩니다. 

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

             C:\TechDocs\FindDocs.ps1

         Path 환경 변수($env:path)에 나열된 경로에 명령이 없거나 사용자가 스크립트 파일의 경로를 지정하지 
         않으면 보안을 위해 Windows PowerShell 스크립트를 비롯한 실행 가능(기본) 명령이 실행되지 않습니다. 

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

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

             .\FindDocs.ps1

        

      -- 경로를 지정하지 않으면 명령 실행 시 다음 우선 순위가 사용됩니다.

              1. 별칭
              2. 함수
              3. Cmdlet 
              4. 기본 Windows 명령

          따라서 "help"를 입력하면 Windows PowerShell에서는 먼저 "help"라는 별칭을 찾고 
          "Help"라는 함수를 찾은 다음 "Help"라는 cmdlet을 찾습니다. 첫 번째로 찾은 "help" 항목이 실행됩니다.

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


      -- 세션에 이름과 유형이 모두 같은 항목(예: 같은 이름의 cmdlet 두 개)이 있으면 가장 
         최근에 세션에 추가된 항목이 실행됩니다.

         예를 들어, Get-Date라는 cmdlet이 있고 Get-Date라는 또 다른 cmdlet을 가져올 경우 
         "Get-Date"를 입력하면 기본적으로 가장 최근에 가져온 cmdlet이 실행됩니다.


  숨겨진 항목과 바뀐 항목
      이 규칙의 결과로 같은 이름의 항목으로 항목이 바뀌거나 숨겨질 수 있습니다. 

      --  모듈 또는 스냅인 이름으로 항목 이름을 정규화, 즉 한정하여 원래 항목에 액세스할 수 있는 경우
          항목을 "숨긴"것입니다. 

          예를 들어, 세션에 있는 cmdlet과 같은 이름의 함수를 가져오면 cmdlet은 스냅인 또는 모듈에서 
          가져왔으므로 숨겨지지만 바뀌지는 않습니다.
            

      --  원래 항목에 더 이상 액세스할 수 없는 경우 항목을 "바꾸"거나 "덮어쓴" 것입니다.

          예를 들어, 세션에 있는 변수와 같은 이름의 변수를 가져오면 원래 변수가 바뀌고 해당 변수에 더 액세스할 수 
          없습니다. 변수는 모듈 이름으로 정규화할 수 없습니다.
           
          또한 명령줄에 함수를 입력한 다음에 같은 이름의 함수를 가져오면 원래 함수가 바뀌고 해당 함수에 더 액세스할 
          수 없습니다.



  숨겨진 명령 실행
      같은 이름의 여러 명령을 구분하는 항목 속성을 지정하여 특정 명령을 실행할 수 있습니다. 

      이 방법으로 모든 명령을 실행할 수 있지만 이 방법은 숨겨진 명령을 실행할 때 특히 유용합니다. 

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


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

      명령은 정규화할 수 있지만 변수나 별칭은 정규화할 수 없습니다.   

      예를 들어, Microsoft.PowerShell.Utility 스냅인의 Get-Date cmdlet이 같은 
      이름의 별칭, 함수 또는 cmdlet으로 숨겨진 경우 스냅인으로 cmdlet 이름을 정규화하여 cmdlet을 
      실행할 수 있습니다.

          Microsoft.PowerShell.Utility\Get-Date


      MapFunctions 모듈에서 추가된 New-Map 명령을 실행하려면 모듈로 명령 이름을 정규화합니다.

          MapFunctions\New-Map

      
      명령을 가져온 원래 스냅인이나 모듈을 찾으려면 다음 Get-Command 명령 형식을 사용합니다.

          get-command <command-name> | format-list -property Name, PSSnapin, Module


      예를 들어, Get-Date cmdlet이 속한 모듈이나 스냅인을 찾으려면 다음을 입력합니다.


          get-command get-date | format-list -property Name, PSSnapin, Module
          
          Name     : Get-Date
          PSSnapIn : Microsoft.PowerShell.Utility
          Module   :
       

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

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

          &(get-command ...) 

      - 또는 -

          &(dir ... )
      
      예를 들어, Map이라는 별칭으로 숨겨진 Map이라는 함수가 있는 경우 다음 명령을 사용하여 함수를 실행합니다.

          &(get-command -name map -type function) 

        - 또는 -

          &(dir function:\map)


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

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

          $myMap = (get-command -name map -type function)

          &($myMap)


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

          & <PSModuleInfo-object> <command>

      예를 들어, FileCommands 모듈에 있는 Add-File cmdlet을 실행하려면 다음 명령 시퀀스를 
      사용합니다.
           
          $FileCommands = get-module -name FileCommands 

          & $FileCommands Add-File
        
   

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

      변수와 별칭은 호출 연산자나 정규화된 이름을 사용하여 실행할 수 없기 때문에 모듈이나 스냅인에서 가져온 경우에도 
      항상 바뀝니다.

      예를 들어, 세션에서 Get-Map 함수를 입력하고 Get-Map이라는 함수를 가져올 경우 원래 함수가 바뀌며 현재 
      세션에서 해당 함수를 검색할 수 없습니다.


   
  이름 충돌 방지
      명령 이름 충돌을 관리하는 가장 좋은 방법은 이름 충돌을 방지하는 것입니다. 명령 이름을 지정할 때는 특정한 
      이름이나 고유한 이름을 사용합니다. 예를 들어, 사용자의 이니셜이나 회사 이름 머리글자어를 명령의 명사에 
      추가합니다.

      또한 Windows PowerShell 모듈 또는 다른 세션의 명령을 세션으로 가져올 때는 Import-Module 
      또는 Import-PSSession cmdlet의 접두사 매개 변수를 사용하여 명령 이름의 명사에 접두사를 추가합니다.
      
      예를 들어, 다음 명령을 사용하면 DateFunctions 모듈을 가져올 때 기본 제공되는 Get-Date 및 
      Set-Date cmdlet과의 충돌을 방지할 수 있습니다.

          import-module -name DateFunctions -prefix ZZ

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


참고 항목
    about_Path_Syntax
    about_Aliases
    about_Functions
    Alias(공급자)
    Function(공급자)
    Get-Command
    Import-Module
    Import-PSSession




목차