J'ai ce il demande mes paramètres comme je le souhaite, mais ne transmet pas les paramètres, mais il les définit tout simplement sur "Oui". Sont des paramètres inhérents? Comment dois-je définir cela de sorte qu'il s'arrête à chaque instruction IF, vérifie le paramètre et fait l'une des deux actions, oui / non, puis passe sur la prochaine instruction si elle est p> p>
4 Réponses :
La comparaison dans PowerShell est effectuée à l'aide de Aussi, ne faites pas de paramètres -eq code>, pas = code>. p>
oui code> et non code>. Il y a déjà un type intégré à l'abri des typos: bool code>. $ true code> et $ false code> est ce que vous êtes après p>
Question à ce sujet, faites un réglage de la validateet sur [validateetet (bool)] ou de le laisser vide pour sélectionner BOOL?
Vous n'avez pas besoin validateet code> du tout. Il n'y a que deux valeurs possibles.
Oui, une déclaration d'affectation peut être une expression. De temps en temps utile, mais déroutant. Tout résultat non nulle sera vrai.
if ($a = 'yes') {'yes'}
yes
if ($a = 'no') {'yes'}
yes
if ($a = '') {'yes'}
# nothing
Comme d'autres les ont dit, le type BOOL est conçu pour ce type de chose. Comme ils ne sont que vrais ou faux, vous n'avez pas à inclure des déclarations d'égalité, ce qui rend le code beaucoup plus lisible. Au lieu de
Param(
[Parameter(Mandatory=$true)]
[bool]$ContinueSetup,
[Parameter(Mandatory=$true)]
[bool]$InstallDropbox = 'Yes',
[Parameter(Mandatory=$true)]
[bool]$InstallSlack,
[Parameter(Mandatory=$true)]
[bool]$InstallOffice
)
if ($ContinueSetup){
if ($InstallDropbox){
write-host 'install dropbox'
}
else{
write-host 'dropbox not selected'
}
if ($InstallSlack){
write-host 'install slack'
}
else {
write-host 'slack not selected'
}
if ($InstallOffice){
write-host 'install office'
}
else {
write-host 'Office not selected'
}
}
else{
write-host 'no setup'
break
}
Je recommanderais également d'utiliser [commutateur] code> au lieu de [bool] code> pour vos types de paramètres et non spécifiant $ vrai code> comme défaut . SwitchParameter Code> Les paramètres facilitent l'invocation plus simple et plus simple. NoDropboxInstall: True
NoSlackInstall: False
NoOfficeInstall: False
Veuillez ajouter votre entrée, votre sortie et votre sortie attendue. Je ne l'ai pas eu.
Sortie:
PS C: \ Windows \ System32> F: \ bla bla bla.ps1 cmdlet bla bla bla.ps1 Position de pipeline de commande 1 Valeurs d'alimentation pour les paramètres suivants: Continueutup: Oui InstallDropBox: Non InstallSlack: Oui InstallationOffice: Oui InstallationOffice: Non Installation Dropbox Installer Slack Install Office Code> Sortie attendue:PS C: \ Windows \ System32> F: \ bla bla blah.ps1 cmdlet bla bla bla.ps1 à commande PIGNELINE POSITION 1 Valeurs d'alimentation pour les paramètres suivants : Continueutup: Oui InstallDropbox: Non InstallSlack: Oui InstallationOffice: Non Dropbox non sélectionné InstallSlack Office non sélectionné code>La comparaison dans PowerShell est effectuée en utilisant
-eq code>, pas= code>. Ne faites pas de paramètresoui code> etnon code>. Il y a déjà un type intégré à l'abri des typos:bool code>.$ true code> et$ false code> est ce que vous êtes après.Wow duh! Merci à Ton Daniel, je vais passer à $ vrai $ faux et remplacer = avec -eq. L'a fait dans le premier, juste l'a oublié sur les autres :)