Поделиться через


about_Parameters_Default_Values

Краткое описание

Описывает, как задать пользовательские значения по умолчанию для параметров командлета и расширенных функций.

Подробное описание

Переменная $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. Для параметра 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 или измените значение отключенного ключа на $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

См. также раздел