L'appel de PowerShell du lot, et de la récupération de la nouvelle valeur de temporaire de la variable d'environnement définie dans le script?
J'espère que le titre est concis, mais juste au cas où:
Je vais appeler un script PowerShell à partir d'un fichier de commandes. Je veux que le script PowerShell pour définir la valeur d'une variable d'environnement, et pour que la nouvelle valeur soit disponible dans le fichier de commandes lorsque le script PowerShell finitions.
Je sais qu'il est possible de définir une variable d'environnement à l'aide de $env dans PowerShell, mais la valeur n'est pas conservé lors de la PowerShell script se termine. J'imagine que c'est probablement parce que PowerShell est exécuté dans un processus séparé.
Je suis conscient que je peux renvoyer un code de sortie et d'utiliser %ErrorLevel%, mais qui ne fera que me donner des chiffres, et il y aura un conflit, depuis le 1 indique une PowerShell exception plutôt qu'une utile.
Maintenant, voici la mise en garde: je ne veux pas la variable d'environnement à persister. C'est, je ne veux pas qu'il soit défini pour l'utilisateur ou le système, et donc je veux qu'il soit indisponible dès que le fichier de commandes issues de secours. En fin de compte, j'ai simplement envie de communiquer les résultats à partir d'un script PowerShell pour l'appelant fichier de commandes.
Est-ce possible?
Merci d'avance 🙂
Nick
OriginalL'auteur Nicholas Hill | 2010-08-05
Vous devez vous connecter pour publier un commentaire.
Pour obtenir de Keith idée d'utiliser le stdout de travail, vous pouvez appeler powershell à partir de votre script de commandes comme ceci:
Un peu maladroit, mais il fonctionne:
Si vous voulez plus de détails, vous pouvez les voir sur blogs.msdn.microsoft.com/oldnewthing/20120731-00/?p=7003
OriginalL'auteur zdan
Je sais que c'est un peu tard pour répondre à cette question, mais je voudrais lui donner un essai juste au cas où l'un quelconque des besoins plus détaillée de la solution. Donc, ici il va.
J'ai créé un batch fonction qui permettrait d'exécuter du ps script pour vous et vous retourner une valeur, quelque chose comme ceci:
Maintenant, comme un exemple pour l'utiliser:
Cela permet d'afficher sur l'écran de la console Vous l'avez
Comme un exemple plus compliqué, je voudrais ajouter:
Supposons que nous voulons vérifier si une machine virtuelle est en Haut ou en Bas, de sens que si elle est mise sous tension ou hors tension, de sorte que nous pouvons effectuer les opérations suivantes:
Maintenant, comment l'utiliser :CheckMachineUpOrDown fonction?
il suffit de suivre cet exemple:
Cette affiche si la machine virtuelle est sous tension ou lorsque la machine est à l'Arrêt.
Espère que cela est utile.
Grâce
OriginalL'auteur Akram Alhinnawi
La plus simple façon de capturer des résultats à partir de PowerShell est d'utiliser la sortie standard stdout dans PowerShell. Par exemple, il enregistre la date de la d env var en cmd.exe
Merci pour la réponse, mais je ne pense pas que le ci-dessus ne fonctionne? Ce que je voudrais attendre dans ce cas est que la valeur de la variable d'environnement " d "sera" powershell -noprofile "& { get-date }"'. C'est à dire: Le contenu de la partie droite de l'expression ne sont pas évalués.
vous êtes de droite. J'ai essayé de lui maintenant et il n'y a vraiment que chaîne de caractères stockée dans la variable.
Doh! Si seulement CMD ont été aussi directes que PowerShell. Bonne chose @zdan a obtenu le cmd.exe côté couverts, parce que la seule chose que j'ai jamais utilisé cmd.exe pour a runnning utilitaires de ligne de commande et d'autres fichiers batch. 🙂
une fois que vous obtenez les aléas de la "pour" commande vers le bas, CMD peut effectivement devenir utile (mais seulement si powershell n'est pas disponible).
OriginalL'auteur Keith Hill