about_Parameters_Default_Values

Se aplica a: Windows PowerShell 3.0

TEMA

about_Parameters_Default_Values

DESCRIPCIÓN BREVE

Explica cómo establecer valores predeterminados personalizados para los parámetros de cmdlets y funciones avanzadas.

DESCRIPCIÓN LARGA

La variable de preferencia $PSDefaultParameterValues le permite especificar valores predeterminados personalizados para cualquier cmdlet o función avanzada. Los cmdlets y las funciones usan el valor predeterminado personalizado a menos que especifique otro valor en el comando.

Los autores de cmdlets y funciones avanzadas establecen valores predeterminados estándar para sus parámetros. Normalmente los valores predeterminados estándar son útiles, pero es posible que no sean adecuados para todos los entornos.

Esta característica es especialmente útil cuando se debe especificar el mismo valor de parámetro alternativo casi cada vez que se usa el comando, o cuando un valor de parámetro determinado es difícil de recordar, como un nombre de servidor de correo electrónico o el GUID del proyecto.

Si el valor predeterminado deseado varía de manera previsible, puede especificar un bloque de script que proporcione valores predeterminados diferentes para un parámetro en diferentes condiciones.

$PSDefaultParameterValues se introdujo en Windows PowerShell 3.0.

SINTAXIS

La sintaxis de la variable de preferencia de $PSDefaultParameterValues es la siguiente:

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

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

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

Se permiten caracteres comodín en los valores CmdletName y ParameterName.

El valor de $PSDefaultParameterValues es un System.Management.Automation.DefaultParameterDictionary, un tipo de tabla hash que valida el formato de las claves. Especifique una tabla hash en la que la clave conste del nombre del cmdlet y el nombre del parámetro separados por dos puntos (:), y el valor sea el valor predeterminado personalizado.

Para establecer, cambiar, agregar o quitar las entradas de $PSDefaultParameterValues, use los métodos que usaría para editar una tabla hash estándar.

El <CmdletName> debe ser el nombre de un cmdlet o el nombre de una función avanzada que usa el atributo CmdletBinding. No puede usar $PSDefaultParameterValues para especificar valores predeterminados para scripts o funciones sencillas.

El valor predeterminado puede ser un objeto o un bloque de script. Si el valor es un bloque de script, Windows PowerShell evalúa el bloque de script y usa el resultado como valor del parámetro. Si el parámetro especificado tiene un valor de bloque de script, incluya el valor del bloque de script en un segundo conjunto de llaves, como: $PSDefaultParameterValues=@{ "Invoke-Command:ScriptBlock"={{Get-Process}} }

Para obtener información acerca de las tablas hash, consulte about_Hash_Tables. Para obtener información acerca de los bloques de script, consulte about_Script_Blocks. Para obtener información acerca de las variables de preferencia, consulte about_Preference_Variables.

EJEMPLOS

El comando siguiente establece un valor predeterminado personalizado para el parámetro SmtpServer del cmdlet Send-MailMessage.

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

Para establecer valores predeterminados para varios parámetros, use un punto y coma (;) para separar cada par Nombre=Valor. El comando siguiente agrega un valor predeterminado personalizado para el parámetro LogName del cmdlet Get-WinEvent.

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

Puede usar caracteres comodín en el nombre del cmdlet y el parámetro. El siguiente comando establece el parámetro común Verbose en $true en todos los comandos. Use $true y $false para establecer los valores de parámetros de modificador, como Verbose.

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

Si un parámetro acepta varios valores (una matriz), puede establecer varios valores como el valor predeterminado. El siguiente comando establece el valor predeterminado del parámetro ComputerName del cmdlet Invoke-Command en "Server01" y "Server02".

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

Puede usar un bloque de script para especificar distintos valores predeterminados para un parámetro en diferentes condiciones. Windows PowerShell evalúa el bloque de script y el resultado se usa como valor predeterminado del parámetro.

El siguiente comando establece el valor predeterminado del parámetro Autosize del cmdlet Format-Table en $true si el programa de host es la consola de Windows PowerShell.

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

Si un parámetro tiene un valor de bloque de script, incluya el bloque de script en un conjunto adicional de llaves. Cuando Windows PowerShell evalúa el bloque de script externo, el resultado es el bloque de script interno, que se establece como el valor de parámetro predeterminado.

