Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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é (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
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
$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