Member 14156312 Ответов: 1

Как Выполнить cmd-файл в скрипте powershell?


Я хочу установить переменную окружения автоматически, не выполняя сначала cmd, а затем Эхо среды, чтобы показать значение переменной окружения.

Я попробовал этот код, я храню значение в виде файла cmd, который я хочу установить в качестве переменной среды. Если я хочу показать значение среды, я должен сначала выполнить файл cmd.

Что я уже пробовал:

Param(
    [Parameter(Mandatory)] [string] $FilePath,
    [Parameter(Mandatory)] [string] $Key,
    [Parameter(Mandatory)] [string] $Variable_Name,
    [Parameter(Mandatory)] [string] $Store
)

$Found = $False
$FileContents = switch -File $FilePath {
    $Key    { $Found = $True }
    default {
        if ($Found) {
            $_.Substring(1);
            break
        }
    }
}
$FileContents

$Path_Store = $Store
$Output = "set" + " " + $Variable_Name + "=" + $FileContents |
          Out-File $Path_Store\$Variable_Name.cmd -Encoding Ascii




Мое ожидание, как только я выполню сценарий PowerShell, я смогу непосредственно показать переменную среды

1 Ответов

Рейтинг:
0

Josef Zdráhal

Что плохого в изменении переменных окружения с помощью Окружающая среда провайдер вроде

$env:variableName = <variableValue> ?
(видеть в разделе about_environment_variables - по PowerShell | Майкрософт документы[^]: При изменении переменных среды в PowerShell это изменение затрагивает только текущий сеанс. Это поведение напоминает поведение команды Set в средах под управлением Windows и команды Setenv в средах под управлением UNIX.)

Если имя переменной хранится в переменной Powershell, можно использовать методы класса System.Environment (см. Класс Среды (System) | Microsoft Docs[^]) сделать что-то вроде
$Variable_Name = variableName;
[System.Environment]::SetEnvironmentVariable( $Variable_Name, <variableValue>);

В обоих случаях <variablevalue> это может быть Литеральная строка Powershell например "некоторые пути", или строковая переменная, например $FileContents.