간단한 설명
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별칭을 지정하는 것을 방지하지 않습니다. 그러나 정의가 무시되거나 오류가 발생하는 경우가 있습니다. 명령 별칭에 대한 기본값을 정의하지 않아야 합니다.
예를 들어:
$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:SmtpServer 및 Get-WinEvent:LogName 키의 기본값을 설정하는 예제입니다.
$PSDefaultParameterValues = @{
'Send-MailMessage:SmtpServer'='Server123'
'Get-WinEvent:LogName'='Microsoft-Windows-PrintService/Operational'
}
cmdlet 및 매개 변수 이름에는 와일드카드 문자가 포함될 수 있습니다. 자세한$true스위치 매개 변수에 대한 값을 사용하고 $false 설정합니다. 다음은 일반 매개 변수 자세한 정보 표시 모든 명령에 대해 $true 설정하는 예제입니다.
$PSDefaultParameterValues = @{'*:Verbose'=$true}
매개 변수가 여러 값을 허용하는 경우 배열을 사용하여 여러 기본값을 제공할 수 있습니다. 다음은 Invoke-Command:ComputerName 키의 기본값을 Server01 및 Server02문자열 값을 포함하는 배열로 설정하는 예제입니다.
$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
참고하십시오
PowerShell