Travailler avec les paramètres dans un script ou une fonction Powershell
Salut !
L’utilisation des paramètres avancés dans un script ou une fonction powershell permet de faire tout un tas de choses très pratiques, validation, délimitation des valeurs possibles, définition du type de variable, etc…
Tout d’abord un exemple non exhaustif des types de variables que l’on peut définir. Elles permettent le contrôle des informations qui vont être passées au script. Très importants, ces différents types peuvent être:
- [int] – 32-bit signed integer
- [long] – 64-bit signed integer
- [string] – Une chaine de caractères unicode
- [char] – Un caractère unicode sur 16 bit
- [byte] – Un caracètre 8 bit non signé
- [bool] – Un booléen (True ou False)
- [decimal] – Une valeur décimale de 128 bit
- [single] – Une valeur décimale avec 1 chiffre après la virgule
- [double] – Une valeur décimale avec 2 chiffres après la virgule
- [xml] – Un Objet XML
- [array] – Un tableau
- [hashtable] – Un Hashtable
Voici comment préciser le type de variable attendu.
param([String]$text,[Int]$id,[Xml]$xml_object)
On peut aussi préciser si un paramètre est obligatoire ou pas (on passe $true ou $false)
Parameter(Mandatory=$false)]
Il est aussi possible de limiter les valeurs devant être saisies dans un paramètre avec
[ValidateSet("Text1","Text2")]
On peut aussi valider qu’un paramètre doive être compris entre telle et telle valeur
[ValidateRange(1,5)]
On peut aussi valider l’éxécution d’un chemin, d’un fichier, d’une valeur de registre, etc… en validant l’exécution d’un script
[ValidateScript({Test-Path $var -PathType 'Container'})]
Il est aussi possible de passer des arguments à travers le pipe grâce à la ligne ci dessous que l’on peut aussi associé à une position définie dans la liste des paramètres.
[Parameter(Position=0,Mandatory=$false,ValueFromPipeline=$true)]
Cela va permettre de passer le paramètre qui aura la position 0 avant le pipe et de le passer en argument.
Ensuite, pour continuer dans l’utilisation des paramètres, il est possible d’assigner des alias (si comme moi vous aimez les codes compacts) cela vous permettra de faire comme avec les cmdlets intégrés à powershell.
[alias('cn','computer', 'ComputerName')]
En mettant tout bout à bout, on pourrait obtenir quelque chose de ce genre:
param( [Parameter(Position=0,Mandatory=$false,ValueFromPipeline=$true)] [alias('cn','computer', 'ComputerName')] [ValidateSet("PC1","PC2","PC3")] [String]$computer, [Parameter(Mandatory=$true)] [ValidateRange(1,3)] [Int]$id, [Parameter(Mandatory=$true)] [ValidateScript({Test-Path $_ })] [Xml]$xml_object )
En espérant que ces quelques astuces vont ou pourront vous aider.
Pour avoir plus d’informations sur les parametres vous pouvez utiliser la commande ci dessous, elle vous pemettra non seulement de voir comment fonctionne les parametres mais d’en découvrir un peu plus. Rapellez vous la curiosité est la meilleure des qualités !
get-help about_parameters
Salut,
>>Tout d’abord les types de variables que l’on peut définir.
Dans ton exemple, il s’agit de raccourcis de type. Ta formulation laisse supposer que seul ceux listés sont autorisés…
Tiens un sujet de post : La création de raccourcis sous Powershell 😉
Tu as raison Laurent, j’ai modifié !
Merci pour l’idée de post, du coup je l’ai même crée 😉
Je pensais au raccourcis de type ( ou alias de type ) sous Powershell v2, un exemple :
#Ce type n’est pas public, mais certaines de ses méthodes le sont.
#On doit donc obtenir une référence sur ce type, car l’usage suivant ne fonctionne pas
#[System.Management.Automation.TypeAccelerators]::Add
$acceleratorsType= [psobject].assembly.gettype(“System.Management.Automation.TypeAccelerators”)
# Ajoute un accélérateur locale pour la classe d’exception
$ValidationsArgumentsShortCut=@{“VMException”=[System.Management.Automation.ValidationMetadataException]}
$ValidationsArgumentsShortCut.GetEnumerator()|
Foreach {
Try {
Write-debug “Add TypeAccelerators $($_.Key) =$($_.Value)”
$AcceleratorsType::Add($_.Key,$_.Value)
} Catch [System.Management.Automation.MethodInvocationException]{
write-Error $_.Exception.Message
}
}
Qui permet, entre autre, ceci :
throw (new-object VMException “Message Validation erronée”
L’appel [psobject].assembly.gettype est compatible avec la version 3 de PS
Forcément, rien à voir avec ce que j’ai mis dans l’article sur la création de raccourcis 😀
Sinon je vois mieux de quels raccourcis tu parlais, exemple System.Management.Automation.ScriptBlock et son raccourcis (alias) qui est [scriptblock].
ça va demander un peu plus de réflexion que les raccourcis Windows classiques 😉
Mais je vais préparer un article dessus !
>>ça va demander un peu plus de réflexion que les raccourcis Windows classiques
“On a rien sans rien” 😉