Vous êtes en train de réinventer la roue. scripts normaux PowerShell ont des paramètres commençant par -
, comme script.ps1 -server http://devserver
Ensuite, vous les manipulez à la section param
au début du fichier (voir tutoriel: https://devcentral.f5.com/articles/powershell-abcs-p-is-for-parameters)
Vous pouvez également attribuer des valeurs par défaut à vos params, les lire de la console si non disponible ou arrêter l'exécution du script:
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $(Read-Host "Input password, please")
)
A l'intérieur du script, vous pouvez simplement
write-output $server
puisque tous les paramètres deviennent des variables disponibles dans la portée du script.
Dans cet exemple, la $server
obtient une valeur par défaut si le script est appelé sans elle, arrête script si vous ne spécifiez pas le paramètre -username
et demande d'entrée terminal si -password
est omis.
Mise à jour: Vous pourriez aussi bien passer un "flag" (un paramètre booléen true/false) à un script PowerShell. Par exemple, votre script peut accepter une "force" où le script s'exécute dans un mode plus prudent lorsque la force n'est pas utilisée.
Le mot-clé pour c'est le type de paramètre [switch]
:
param (
[string]$server = "http://defaultserver",
[string]$password = $(Read-Host "Input password, please"),
[switch]$force = $false
)
A l'intérieur du script travaillerait alors avec elle comme ceci:
if ($force) {
//deletes a file or does something "bad"
}
Maintenant, lorsque vous appelez le script que vous souhaitez définir la commutateur/indicateur paramètre comme ceci:
.\yourscript.ps1 -server "http://otherserver" -force
Si vous voulez explicitement st a mangé que le drapeau est pas défini, il y a une syntaxe spéciale pour que
.\yourscript.ps1 -server "http://otherserver" -force:$false
Liens vers la documentation Microsoft correspondante (pour PowerShell 5.0; les versions 3.0 et 4.0 sont également disponibles sur les liens):
AWESOME! Et marrant car à l'origine j'essayais d'utiliser param mais je m'en éloignais car je n'arrivais pas à comprendre la syntaxe. Lol merci! –
En effet, l'un des grands avantages de PowerShell est qu'il fournit un paramètre standard d'analyse d'infrastructure facile à utiliser. –
Vous avez "-site" dans l'exemple de ligne de commande et il ne correspond pas "[string] $ server" dans le script Est-ce une faute de frappe? – JasDev