다음을 통해 공유


about_Parameters_Default_Values

간단한 설명

cmdlet 매개 변수, 고급 함수 및 스크립트에 대한 사용자 지정 기본값을 설정하는 방법을 설명합니다.

긴 설명

$PSDefaultParameterValues 기본 설정 변수를 사용하면 cmdletBinding 특성을 사용하는 cmdlet, 고급 함수 또는 스크립트에 대한 사용자 지정 기본 매개 변수 값을 지정할 수 있습니다. 정의된 값은 명령줄에서 다른 값을 지정하지 않는 한 사용됩니다.

이 기능은 다음 시나리오에서 유용합니다.

  • 명령을 사용할 때마다 동일한 매개 변수 값 지정
  • 기억하기 어려운 특정 매개 변수 값 지정(예: 이메일 서버 이름 또는 프로젝트 GUID)

$PSDefaultParameterValues 변수에는 기본값이 없습니다. 이후 세션에서 사용할 설정을 저장하려면 PowerShell 프로필에 변수 할당을 추가합니다.

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

Syntax

$PSDefaultParameterValues 변수는 System.Management.Automation.DefaultParameterDictionary개체 형식입니다. DefaultParameterDictionary 형식은 키 형식에 대한 몇 가지 추가 유효성 검사가 포함된 해시 테이블입니다. 해시 테이블은 다음과 같은 키-값 쌍을 포함합니다.

  • 키는 형식으로 CommandName:ParameterName입니다
  • 은 매개 변수의 기본값이거나 기본값을 반환하는 ScriptBlock입니다.

의 경우, CmdletBinding 특성을 사용하는 cmdlet, 고급 함수 또는 스크립트 파일의 이름이어야 하는 것이 CommandName입니다. 스크립트 이름은 (Get-Command -Name .\script.ps1).Name에서 보고된 이름과 일치해야 합니다.

메모

PowerShell은 CommandName별칭을 지정하는 것을 방지하지 않습니다. 그러나 정의가 무시되거나 오류가 발생하는 경우가 있습니다. 명령 별칭에 대한 기본값을 정의하지 않아야 합니다.

값은 매개 변수와 호환되는 형식의 객체일 수 있으며, 또는 그러한 값을 반환하는 ScriptBlock이 될 수도 있습니다. 값이 스크립트 블록인 경우 PowerShell은 스크립트 블록을 평가하고 매개 변수 값에 대한 결과를 사용합니다. 지정된 매개 변수에 ScriptBlock 형식이 예상되는 경우 다른 중괄호 집합에 값을 묶어야 합니다. PowerShell이 외부 ScriptBlock를 평가했을 때, 결과는 내부 ScriptBlock입니다. 내부 ScriptBlock 새 기본 매개 변수 값이 됩니다.

예를 들어:

$PSDefaultParameterValues = @{
    'Invoke-Command:ScriptBlock' = { {Get-Process} }
}

예시

Add()Remove() 메서드를 사용하여 다른 기존 키-값 쌍을 덮어쓰지 않고 $PSDefaultParameterValues 특정 키-값 쌍을 추가하거나 제거합니다.

$PSDefaultParameterValues.Add('CmdletName:ParameterName', 'DefaultValue')
$PSDefaultParameterValues.Remove('CmdletName:ParameterName')

인덱싱 또는 멤버 액세스를 사용하여 기존 키-값 쌍의 값을 변경합니다. 예를 들어:

$PSDefaultParameterValues.'CommandName:ParameterName'='DefaultValue2'
$PSDefaultParameterValues['CommandName:ParameterName']='DefaultValue1'

$PSDefaultParameterValues에 값을 할당

cmdlet 매개 변수의 기본값을 정의하려면 적절한 키-값 쌍을 포함하는 해시 테이블을 $PSDefaultParameterValues 변수에 할당합니다. 해시 테이블은 여러 키-값 쌍을 포함할 수 있습니다. 다음은 Send-MailMessage:SmtpServerGet-WinEvent:LogName 키의 기본값을 설정하는 예제입니다.

$PSDefaultParameterValues = @{
  'Send-MailMessage:SmtpServer'='Server123'
  'Get-WinEvent:LogName'='Microsoft-Windows-PrintService/Operational'
}

