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


Сведения о значениях параметров по умолчанию

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

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

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

Переменная $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

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

about_CommonParameters

about_Functions_Advanced

about_Functions_CmdletBindingAttribute

about_Hash_Tables

about_Preference_Variables

about_Profiles

about_Script_Blocks