Partager via


about_Parameters_Default_Values

Brève description

Décrit comment définir des valeurs par défaut personnalisées pour les paramètres d’applet de commande, les fonctions avancées et les scripts.

Description longue

La variable de préférence $PSDefaultParameterValues vous permet de spécifier des valeurs de paramètre par défaut personnalisées pour n’importe quelle applet de commande, fonction avancée ou script qui utilise l’attribut CmdletBinding. Les valeurs définies sont utilisées, sauf si vous spécifiez d’autres valeurs sur la ligne de commande.

Cette fonctionnalité est utile dans les scénarios suivants :

  • spécification de la même valeur de paramètre chaque fois que vous utilisez la commande
  • spécification d’une valeur de paramètre particulière difficile à mémoriser, telle qu’un nom de serveur de messagerie ou un GUID de projet

La variable $PSDefaultParameterValues n’a aucune valeur par défaut. Pour enregistrer les paramètres à utiliser dans les sessions ultérieures, ajoutez l’attribution de variable à votre profil PowerShell.

$PSDefaultParameterValues a été introduit dans PowerShell 3.0.

Syntaxe

La variable $PSDefaultParameterValues est un type d’objet de System.Management.Automation.DefaultParameterDictionary. Le type DefaultParameterDictionary est une table de hachage avec une validation supplémentaire pour le format des clés. La table de hachage contient des paires clé-valeur où :

  • la clé a le format CommandName:ParameterName
  • la valeur est la valeur par défaut du paramètre ou un ScriptBlock qui retourne la valeur par défaut

Pour la clé , l' CommandName doit être le nom d’une applet de commande, d’une fonction avancée ou d’un fichier de script qui utilise l’attribut CmdletBinding. Le nom du script doit correspondre au nom tel qu’il est signalé par (Get-Command -Name .\script.ps1).Name.

Remarque

PowerShell ne vous empêche pas de spécifier un alias pour la CommandName . Toutefois, il existe des cas où la définition est ignorée ou provoque une erreur. Vous devez éviter de définir des valeurs par défaut pour les alias de commande.

La valeur peut être un objet d’un type compatible avec le paramètre ou un ScriptBlock qui retourne une telle valeur. Lorsque la valeur est un bloc de script, PowerShell évalue le bloc de script et utilise le résultat pour la valeur du paramètre. Si le paramètre spécifié attend un type de ScriptBlock, vous devez entourer la valeur d'un autre ensemble d'accolades. Lorsque PowerShell évalue l'ScriptBlock externe , le résultat est l'ScriptBlock interne . Le ScriptBlock interne devient la nouvelle valeur de paramètre par défaut.

Par exemple:

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

Examples

Utilisez les méthodes Add() et Remove() pour ajouter ou supprimer une paire clé-valeur spécifique de $PSDefaultParameterValues sans remplacer d’autres paires clé-valeur existantes.

$PSDefaultParameterValues.Add('CmdletName:ParameterName', 'DefaultValue')
$PSDefaultParameterValues.Remove('CmdletName:ParameterName')

Utilisez l’indexation ou l’accès membre pour modifier la valeur d’une paire clé-valeur existante. Par exemple:

$PSDefaultParameterValues.'CommandName:ParameterName'='DefaultValue2'
$PSDefaultParameterValues['CommandName:ParameterName']='DefaultValue1'

Affecter des valeurs à $PSDefaultParameterValues

Pour définir les valeurs par défaut des paramètres d’applet de commande, affectez une table de hachage contenant les paires clé-valeur appropriées à la variable $PSDefaultParameterValues. La table de hachage peut contenir plusieurs paires clé-valeur. Cet exemple montre comment définir les valeurs par défaut des clés Send-MailMessage:SmtpServer et Get-WinEvent:LogName.

$PSDefaultParameterValues = @{
  'Send-MailMessage:SmtpServer'='Server123'
  'Get-WinEvent:LogName'='Microsoft-Windows-PrintService/Operational'
}

Les noms des applets de commande et des paramètres peuvent contenir des caractères génériques. Utilisez $true et $false définissez des valeurs pour les paramètres de commutateur, tels que Verbose. Cet exemple montre comment définir le paramètre commun verbose à $true pour toutes les commandes.

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