cmdlet 및 매개 변수 이름에는 와일드카드 문자가 포함될 수 있습니다. 자세한$true스위치 매개 변수에 대한 값을 사용하고 $false 설정합니다. 다음은 일반 매개 변수 자세한 정보 표시 모든 명령에 대해 $true 설정하는 예제입니다.

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

매개 변수가 여러 값을 허용하는 경우 배열을 사용하여 여러 기본값을 제공할 수 있습니다. 다음은 Invoke-Command:ComputerName 키의 기본값을 Server01Server02문자열 값을 포함하는 배열로 설정하는 예제입니다.

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

정의된 값 보기

$PSDefaultParameterValues의 다음 정의를 고려하십시오.

$PSDefaultParameterValues = @{
  'Send-MailMessage:SmtpServer' = 'Server123'
  'Get-WinEvent:LogName' = 'Microsoft-Windows-PrintService/Operational'
  'Get-*:Verbose' = $true
}

명령 프롬프트에서 $PSDefaultParameterValues 입력하여 정의된 값을 볼 수 있습니다.

PS> $PSDefaultParameterValues

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

인덱싱 또는 멤버 액세스를 사용하여 특정 값을 가져올 수 있습니다.

PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer'] # index notation
Server123
PS> $PSDefaultParameterValues.'Get-*:Verbose' # member access notation
True

기본값에 스크립트 블록 사용

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

Format-Table:AutoSize 키는 매개 변수를 기본값인 $true로 설정합니다. if 문에는 $Host.Name이(가) ConsoleHost해야 한다는 조건이 포함되어 있습니다.

$PSDefaultParameterValues = @{
  'Format-Table:AutoSize' = { if ($Host.Name -eq 'ConsoleHost'){$true} }
}

매개 변수가 ScriptBlock 값을 수락하는 경우 ScriptBlock 다른 중괄호 집합에 묶습니다. PowerShell이 외부 ScriptBlock를 평가했을 때, 결과는 내부 ScriptBlock입니다. 내부 ScriptBlock 새 기본 매개 변수 값이 됩니다.

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

기존 $PSDefaultParameterValues 변수에 값 추가

$PSDefaultParameterValues값을 추가하려면 Add() 메서드를 사용합니다. 값을 추가해도 해시 테이블의 기존 값에는 영향을 주지 않습니다. 쉼표(,)를 사용하여 사이를 구분하십시오.

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

이전 예제에서 만든 해시 테이블은 새 키-값 쌍으로 업데이트됩니다.

PS> $PSDefaultParameterValues

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

$PSDefaultParameterValues에서 값 제거

$PSDefaultParameterValues값을 제거하려면 Remove() 메서드를 사용합니다. 값을 제거해도 해시 테이블의 기존 값에는 영향을 주지 않습니다.

이 예제에서는 이전 예제에서 추가된 키-값 쌍을 제거합니다.

PS> $PSDefaultParameterValues.Remove('Get-Process:Name')
PS> $PSDefaultParameterValues

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

$PSDefaultParameterValues 값을 변경

인덱싱 또는 멤버 액세스를 사용하여 기존 키-값 쌍의 기본값을 변경합니다. 이 예제에서는 Send-MailMessage:SmtpServer 키의 기본값이 ServerXYZ새 값으로 변경됩니다.

PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer']='ServerXYZ'
PS> $PSDefaultParameterValues

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

$PSDefaultParameterValues 사용 안 함 또는 다시 사용

일시적으로 사용하지 않도록 설정한 다음 다시 사용하도록 설정할 $PSDefaultParameterValues수 있습니다. 비활성화 $PSDefaultParameterValues 는 다른 기본 매개 변수 값이 필요한 스크립트를 실행하는 경우에 유용합니다.

$PSDefaultParameterValues을 사용하지 않도록 설정하려면 값 Disabled를 가진 $true 키를 추가합니다. $PSDefaultParameterValues 값은 유지되지만 사용되지 않습니다.

PS> $PSDefaultParameterValues.Add('Disabled', $true)
PS> $PSDefaultParameterValues

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

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

PS> $PSDefaultParameterValues.Disabled = $false
PS> $PSDefaultParameterValues

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

참고하십시오