about_Parameters_Default_Values

업데이트 날짜: 2014년 5월

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

항목

about_Parameters_Default_Values

간단한 설명

cmdlet 및 고급 함수의 매개 변수에 대해 사용자 지정 기본값을 설정하는 방법을 설명합니다.

자세한 설명

$PSDefaultParameterValues 기본 설정 변수를 사용하면 모든 cmdlet 또는 고급 함수에 대해 사용자 지정 기본값을 지정할 수 있습니다. cmdlet 및 함수는 명령에서 다른 값을 지정하지 않는 한 사용자 지정 기본값을 사용합니다.

cmdlet 및 고급 함수의 작성자는 해당 매개 변수에 대해 표준 기본값을 설정합니다. 일반적으로 표준 기본값은 유용하지만 일부 환경에서는 적합하지 않을 수 있습니다.

이 기능은 거의 명령을 사용할 때마다 또는 전자 메일 서버 이름이나 프로젝트 GUID와 같은 특정 매개 변수 값을 기억하기 어려울 때 동일한 대체 매개 변수 값을 지정해야 하는 경우에 특히 유용합니다.

원하는 기본값이 예측 가능한 방식으로 달라지는 경우 조건에 따라 매개 변수에 다른 기본값을 제공하는 스크립트 블록을 지정할 수 있습니다.

$PSDefaultParameterValues는 Windows PowerShell 3.0에서 도입되었습니다.

구문

$PSDefaultParameterValues 기본 설정 변수의 구문은 다음과 같습니다.

       $PSDefaultParameterValues=@{"<CmdletName>:<ParameterName>"="<DefaultValue>"}

       $PSDefaultParameterValues=@{"<CmdletName>:<ParameterName>"={<ScriptBlock>}}

       $PSDefaultParameterValues["Disabled"]=$true | $false

CmdletName 및 ParameterName 값에는 와일드카드 문자를 사용할 수 있습니다.

$PSDefaultParameterValues의 값은 키 형식의 유효성을 검사하는 해시 테이블의 형식인 System.Management.Automation.DefaultParameterDictionary입니다. 키는 cmdlet 이름과 콜론(:)으로 구분된 매개 변수 이름으로 구성되고 값은 사용자 지정 기본값인 해시 테이블을 입력합니다.

$PSDefaultParameterValues에서 항목을 설정, 변경, 추가 또는 제거하려면 표준 해시 테이블을 편집하는 데 사용하는 메서드를 사용합니다.

<CmdletName>은 cmdlet의 이름 또는 CmdletBinding 특성을 사용하는 고급 함수의 이름이어야 합니다. $PSDefaultParameterValues를 사용하면 스크립트 또는 간단한 함수에 대해 기본값을 지정할 수 없습니다.

기본값은 개체 또는 스크립트 블록일 수 있습니다. 값이 스크립트 블록이면 Windows PowerShell에서 스크립트 블록을 평가하고 결과를 매개 변수 값으로 사용합니다. 지정된 매개 변수에서 스크립트 블록 값을 사용하는 경우 다음과 같이 스크립트 블록 값을 두 번째 중괄호 집합으로 묶습니다. $PSDefaultParameterValues=@{ "Invoke-Command:ScriptBlock"={{Get-Process}} }

해시 테이블에 대한 자세한 내용은 about_Hash_Tables를 참조하세요. 스크립트 블록에 대한 자세한 내용은 about_Script_Blocks를 참조하세요. 기본 설정 변수에 대한 자세한 내용은 about_Preference_Variables를 참조하세요.

예제

다음 명령은 Send-MailMessage cmdlet의 SmtpServer 매개 변수에 대해 사용자 지정 기본값을 설정합니다.

        $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5"}

여러 매개 변수에 대한 기본값을 설정하려면 세미콜론(;)을 사용하여 각 이름=값 쌍을 구분합니다. 다음 명령은 Get-WinEvent cmdlet의 LogName 매개 변수에 대해 사용자 지정 기본값을 추가합니다.

        $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5";
               "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"}

cmdlet 및 매개 변수의 이름에는 와일드카드 문자를 사용할 수 있습니다. 다음 명령은 모든 명령에서 Verbose 일반 매개 변수를 $true로 설정합니다. $true 및 $false를 사용하여 Verbose와 같은 스위치 매개 변수의 값을 설정합니다.

        $PSDefaultParameterValues = @{"*:Verbose"=$true}

매개 변수에서 여러 값(배열)을 사용하는 경우 여러 값을 기본값으로 설정할 수 있습니다. 다음 명령은 Invoke-Command cmdlet의 ComputerName 매개 변수 기본값을 "Server01" 및 "Server02"로 설정합니다.

        $PSDefaultParameterValues = @{"Invoke-Command:ComputerName"="Server01","Server02"}

스크립트 블록을 사용하면 조건에 따라 매개 변수에 대해 다른 기본값을 지정할 수 있습니다. Windows PowerShell에서 스크립트 블록을 평가하고 결과를 기본 매개 변수 값으로 사용합니다.

다음 명령은 호스트 프로그램이 Windows PowerShell 콘솔인 경우 Format-Table cmdlet의 Autosize 매개 변수 기본값을 $true로 설정합니다.

        $PSDefaultParameterValues=@{"Format-Table:AutoSize"={if ($host.Name –eq "ConsoleHost"){$true}}}

매개 변수에서 스크립트 블록 값을 사용하는 경우 스크립트 블록을 추가 중괄호 집합으로 묶습니다. Windows PowerShell에서 외부 스크립트 블록을 평가하는 경우 결과는 내부 스크립트 블록이며 기본 매개 변수 값으로 설정됩니다.