El siguiente comando establece el valor predeterminado del parámetro ScriptBlock de Invoke-Command. Dado el bloque de script se incluye en un segundo conjunto de llaves, el bloque de script delimitado se pasa al cmdlet Invoke-Command.

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

CÓMO ESTABLECER $PSDefaultParameterValues

$PSDefaultParameterValues es una variable de preferencia, por lo que solo existe en la sesión en la que se establece. No tiene ningún valor predeterminado.

Para establecer $PSDefaultParameterValues, escriba el nombre de variable y uno o más pares de clave-valor en la línea de comandos.

Si escribe otro comando $PSDefaultParameterValues, su valor reemplaza el valor original. No se conserva el original.

Para guardar $PSDefaultParameterValues para sesiones futuras, agregue un comando $PSDefaultParameterValues a su perfil de Windows PowerShell. Para obtener más información, consulte about_Profiles.

CÓMO OBTENER $PSDefaultParameterValues

Para obtener el valor de $PSDefaultParameterValues, en el símbolo del sistema, escriba: $PSDefaultParameterValues

Por ejemplo, el primer comando establece el valor de $PSDefaultParameterValues. El segundo comando obtiene el valor de $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

Para obtener el valor de una clave <CmdletName:ParameterName>, use la siguiente sintaxis de comando:

       $PSDefaultParameterValues["<CmdletName:ParameterName>"]

Por ejemplo:

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

CÓMO AGREGAR VALORES A $PSDefaultParameterValues

Para agregar o quitar valores de $PSDefaultParameterValues, use los métodos que usaría para una tabla hash estándar.

Por ejemplo, para agregar un valor a $PSDefaultParameterValues sin afectar a los valores existentes, use el método Add de las tablas hash.

La sintaxis del método Add es la siguiente:

        <HashTable>.Add(Key, Value)

donde la clave es "<CmdletName>:<ParameterName>" y el valor es el valor del parámetro.

Use el formato de comando siguiente para llamar al método Add en $PSDefaultParameterValues. Asegúrese de usar una coma (,) para separar la clave del valor, en lugar del signo igual (=).

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

Por ejemplo, el comando siguiente agrega "PowerShell" como el valor predeterminado del parámetro Name del cmdlet Get-Process.

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

En el ejemplo siguiente se muestra el efecto de este comando.

        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

CÓMO QUITAR VALORES DE $PSDefaultParameterValues

Para quitar un valor de $PSDefaultParameterValues, use el método Remove de las tablas hash.

La sintaxis del método Remove es la siguiente:

        <HashTable>.Remove(Key)

Use el formato de comando siguiente para llamar al método Remove en $PSDefaultParameterValues.

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

Por ejemplo, el comando siguiente quita el parámetro Name del cmdlet Get-Process y sus valores.

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

En el ejemplo siguiente se muestra el efecto de este comando.

        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

CÓMO CAMBIAR LOS VALORES DE $PSDefaultParameterValues

Para cambiar un valor en $PSDefaultParameterValues, use el formato de comando siguiente.

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

En el ejemplo siguiente se muestra el efecto de este comando.

        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

CÓMO DESHABILITAR Y VOLVER A HABILITAR $PSDefaultParameterValues

Puede deshabilitar temporalmente y, a continuación, volver a habilitar $PSDefaultParameterValues. Esto es muy útil si está ejecutando scripts que podrían adoptar valores de parámetro predeterminados diferentes.

Para deshabilitar $PSDefaultParameterValues, agregue una clave "Disabled" con un valor $True.

Por ejemplo,

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

        - or -

        $PSDefaultParameterValues[Disabled]=$true

Se conservan los demás valores de $PSDefaultParameterValues, pero no son efectivos.

        PS C:\> $PSDefaultParameterValues

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

Para volver a habilitar $PSDefaultParameterValues, quite la clave Disabled o cambie el valor de la clave Disabled a $False.

        $PSDefaultParameterValues.Remove("Disabled")

- or -

        $PSDefaultParameterValues[Disabled]=$false

El valor anterior de $PSDefaultParameterValues vuelve a ser efectivo.

PALABRAS CLAVE

about_PSDefaultParameterValues

about_Parameters_DefaultValues

about_DefaultValues

VEA TAMBIÉN

about_Hash_Tables

about_Preference_Variables

about_Profiles

about_Script_Blocks