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

Дикие карта символы разрешены в значениях Командлета и ParameterName.

Чтобы задать, изменить, добавить или удалить определенную пару $PSDefaultParameterValues"Ключ-значение", используйте методы для изменения стандартной хэш-таблицы. Например, методы Добавления и удаления . Эти методы не перезаписывают другие значения в хэш-таблице.

Существует еще один синтаксис, который не перезаписывает существующую $PSDefaultParameterValues хэш-таблицу. Чтобы добавить или изменить определенную пару "Ключ-значение ", используйте следующий синтаксис:

$PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"

Имя командлета должно быть именем командлета или именем расширенной функции, которая использует атрибут КомандлетBinding . Нельзя использовать $PSDefaultParameterValues для указания значений по умолчанию для скриптов или простых функций.

DefaultValue может быть объектом или блоком скрипта. Если значение является блоком скрипта, PowerShell оценивает блок скрипта и использует результат в качестве значения параметра. Если указанный параметр принимает значение блока скрипта, заключите значение блока скрипта во второй набор фигурных скобок, например:

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

Дополнительные сведения см. в следующих документах:

Примеры

Настройка $PSDefaultParameterValues

$PSDefaultParameterValues — это переменная предпочтения, поэтому она существует только в сеансе, в котором он задан. Оно не имеет значения по умолчанию.

Чтобы задать $PSDefaultParameterValues, введите имя переменной и одну или несколько пар key/Value . При выполнении другой $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"
}

Использование параметров wild карта и switch

Имена командлетов и параметров могут содержать дикие карта символы. Используйте $True и $False задайте значения для параметров коммутатора, таких как Подробные сведения. Для всех команд задан $True общий параметр Verbose.

$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"

В этом примере хэш-таблица, созданная в предыдущем примере, обновляется, чтобы изменить пару key/Value . Следующая команда изменяет 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, удалите отключенный ключ или измените значение отключенного ключа $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

См. также