Есть ли способ вызвать внешний скрипт без наследования переменных среды в PowerShell? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть скрипт, который определяет некоторые переменные окружения.Я хочу вызвать внешний скрипт, но он конфликтует с переменными среды, которые я определяю.Как указано в официальной документации: переменные среды и их значения наследуются дочерними сеансами.Поэтому мой вопрос: есть ли способ вызвать внешний скрипт без наследования переменных среды, которые я определил?

Я вызываю внешний скрипт таким образом:

& { cmd /c "<path_to_scrip>\MySuperScript.cmd" } *>&1 | Write-Log

1 Ответ

0 голосов
/ 10 мая 2019

Вы сказали, что читали документы по переменным среды. Вы читали документы scope ? Это должно дать вам понимание, которое вы ищете. См. Также , В тот момент, когда вы выполняете оболочку другой программе, этот exe / shell контролирует и использует то, о чем знает.

Если вы создаете системные переменные среды, то они доступны для системы, а не только для ваших сценариев. Обходных путей для этого нет.

Необычный подход, и я не проверял его (поскольку я никогда не использовал этот вариант использования, который требовал этого), заключается в использовании переменных среды пользователя или процесса ,

$CurrentDate = Get-Date -format yyyyMMdd
[Environment]::SetEnvironmentVariable("CYCLEDATEB", $CurrentDate, "User")

$CurrentDate = Get-Date -format yyyyMMdd
[Environment]::SetEnvironmentVariable("CYCLEDATEB", $CurrentDate, "Process")

тогда, конечно, они доступны только для этого пользователя. Любой дочерний процесс, который является другим пользователем, конечно, не увидит их, но для этого вам придется переустановить логику и путь кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...