다음 명령은 Invoke-Command의 ScriptBlock 매개 변수 기본값을 설정합니다. 스크립트 블록은 두 번째 중괄호 집합으로 묶여 있으므로 묶인 스크립트 블록이 Invoke-Command cmdlet에 전달됩니다.

        $PSDefaultParameterValues=@{"Invoke-Command:ScriptBlock"={{Get-EventLog –Log System}}}

$PSDefaultParameterValues를 설정하는 방법

$PSDefaultParameterValues는 기본 설정 변수이므로 이 변수가 설정된 세션에만 있습니다. 기본값은 없습니다.

$PSDefaultParameterValues를 설정하려면 명령줄에서 변수 이름과 하나 이상의 키-값 쌍을 입력합니다.

다른 $PSDefaultParameterValues 명령을 입력하는 경우 해당 값이 원래 값을 대체합니다. 원래 값은 유지되지 않습니다.

이후 세션에서 사용하도록 $PSDefaultParameterValues를 저장하려면 $PSDefaultParameterValues 명령을 Windows PowerShell 프로필에 추가합니다. 자세한 내용은 about_Profiles를 참조하세요.

$PSDefaultParameterValues를 가져오는 방법

$PSDefaultParameterValues의 값을 가져오려면 명령 프롬프트에서 다음을 입력합니다. $PSDefaultParameterValues

예를 들어 첫 번째 명령은 $PSDefaultParameterValues의 값을 설정합니다. 두 번째 명령은 $PSDefaultParameterValues의 값을 가져옵니다.

        PS C:\> $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5";
                "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational";
                "Get-*:Verbose"=$true}

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

<CmdletName:ParameterName> 키의 값을 가져오려면 다음 명령 구문을 사용합니다.

       $PSDefaultParameterValues["<CmdletName:ParameterName>"]

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

       PS C:\> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
       Server01AB234x5   

$PSDefaultParameterValues에 값을 추가하는 방법

$PSDefaultParameterValues에서 값을 추가하거나 제거하려면 표준 해시 테이블에 사용하는 메서드를 사용합니다.

예를 들어 기존 값에 영향을 주지 않고 $PSDefaultParameterValues에 값을 추가하려면 해시 테이블의 Add 메서드를 사용합니다.

Add 메서드의 구문은 다음과 같습니다.

        <HashTable>.Add(Key, Value)

여기서 Key는 "<CmdletName>:<ParameterName>"이고 value는 매개 변수 값입니다.

$PSDefaultParameterValues에서 Add 메서드를 호출하려면 다음 명령 형식을 사용합니다. 값에서 키를 구분하려면 등호(=) 대신 쉼표(,)를 사용해야 합니다.

        $PSDefaultParameterValues.Add("<CmdletName>:<ParameterName>", "<ParameterValue>")

예를 들어 다음 명령은 "PowerShell"을 Get-Process cmdlet의 Name 매개 변수 기본값으로 추가합니다.

        $PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")

다음 예제에서는 이 명령의 효과를 보여 줍니다.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Get-Process:Name               PowerShell
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

$PSDefaultParameterValues에서 값을 제거하는 방법

$PSDefaultParameterValues에서 값을 제거하려면 해시 테이블의 Remove 메서드를 사용합니다.

Remove 메서드의 구문은 다음과 같습니다.

        <HashTable>.Remove(Key)

$PSDefaultParameterValues에서 Remove 메서드를 호출하려면 다음 명령 형식을 사용합니다.

        $PSDefaultParameterValues.Remove("<CmdletName>:<ParameterName>")

예를 들어 다음 명령은 Get-Process cmdlet의 Name 매개 변수와 해당 값을 제거합니다.

        $PSDefaultParameterValues.Remove("Get-Process:Name")

다음 예제에서는 이 명령의 효과를 보여 줍니다.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Get-Process:Name               PowerShell
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues.Remove("Get-Process:Name")

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

$PSDefaultParameterValues에서 값을 변경하는 방법

$PSDefaultParameterValues에서 값을 변경하려면 다음 명령 형식을 사용합니다.

        $PSDefaultParameterValues["CmdletName:ParameterName"]="<NewValue>"

다음 예제에서는 이 명령의 효과를 보여 줍니다.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]="Server0000cabx5"
   
        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server0000cabx5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

PSDefaultParameterValues를 사용하지 않도록 설정하고 다시 사용하도록 설정하는 방법

$PSDefaultParameterValues를 일시적으로 사용하지 않도록 설정했다가 다시 사용하도록 설정할 수 있습니다. 이 기능은 서로 다른 기본 매개 변수 값을 가정할 수 있는 스크립트를 실행하고 있는 경우에 매우 유용합니다.

$PSDefaultParameterValues를 사용하지 않도록 설정하려면 값이 $True인 "Disabled" 키를 추가합니다.

예:

        $PSDefaultParameterValues.Add("Disabled", $true)

        - or -

        $PSDefaultParameterValues[Disabled]=$true

$PSDefaultParameterValues의 다른 값은 유지되지만 유효하지 않습니다.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Disabled                       True
        Send-MailMessage:SmtpServer    Server0000cabx5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

$PSDefaultParameterValues를 다시 사용하도록 설정하려면 Disabled 키를 제거하거나 Disabled 키의 값을 $False로 변경합니다.

        $PSDefaultParameterValues.Remove("Disabled")

- or -

        $PSDefaultParameterValues[Disabled]=$false

$PSDefaultParameterValues의 이전 값이 다시 유효하게 됩니다.

키워드

about_PSDefaultParameterValues

about_Parameters_DefaultValues

about_DefaultValues

참고 항목

about_Hash_Tables

about_Preference_Variables

about_Profiles

about_Script_Blocks