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


about_Parameters_Default_Values

Назначение: Windows PowerShell 3.0

РАЗДЕЛ

about_Parameters_Default_Values

КРАТКОЕ ОПИСАНИЕ

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

ПОДРОБНОЕ ОПИСАНИЕ

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

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

Описываемая возможность особенно полезна, если вам приходится указывать альтернативное значение параметра почти каждый раз при использовании команды или если значение определенного параметра, например имя сервера электронной почты или идентификатор GUID проекта, трудно запомнить.

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

Переменная $PSDefaultParameterValues появилась в Windows PowerShell 3.0.

СИНТАКСИС

Привилегированная переменная $PSDefaultParameterValues имеет следующий синтаксис:

       $PSDefaultParameterValues=@{"<CmdletName>:<ParameterName>"="<DefaultValue>"}

       $PSDefaultParameterValues=@{"<CmdletName>:<ParameterName>"={<ScriptBlock>}}

       $PSDefaultParameterValues["Disabled"]=$true | $false

В значениях CmdletName и ParameterName допускаются подстановочные знаки.

Значение переменной $PSDefaultParameterValues имеет тип System.Management.Automation.DefaultParameterDictionary, который представляет собой хэш-таблицу, проверяющую формат ключей. Введите хэш-таблицу, ключ которой состоит из имени командлета и имени параметра, разделенных двоеточием (:), а значение представляет настраиваемое значение параметра по умолчанию.

Чтобы задать, изменить, добавить или удалить записи из переменной $PSDefaultParameterValues, используйте те же методы, что и для изменения обычной хэш-таблицы.

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

Значение по умолчанию может быть объектом или блоком сценария. Если значение является блоком сценария, Windows PowerShell вычисляет его и использует результат в качестве значения параметра. Если параметр принимает в качестве значения блок сценария, заключите его во вторую пару фигурных скобок, например: $PSDefaultParameterValues=@{ «Invoke-Command:ScriptBlock»={{Get-Process}} }

Информацию о хэш-таблицах см. в разделе about_Hash_Tables. Информацию о блоках сценариев см. в разделе about_Script_Blocks. Информацию о привилегированных переменных см. в разделе about_Preference_Variables.

ПРИМЕРЫ

Приведенная ниже команда задает настраиваемое значение по умолчанию для параметра SmtpServer командлета Send-MailMessage.

        $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5"}

Чтобы задать значения по умолчанию для нескольких параметров, используйте точку с запятой (;) для разделения каждой пары Имя=Значение. Приведенная ниже команда добавляет настраиваемое значение по умолчанию для параметра LogName командлета Get-WinEvent.

        $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5";
               "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"}

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

        $PSDefaultParameterValues = @{"*:Verbose"=$true}

Если параметр принимает несколько значений (массив), в качестве значения по умолчанию можно задать несколько значений. Приведенная ниже команда задает для параметра ComputerName командлета Invoke-Command значения по умолчанию «Server01» и «Server02».

        $PSDefaultParameterValues = @{"Invoke-Command:ComputerName"="Server01","Server02"}

С помощью блока сценария можно задать разные значения по умолчанию для параметра в зависимости от условий. Windows PowerShell вычисляет блок сценария и использует результат в качестве значения по умолчанию.

Приведенная ниже команда задает для параметра Autosize командлета Format-Table значение по умолчанию $true, если ведущей программой является консоль Windows PowerShell.

        $PSDefaultParameterValues=@{"Format-Table:AutoSize"={if ($host.Name –eq "ConsoleHost"){$true}}}

Если параметр принимает в качестве значения блок сценария, заключите его в еще одну пару фигурных скобок. Когда Windows PowerShell вычисляет внешний блок сценария, результатом является внутренний блок сценария, который задается в качестве значения параметра по умолчанию.

Приведенная ниже команда задает значение по умолчанию для параметра ScriptBlock командлета Invoke-Command. Так как блок сценария заключен во вторую пару фигурных скобок, он передается в командлет Invoke-Command.

        $PSDefaultParameterValues=@{"Invoke-Command:ScriptBlock"={{Get-EventLog –Log System}}}

ЗАДАНИЕ ПЕРЕМЕННОЙ $PSDefaultParameterValues

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

Чтобы задать переменную $PSDefaultParameterValues, введите в командной строке имя переменной и одну или несколько пар «ключ-значение».

Если ввести еще одну команду $PSDefaultParameterValues, ее значение заменит исходное. Исходное значение не сохраняется.

Чтобы сохранить переменную $PSDefaultParameterValues для будущих сеансов, добавьте команду $PSDefaultParameterValues в свой профиль Windows PowerShell. Дополнительные сведения см. в разделе about_Profiles.

