0
votes

PowerShell ne transmet pas le paramètre à la déclaration

J'ai ce xxx

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


4 commentaires

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 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é


La comparaison dans PowerShell est effectuée en utilisant -eq , pas = . Ne faites pas de paramètres oui et non . Il y a déjà un type intégré à l'abri des typos: bool . $ true et $ false 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 :)


4 Réponses :


1
votes

La comparaison dans PowerShell est effectuée à l'aide de -eq , pas = .

Aussi, ne faites pas de paramètres oui et non . Il y a déjà un type intégré à l'abri des typos: bool . $ true et $ false est ce que vous êtes après


2 commentaires

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 du tout. Il n'y a que deux valeurs possibles.



-1
votes

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


0 commentaires

1
votes

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
}


0 commentaires

1
votes

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


0 commentaires