Сведения о значениях параметров по умолчанию
Краткое описание
Описывает, как задать пользовательские значения по умолчанию для параметров командлета и расширенных функций.
Подробное описание
Переменная $PSDefaultParameterValues
предпочтения позволяет указать пользовательские значения по умолчанию для любого командлета или расширенной функции. Командлеты и расширенные функции используют пользовательское значение по умолчанию, если в команде не указано другое значение.
Авторы командлетов и расширенных функций задают стандартные значения по умолчанию для своих параметров. Как правило, стандартные значения по умолчанию полезны, но они могут подходить не для всех сред.
Эта функция особенно полезна, если необходимо указывать одно и то же альтернативное значение параметра почти при каждом использовании команды или когда определенное значение параметра трудно запомнить, например имя сервера электронной почты или GUID проекта.
Если требуемое значение по умолчанию изменяется предсказуемо, можно указать блок скрипта, который предоставляет разные значения по умолчанию для параметра в разных условиях.
$PSDefaultParameterValues
появилась в PowerShell 3.0.
Синтаксис
Переменная $PSDefaultParameterValues
представляет собой хэш-таблицу, которая проверяет формат ключей как тип объекта System.Management.Automation.DefaultParameterDictionary. Хэш-таблица содержит пары "ключ-значение ". Ключ имеет формат CmdletName:ParameterName
. Значением является DefaultValue или ScriptBlock, назначенный ключу.
Синтаксис переменной $PSDefaultParameterValues
предпочтения выглядит следующим образом:
$PSDefaultParameterValues=@{"CmdletName:ParameterName"="DefaultValue"}
$PSDefaultParameterValues=@{ "CmdletName:ParameterName"={{ScriptBlock}} }
$PSDefaultParameterValues["Disabled"]=$True | $False
Подстановочные знаки разрешены в значениях CmdletName и ParameterName .
Чтобы задать, изменить, добавить или удалить определенную пару "ключ-значение " из $PSDefaultParameterValues
, используйте методы для изменения стандартной хэш-таблицы. Например, методы Add и Remove . Эти методы не перезаписывают другие значения в хэш-таблице.
Существует еще один синтаксис, который не перезаписывает существующую $PSDefaultParameterValues
хэш-таблицу. Чтобы добавить или изменить определенную пару "ключ-значение ", используйте следующий синтаксис:
$PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"
Имя командлета должно быть именем командлета или именем расширенной функции, которая использует атрибут CmdletBinding. Нельзя использовать для $PSDefaultParameterValues
указания значений по умолчанию для скриптов или простых функций.
DefaultValue может быть объектом или блоком скрипта. Если значением является блок скрипта, PowerShell оценивает блок скрипта и использует результат в качестве значения параметра. Если указанный параметр принимает значение блока скрипта, заключите значение блока скрипта во второй набор фигурных скобок, например:
$PSDefaultParameterValues=@{ "Invoke-Command:ScriptBlock"={{Get-Process}} }
Дополнительные сведения см. в следующих документах:
Примеры
Настройка $PSDefaultParameterValues
$PSDefaultParameterValues
является переменной предпочтения, поэтому она существует только в сеансе, в котором она задана. У него нет значения по умолчанию.
Чтобы задать $PSDefaultParameterValues
значение , введите имя переменной и одну или несколько пар "ключ-значение ". При выполнении другой $PSDefaultParameterValues
команды она перезаписывает существующую хэш-таблицу.
Примеры изменения пар "ключ-значение " без перезаписи существующих значений хэш-таблицы см. в разделах Добавление значений в $PSDefaultParameterValues или Изменение значений в $PSDefaultParameterValues.
Чтобы сохранить $PSDefaultParameterValues
данные для будущих сеансов, добавьте $PSDefaultParameterValues
команду в профиль PowerShell. Дополнительные сведения см. в разделе about_Profiles.
Установка настраиваемого значения по умолчанию
Пара "Ключ-значение " Send-MailMessage:SmtpServer
задает для ключа настраиваемое значение по умолчанию Server123.
$PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123"
}
Установка значений по умолчанию для нескольких параметров
Чтобы задать значения по умолчанию для нескольких параметров, разделите каждую пару "ключ-значение " точкой с запятой (;
). Для ключей Send-MailMessage:SmtpServer
и Get-WinEvent:LogName
заданы пользовательские значения по умолчанию.
$PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123";
"Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
}
Использование подстановочных знаков и параметров переключения
Имена командлетов и параметров могут содержать подстановочные знаки. Используйте $True
и $False
, чтобы задать значения для параметров переключения, например Verbose. Подробный параметр общего параметра имеет значение $True
для всех команд.
$PSDefaultParameterValues = @{"*:Verbose"=$True}
Использование массива для значения по умолчанию
Если параметр может принимать несколько значений, массив, можно задать несколько значений в качестве значений по умолчанию. По умолчанию для Invoke-Command:ComputerName
ключа задано значение массива Server01 и Server02.
$PSDefaultParameterValues = @{
"Invoke-Command:ComputerName"="Server01","Server02"
}
Использование блока скрипта
Блок скрипта можно использовать для указания различных значений по умолчанию для параметра в разных условиях. PowerShell оценивает блок скрипта и использует результат в качестве значения параметра по умолчанию.
Ключ Format-Table:AutoSize
задает для параметра значение по умолчанию True. Инструкция If
содержит условие, которое $host.Name
должно быть консолью PowerShell ConsoleHost.
$PSDefaultParameterValues=@{
"Format-Table:AutoSize"={if ($host.Name -eq "ConsoleHost"){$True}}
}
Если параметр принимает значение блока скрипта, заключите блок скрипта в дополнительный набор скобок. Когда PowerShell оценивает внешний блок скрипта, результатом является внутренний блок скрипта, который задается в качестве значения параметра по умолчанию.
Для Invoke-Command:ScriptBlock
ключа задано значение по умолчанию журнала системных событий , так как блок скрипта заключен во второй набор фигурных скобок. Результат блока скрипта передается командлету Invoke-Command
.
$PSDefaultParameterValues=@{
"Invoke-Command:ScriptBlock"={{Get-EventLog -Log System}}
}
Как получить $PSDefaultParameterValues
Значения хэш-таблицы отображаются путем ввода $PSDefaultParameterValues
в командной строке PowerShell.
Хэш-таблица $PSDefaultParameterValues
задается с тремя парами "ключ-значение ".
Эта хэш-таблица используется в следующих примерах, описывающих добавление, изменение и удаление значений из $PSDefaultParameterValues
.
PS> $PSDefaultParameterValues = @{
"Send-MailMessage:SmtpServer"="Server123"
"Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
"Get-*:Verbose"=$True
}
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Чтобы получить значение определенного CmdletName:ParameterName
ключа, используйте следующий синтаксис:
$PSDefaultParameterValues["CmdletName:ParameterName"]
Например, чтобы получить значение ключа Send-MailMessage:SmtpServer
.
PS> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
Server123
Добавление значений в $PSDefaultParameterValues
Чтобы добавить значение в $PSDefaultParameterValues
, используйте метод Add . Добавление значения не влияет на существующие значения хэш-таблицы.
Используйте запятую (,
), чтобы отделить ключ от значения. В следующем синтаксисе показано, как использовать метод Add для $PSDefaultParameterValues
.
PS> $PSDefaultParameterValues.Add("CmdletName:ParameterName", "DefaultValue")
Хэш-таблица, созданная в предыдущем примере, обновляется новой парой "ключ-значение ". Метод Add задает Get-Process:Name
для ключа значение PowerShell.
$PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")
Следующий синтаксис выполняет тот же результат.
$PSDefaultParameterValues["Get-Process:Name"]="PowerShell"
Переменная $PSDefaultParameterValues
отображает обновленную хэш-таблицу. Добавлен Get-Process:Name
ключ.
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 хэш-таблиц. Удаление значения не влияет на существующие значения хэш-таблицы.
В следующем синтаксисе показано, как использовать метод Remove в $PSDefaultParameterValues
.
PS> $PSDefaultParameterValues.Remove("CmdletName:ParameterName")
В этом примере хэш-таблица, созданная в предыдущем примере, обновляется для удаления пары "ключ-значение ". Метод Remove удаляет Get-Process:Name
ключ.
$PSDefaultParameterValues.Remove("Get-Process:Name")
Переменная $PSDefaultParameterValues
отображает обновленную хэш-таблицу. Ключ Get-Process:Name
был удален.
PS> $PSDefaultParameterValues
Name Value
---- -----
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer Server123
Изменение значений в $PSDefaultParameterValues
Изменения определенного значения не влияют на существующие значения хэш-таблицы. Чтобы изменить определенную пару "ключ-значение " в $PSDefaultParameterValues
, используйте следующий синтаксис:
PS> $PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"
В этом примере хэш-таблица, созданная в предыдущем примере, обновляется для изменения пары "ключ-значение ". Следующая команда изменяет Send-MailMessage:SmtpServer
ключ на новое значение ServerXYZ.
$PSDefaultParameterValues["Send-MailMessage:SmtpServer"]="ServerXYZ"
Переменная $PSDefaultParameterValues
отображает обновленную хэш-таблицу. Ключ Send-MailMessage:SmtpServer
был изменен на новое значение.
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["Disabled"]=$True
Переменная $PSDefaultParameterValues
отображает обновленную хэш-таблицу со значением Disabled
ключа.
PS> $PSDefaultParameterValues
Name Value
---- -----
Disabled True
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ
Чтобы повторно включить $PSDefaultParameterValues
, удалите ключ Disabled или измените значение ключа Disabled на $False
. Предыдущее значение снова $PSDefaultParameterValues
вступает в силу.
PS> $PSDefaultParameterValues.Remove("Disabled")
Следующий синтаксис выполняет тот же результат.
PS> $PSDefaultParameterValues["Disabled"]=$False
Переменная $PSDefaultParameterValues
отображает обновленную хэш-таблицу. При использовании Disabled
метода Remove ключ удаляется из выходных данных.
Если для повторного включения $PSDefaultParameterValues
использовался альтернативный Disabled
синтаксис, ключ отображается как False.
PS> $PSDefaultParameterValues
Name Value
---- -----
Disabled False
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