ПОЛУЧЕНИЕ ПЕРЕМЕННОЙ $PSDefaultParameterValues

Чтобы получить значение переменной $PSDefaultParameterValues, введите в командной строке следующую команду: $PSDefaultParameterValues

Например, первая команда задает значение переменной $PSDefaultParameterValues. Вторая команда получает значение переменной $PSDefaultParameterValues.

        PS C:\> $PSDefaultParameterValues = @{"Send-MailMessage:SmtpServer"="Server01AB234x5";
                "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational";
                "Get-*:Verbose"=$true}

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

Чтобы получить значение ключа <Имя_командлета:Имя_параметра>, используйте следующий синтаксис команды:

       $PSDefaultParameterValues["<CmdletName:ParameterName>"]

Например:

       PS C:\> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
       Server01AB234x5   

ДОБАВЛЕНИЕ ЗНАЧЕНИЙ В ПЕРЕМЕННУЮ $PSDefaultParameterValues

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

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

Метод Add имеет следующий синтаксис:

        <HashTable>.Add(Key, Value)

Здесь Key — это пара «<Имя_командлета>:<Имя_параметра>», а value — это значение параметра.

Для вызова метода Add применительно к переменной $PSDefaultParameterValues используйте показанный ниже формат команды. Для отделения ключа от значения используйте запятую (,), а не знак равенства (=).

        $PSDefaultParameterValues.Add("<CmdletName>:<ParameterName>", "<ParameterValue>")

Например, приведенная ниже команда добавляет строку «PowerShell» в качестве значения по умолчанию для параметра Name командлета Get-Process.

        $PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")

В примере ниже показаны результаты выполнения этой команды.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Get-Process:Name               PowerShell
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

УДАЛЕНИЕ ЗНАЧЕНИЙ ИЗ ПЕРЕМЕННОЙ $PSDefaultParameterValues

Чтобы удалить значение из переменной $PSDefaultParameterValues, используйте метод Remove хэш-таблицы.

Метод Remove имеет следующий синтаксис:

        <HashTable>.Remove(Key)

Для вызова метода Remove применительно к переменной $PSDefaultParameterValues используйте показанный ниже формат команды.

        $PSDefaultParameterValues.Remove("<CmdletName>:<ParameterName>")

Например, приведенная ниже команда удаляет параметр Name командлета Get-Process и его значения.

        $PSDefaultParameterValues.Remove("Get-Process:Name")

В примере ниже показаны результаты выполнения этой команды.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Get-Process:Name               PowerShell
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues.Remove("Get-Process:Name")

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

ИЗМЕНЕНИЕ ЗНАЧЕНИЙ ПЕРЕМЕННОЙ $PSDefaultParameterValues

Чтобы изменить значение переменной $PSDefaultParameterValues, используйте следующий формат команды:

        $PSDefaultParameterValues["CmdletName:ParameterName"]="<NewValue>"

В примере ниже показаны результаты выполнения этой команды.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server01AB234x5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

        PS C:\> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]="Server0000cabx5"
   
        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Send-MailMessage:SmtpServer    Server0000cabx5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

ОТКЛЮЧЕНИЕ И ПОВТОРНОЕ ВКЛЮЧЕНИЕ ПЕРЕМЕННОЙ $PSDefaultParameterValues

Вы можете временно отключить, а затем снова включить переменную $PSDefaultParameterValues. Это очень полезно при выполнении сценариев, которые могут принимать разные значения параметров по умолчанию.

Чтобы отключить переменную $PSDefaultParameterValues, добавьте ключ «Disabled» со значением $True.

Например,

        $PSDefaultParameterValues.Add("Disabled", $true)

        - or -

        $PSDefaultParameterValues[Disabled]=$true

Значения переменной $PSDefaultParameterValues сохраняются, но не применяются.

        PS C:\> $PSDefaultParameterValues

        Name                           Value
        ----                           -----
        Disabled                       True
        Send-MailMessage:SmtpServer    Server0000cabx5
        Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
        Get*:Verbose                   True

Чтобы снова включить переменную $PSDefaultParameterValues, удалите ключ Disabled или измените его значение на $False.

        $PSDefaultParameterValues.Remove("Disabled")

- or -

        $PSDefaultParameterValues[Disabled]=$false

Предыдущее значение переменной $PSDefaultParameterValues снова вступит в силу.

КЛЮЧЕВЫЕ СЛОВА

about_PSDefaultParameterValues

about_Parameters_DefaultValues

about_DefaultValues

СМ. ТАКЖЕ

about_Hash_Tables

about_Preference_Variables

about_Profiles

about_Script_Blocks