Si un paramètre accepte plusieurs valeurs, vous pouvez fournir plusieurs valeurs par défaut à l’aide d’un tableau. Cet exemple montre comment définir la valeur par défaut de la clé Invoke-Command:ComputerName sur un tableau contenant les valeurs de chaîne Server01 et Server02.

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

Afficher les valeurs définies

Considérez la définition suivante de $PSDefaultParameterValues:

$PSDefaultParameterValues = @{
  'Send-MailMessage:SmtpServer' = 'Server123'
  'Get-WinEvent:LogName' = 'Microsoft-Windows-PrintService/Operational'
  'Get-*:Verbose' = $true
}

Vous pouvez afficher les valeurs définies en entrant $PSDefaultParameterValues à l’invite de commandes.

PS> $PSDefaultParameterValues

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

Vous pouvez utiliser l’indexation ou l’accès aux membres pour obtenir une valeur spécifique.

PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer'] # index notation
Server123
PS> $PSDefaultParameterValues.'Get-*:Verbose' # member access notation
True

Utiliser un bloc de script pour la valeur par défaut

Vous pouvez utiliser un bloc de script pour spécifier différentes valeurs par défaut pour un paramètre dans différentes conditions. PowerShell évalue le bloc de script et utilise le résultat comme valeur de paramètre par défaut.

La clé Format-Table:AutoSize définit ce paramètre de basculement sur une valeur par défaut de $true l’instruction if contient une condition indiquant que le $Host.Name doit être ConsoleHost.

$PSDefaultParameterValues = @{
  'Format-Table:AutoSize' = { if ($Host.Name -eq 'ConsoleHost'){$true} }
}

Si un paramètre accepte une valeur de type ScriptBlock, il faut entourer le ScriptBlock d'une autre série d'accolades. Lorsque PowerShell évalue l'ScriptBlock externe , le résultat est l'ScriptBlock interne . Le ScriptBlock interne devient la nouvelle valeur de paramètre par défaut.

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

Ajouter des valeurs à une variable $PSDefaultParameterValues existante

Pour ajouter une valeur à $PSDefaultParameterValues, utilisez la méthode Add(). L’ajout d’une valeur n’affecte pas les valeurs existantes de la table de hachage. Utilisez une virgule (,) pour séparer la clé de la valeur .

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

La table de hachage créée dans l’exemple précédent est mise à jour avec une nouvelle paire clé-valeur.

PS> $PSDefaultParameterValues

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

Supprimer une valeur de $PSDefaultParameterValues

Pour supprimer une valeur de $PSDefaultParameterValues, utilisez la méthode Remove(). La suppression d’une valeur n’affecte pas les valeurs existantes de la table de hachage.

Cet exemple supprime la paire clé-valeur ajoutée dans l’exemple précédent.

PS> $PSDefaultParameterValues.Remove('Get-Process:Name')
PS> $PSDefaultParameterValues

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

Modifier une valeur dans $PSDefaultParameterValues

Utilisez l’indexation ou l’accès aux membres pour modifier la valeur par défaut d’une paire clé-valeur existante. Dans cet exemple, la valeur par défaut de la clé Send-MailMessage:SmtpServer est remplacée par une nouvelle valeur de ServerXYZ.

PS> $PSDefaultParameterValues['Send-MailMessage:SmtpServer']='ServerXYZ'
PS> $PSDefaultParameterValues

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

Désactiver ou réactiver $PSDefaultParameterValues

Vous pouvez désactiver temporairement, puis réactiver $PSDefaultParameterValues. $PSDefaultParameterValues La désactivation est utile si vous exécutez des scripts qui ont besoin de valeurs de paramètres par défaut différentes.

Pour désactiver $PSDefaultParameterValues, ajoutez une clé de Disabled avec la valeur $true. Les valeurs de $PSDefaultParameterValues sont conservées, mais ne sont pas utilisées.

PS> $PSDefaultParameterValues.Add('Disabled', $true)
PS> $PSDefaultParameterValues

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

Pour réactiver $PSDefaultParameterValues, supprimez la clé Disabled ou modifiez la valeur de la clé Disabled en $false.

PS> $PSDefaultParameterValues.Disabled = $false
PS> $PSDefaultParameterValues

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

Voir aussi