about_Scripts

항목
    about_Scripts

간단한 설명
    Windows PowerShell에서 스크립트를 작성하고 실행하는 방법에 대해 설명합니다.

자세한 설명
    스크립트는 하나 이상의 Windows PowerShell 명령이 포함된 일반 텍스트 파일입니다. Windows PowerShell 
    스크립트의 파일 이름 확장명은 .ps1입니다. 

    스크립트를 작성하면 명령을 나중에 사용하기 위해 저장하고 다른 사용자와 쉽게 공유할 수 있습니다. 가장 중요한 
    점은 스크립트 경로와 파일 이름을 입력하는 간단한 방법으로 명령을 실행할 수 있다는 것입니다. 스크립트는 
    파일의 한 명령처럼 간단하거나 복잡한 프로그램처럼 종합적일 수 있습니다.

    스크립트에는 #Requires 특수 주석, 매개 변수 사용, Data 섹션 지원, 보안을 위한 디지털 서명 등의 추가 기능이 
    있습니다. 스크립트와 스크립트의 함수에 대한 도움말 항목도 작성할 수 있습니다. 

  스크립트를 작성하는 방법

    스크립트에는 한 명령, 파이프라인을 사용하는 여러 명령, 함수, 제어 구조(예: If 문 및 For 루프) 등의 모든 유효한 
    Windows PowerShell 명령이 포함될 수 있습니다.

    스크립트를 작성하려면 메모장 등의 텍스트 편집기나 Windows PowerShell ISE(통합 스크립팅 환경) 등의 스크립트 
    편집기를 시작합니다. 명령을 입력한 다음 파일 이름이 유효하고 파일 이름 확장명이 .ps1인 파일로 저장합니다. 

    다음 예제는 현재 시스템에서 실행되는 서비스를 가져오고 로그 파일에 저장하는 간단한 스크립트입니다. 로그 
    파일 이름은 현재 날짜에서 만들어집니다.

        $date = (get-date).dayofyear
        get-service | out-file "$date.log"

    이 스크립트를 만들려면 텍스트 편집기나 스크립트 편집기를 열고 이러한 명령을 입력한 다음 
    ServiceLog.ps1이라는 파일에 저장합니다. 


  스크립트를 실행하는 방법

    스크립트를 실행하려면 기본 Windows PowerShell 실행 정책을 변경해야 합니다. 기본 실행 정책인 
    "Restricted"는 로컬 컴퓨터에서 작성하는 스크립트를 비롯한 모든 스크립트가 실행되지 못하게 합니다. 
    자세한 내용은 about_Execution_Policies를 참조하십시오.

    스크립트를 실행하려면 스크립트 파일의 전체 이름과 전체 경로를 입력합니다. 

    예를 들어 C:\Scripts 디렉터리에 있는 ServicesLog 스크립트를 실행하려면 다음과 같이 입력하십시오.

        c:\scripts\ServicesLog.ps1

    현재 디렉터리에 있는 스크립트를 실행하려면 현재 디렉터리의 경로를 입력하거나 점 뒤에 경로 백슬래시를 
    사용하여(.\) 현재 디렉터리를 나타냅니다.

    예를 들어 로컬 디렉터리에 있는 ServicesLog.ps1 스크립트를 실행하려면 다음과 같이 입력하십시오.

        .\ServicesLog.ps1

    Windows PowerShell의 보안 기능 때문에, Windows 탐색기에서 스크립트 아이콘을 두 번 클릭하거나 스크립트가 
    현재 디렉터리에 있는 경우에도 전체 경로 없이 스크립트 이름을 입력하면 스크립트가 실행되지 않습니다. 
    Windows PowerShell에서 명령과 스크립트를 실행하는 방법에 대한 자세한 내용은 about_Command_Precedence를 
    참조하십시오.


  원격으로 스크립트 실행

    원격 컴퓨터에서 스크립트를 실행하려면 Invoke-Command cmdlet의 FilePath 매개 변수를 사용합니다.

    스크립트의 경로와 파일 이름을 FilePath 매개 변수의 값으로 입력합니다. 스크립트는 로컬 컴퓨터에 있거나 로컬 
    컴퓨터에서 액세스할 수 있는 디렉터리에 있어야 합니다. 

    다음 명령은 Server01 원격 컴퓨터에서 ServicesLog.ps1 스크립트를 실행합니다.

        invoke-command -computername Server01 -filepath C:\scripts\servicesLog.ps1 



  스크립트의 매개 변수

    스크립트에서 매개 변수를 정의하려면 Param 문을 사용합니다. Param 문은 주석과 모든 #Requires 문을 제외하고 
    스크립트의 첫 번째 문이어야 합니다.

    스크립트 매개 변수는 함수 매개 변수처럼 작동합니다. 매개 변수 값은 스크립트에 있는 모든 명령에 사용할 수 
    있습니다. Parameter 특성 및 이 특성의 명명된 인수를 비롯한 함수 매개 변수의 모든 기능도 스크립트에서 
    유효합니다.

    스크립트를 실행할 때 스크립트 사용자는 스크립트 이름 뒤에 매개 변수를 입력합니다. 

    다음 예제에서는 ComputerName 매개 변수가 있는 Test-Remote.ps1 스크립트를 보여 줍니다. 두 
    스크립트 함수 모두 ComputerName 매개 변수 값에 액세스할 수 있습니다.

        param ($ComputerName = $(throw "ComputerName parameter is required."))

        function CanPing {
           $error.clear()
           $tmp = test-connection $computername -erroraction SilentlyContinue

           if (!$?) 
               {write-host "Ping failed: $ComputerName."; return $false}
           else
               {write-host "Ping succeeded: $ComputerName"; return $true}
        }

        function CanRemote {
            $s = new-pssession $computername -erroraction SilentlyContinue

            if ($s -is [System.Management.Automation.Runspaces.PSSession])
                {write-host "Remote test succeeded: $ComputerName."}
            else
                {write-host "Remote test failed: $ComputerName."}
        }

        if (CanPing $computername) {CanRemote $computername}


    이 스크립트를 실행하려면 스크립트 이름 뒤에 매개 변수 이름을 입력합니다. 예를 들면 다음과 같습니다.

    C:\PS> .\test-remote.ps1 -computername Server01

    Ping succeeded: Server01
    Remote test failed: Server01


    Param 문과 함수 매개 변수에 대한 자세한 내용은 about_Functions 및 about_Functions_Aadvanced_Parameters를 
    참조하십시오.



  스크립트에 대한 도움말

    Get-Help cmdlet은 cmdlet, 공급자 및 함수뿐만 아니라 스크립트에 대한 도움말을 가져옵니다. 스크립트에 대한 
    도움말을 가져오려면 Get-Help와 스크립트의 경로 및 파일 이름을 입력합니다. 스크립트 경로가 Path 환경 
    변수에 있는 경우 경로를 생략할 수 있습니다.

    예를 들어 ServicesLog.ps1 스크립트에 대한 도움말을 가져오려면 다음과 같이 입력하십시오.

        get-help C:\admin\scripts\ServicesLog.ps1

    다음 두 방법 중 하나를 사용하여 스크립트에 대한 도움말을 작성할 수 있습니다.

    --  스크립트에 대한 설명 기반 도움말

        설명에 특수 키워드를 사용하여 도움말 항목을 만듭니다. 스크립트에 대한 설명 기반 도움말을 만들려면 
        설명을 스크립트 파일의 시작 또는 끝에 배치해야 합니다. 설명 기반 도움말에 대한 자세한 내용은 
        about_Comment_Based_Help를 참조하십시오.

    --  스크립트에 대한 XML 기반 도움말

        cmdlet에 대해 일반적으로 만들어진 유형과 같은 XML 기반 도움말 항목을 만듭니다. 도움말 항목을 여러 언어로 
        번역하는 경우 XML 기반 도움말이 필요합니다. 

        스크립트를 XML기반 도움말 항목과 연결하려면 .ExternalHelp 도움말 설명 키워드를 사용합니다. ExternalHelp 
        키워드에 대한 자세한 내용은 about_Comment_Based_Help를 참조하십시오. XML 기반 도움말에 대한 자세한 내용은 
        MSDN(Microsoft Developer Network)의 "How to Write Cmdlet Help(Cmdlet 도움말 작성 방법)"
        (https://go.microsoft.com/fwlink/?LinkID=123415)를 참조하십시오.



  스크립트 범위 및 도트 소싱

    각 스크립트는 자체 범위에서 실행됩니다. 스크립트에서 만들어진 함수, 변수, 별칭 및 드라이브는 스크립트 
    범위에서만 존재합니다. 스크립트가 실행되는 범위에서는 이러한 항목과 해당 값에 액세스할 수 없습니다.

    다른 범위에서 스크립트를 실행하려면 Global 또는 Local과 같은 범위를 지정하거나 스크립트를 도트 소싱할 수 
    있습니다.

    도트 소싱 기능을 사용하여 스크립트 범위 대신 현재 범위에서 스크립트를 실행할 수 있습니다. 도트 소싱된 
    스크립트를 실행하는 경우 명령 프롬프트에서 명령을 입력한 것처럼 스크립트의 명령이 실행됩니다. 
    스크립트에서 만드는 함수, 변수, 별칭 및 드라이브는 사용자가 현재 작업하고 있는 범위에서 만들어집니다. 
    스크립트가 실행된 후 세션에서 만들어진 항목을 사용하고 해당 값에 액세스할 수 있습니다.

    스크립트를 도트 소싱하려면 스크립트 경로 앞에 점(.)과 공백을 입력합니다.

    예를 들면 다음과 같습니다.

        . C:\scripts\UtilityFunctions.ps1

    -또는-

        . .\UtilityFunctions.ps1


    UtilityFunctions 스크립트가 실행된 후 스크립트에서 만드는 함수와 변수가 현재 범위에 추가됩니다. 
    예를 들어 UtilityFunctions.ps1 스크립트는 New-Profile 함수와 $ProfileName 변수를 만듭니다.

        # UtilityFunctions.ps1의 경우

        function New-Profile
        {
            Write-Host "Running New-Profile function"
            $profileName = split-path $profile -leaf

            if (test-path $profile)
               {write-error "There is already a $profileName profile on this computer."}
            else
           {new-item -type file -path $profile -force }
        }


    UtilityFunctions.ps1 스크립트를 자체 스크립트 범위에서 실행하는 경우 New-Profile 함수와 $ProfileName 
    변수는 스크립트가 실행되는 동안에만 존재합니다. 스크립트가 종료되는 경우 다음 예제와 같이 함수와 변수가 
    제거됩니다.

        C:\PS> .\UtilityFunctions.ps1

        C:\PS> New-Profile
        'new-profile' 용어는 cmdlet, 함수, 실행할 수 있는 프로그램 또는 스크립트 파일로 인식되지 않습니다. 
        용어를 확인하고 다시 시도하십시오.
        줄:1 문자:12
        + new-profile <<<< 
           + CategoryInfo          : ObjectNotFound: (new-profile:String) [], 
           + FullyQualifiedErrorId : CommandNotFoundException

        C:\PS> $profileName
        C:\PS>


    스크립트를 도트 소싱하고 실행하는 경우 스크립트에서는 New-Profile 함수와 $ProfileName 변수를 현재 범위의 
    현재 세션에서 만듭니다. 스크립트가 실행된 후 다음 예제와 같이 세션에서 New-Profile 함수를 사용할 수 
    있습니다.

        C:\PS> . .\UtilityFunctions.ps1

        C:\PS> New-Profile


            Directory: C:\Users\juneb\Documents\WindowsPowerShell


            Mode    LastWriteTime     Length Name 
            ----    -------------     ------ ----
            -a---   1/14/2009 3:08 PM      0 Microsoft.PowerShellISE_profile.ps1


        C:\PS> $profileName
        Microsoft.PowerShellISE_profile.ps1


    범위에 대한 자세한 내용은 about_Scopes를 참조하십시오.



  모듈의 스크립트

    모듈은 한 단위로 배포될 수 있는 관련된 Windows PowerShell 리소스의 집합입니다. 모듈을 사용하여 스크립트, 
    함수 및 기타 리소스를 구성할 수 있을 뿐만 아니라 코드를 다른 사용자에게 배포하고 신뢰할 수 있는 곳에서 
    코드를 가져올 수도 있습니다.

    모듈에 스크립트를 포함하거나 스크립트 모듈을 만들 수 있습니다. 스크립트 모듈은 전체적으로나 주로 스크립트와 
    지원 리소스로 구성된 모듈입니다. 스크립트 모듈은 파일 이름 확장명이 .psm1인 스크립트입니다.

    모듈에 대한 자세한 내용은 about_Modules를 참조하십시오.



  기타 스크립트 기능 

    Windows PowerShell에는 스크립트에서 사용할 수 있는 다양한 유용한 기능이 있습니다.

    #Requires 
        #Requires 문을 사용하여 지정된 모듈 또는 스냅인과 지정된 Windows PowerShell 버전이 없는 경우 스크립트가 
        실행되지 못하게 할 수 있습니다. 자세한 내용은 about_Requires를 참조하십시오.

    $MyInvocation
        $MyInvocation 자동 변수에는 현재 스크립트를 비롯하여 현재 명령에 대한 정보가 포함됩니다. 이 변수와 해당 
        속성을 사용하여 스크립트가 실행되는 동안 스크립트에 대한 정보를 가져올 수 있습니다. 예를 들어 
        $MyInvocation.MyCommand.Path 변수에는 스크립트의 경로와 파일 이름이 포함됩니다.

    Data 섹션
        Data 키워드를 사용하여 데이터를 스크립트의 논리와 구분할 수 있습니다. Data 섹션을 사용하면 지역화도 더 
        용이해질 수 있습니다. 자세한 내용은 about_Data_Sections 및 about_Script_Localization을 참조하십시오.

    스크립트 서명
        디지털 서명도 스크립트에 추가할 수 있습니다. 실행 정책에 따라 디지털 서명을 사용하여 안전하지 않은 명령을 
        포함할 수 있는 스크립트의 실행을 제한할 수 있습니다. 자세한 내용은 about_Execution_Policies 및 
        about_Signing을 참조하십시오.



참고 항목
    about_Command_Precedence
    about_Comment_Based_Help
    about_Execution_Policies
    about_Functions
    about_Modules
    about_Profiles
    about_Requires
    about_Scopes
    about_Script_Blocks
    about_Signing
    Invoke-Command