Sous Linux, je peux faire:
$ FOO=BAR ./myscript
pour appeler "myscript" avec la variable d'environnement FOO en cours de définition.
Quelque chose de similaire est-il possible dans PowerShell, c'est-à-dire sans avoir à définir d'abord la variable, à appeler la commande, puis à désactiver à nouveau la variable?
Pour être plus clair sur mon cas d'utilisation, je ne veux pas l'utiliser dans le cadre d'un script. Au contraire, j'ai un script tiers dont je peux contrôler le comportement à l'aide de variables d'environnement, mais, dans ce cas, pas d'arguments de ligne de commande. Donc pouvoir alterner entre la saisie
$ OPTION=1 ./myscript
et
$ ./myscript
serait juste très pratique.
windows
powershell
scripting
variables
environment
miracle2k
la source
la source
Réponses:
Généralement, il serait préférable de transmettre des informations au script via un paramètre plutôt qu'une variable globale (d'environnement). Mais si c'est ce que vous devez faire, vous pouvez le faire de cette façon:
La variable d'environnement $ env: FOO peut être supprimée plus tard comme ceci:
la source
env:foo
revenir à son ancienne valeur (peut-être non définie) au lieu de la supprimer?& {$pre = $env:foo; $env:foo = 'bar'; ./myscript; if ($pre) {$env:foo = $pre} else {Remove-Item env:\foo}
... certains diront peut-être difficile à manier , mais éviteront les effets secondaires ...J'ai été suffisamment motivé par ce problème pour que je me lance dans l' écriture d'un script: with-env.ps1
Usage:
D'un autre côté, si vous installez Gow, vous pouvez utiliser
env.exe
ce qui pourrait être un peu plus robuste que le script rapide que j'ai écrit ci-dessus.Usage:
la source
2 façons simples de le faire en une seule ligne:
Juste des informations résumées à partir d'autres réponses (merci à vous) qui ne contiennent pas de pure one-liners pour une raison quelconque.
la source
Pour accomplir l'équivalent de la syntaxe Unix, vous devez non seulement définir la variable d'environnement, mais vous devez la réinitialiser à sa valeur antérieure après avoir exécuté la commande. J'ai accompli cela pour les commandes courantes que j'utilise en ajoutant des fonctions similaires aux suivantes à mon profil PowerShell.
Il en
mycmd
va de même pour certains exécutables qui fonctionnent différemment selon la valeur de la variable d'environnementapp_master
. En définissantcmd_special
, je peux maintenant exécuter àcmd_special
partir de la ligne de commande (y compris d'autres paramètres) avec laapp_master
variable d'environnement définie ... et elle est réinitialisée (ou même non définie) après l'exécution de la commande.Vraisemblablement, vous pouvez également effectuer cette opération ad hoc pour une seule invocation.
Cela devrait vraiment être plus facile que cela, mais apparemment, ce n'est pas un cas d'utilisation facilement pris en charge par PowerShell. Peut-être qu'une version future (ou une fonction tierce) facilitera ce cas d'utilisation. Ce serait bien si PowerShell avait une applet de commande qui ferait cela, par exemple:
Peut-être qu'un gourou PowerShell peut suggérer comment écrire une telle applet de commande.
la source
Étant donné que CMD est l'interface de ligne de commande native sur le noyau Windows (et est toujours l'interface d'automatisation pour de nombreux outils), vous exécutez peut-être votre script PowerShell à
powershell.exe
partir de l'invite CMD ou d'une interface qui accepte les instructions de la console CMD.Si vous utilisez le
-File
paramètre pour transmettre votre scriptpowershell.exe
, aucun autre code PowerShell ne peut être utilisé pour définir une variable d'environnement à laquelle le script doit accéder.Vous pouvez donc définir vos variables d'environnement dans l'environnement CMD avant d'appelerpowershell.exe
:Un seul
&
fonctionnera également, mais permettra à la commande de continuer si elle aset
échoué pour une raison quelconque. (Est-ce même possible? Je n'en ai aucune idée.)En outre, il peut être plus sûr de placer des
"foo=bar"
guillemets afin que rien de ce qui suit ne soit transmisset
comme contenu de la variable.la source
https://gist.github.com/bobalob/6632690e33747c13a8c00875ee686be2
la source
Vous pouvez étendre des variables à des fonctions et des scripts.
New-Variable a également un paramètre -scope si vous voulez être formel et déclarer votre variable en utilisant new-variable.
la source