wget не найден скриптом PowerShell? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть старый ноутбук с Windows 7, 64-разрядный, который отлично выполняет сценарий PowerShell каждое воскресенье.К сожалению, он начинает падать, как только увеличивается нагрузка, и я решил приобрести новый ПК.На этом компьютере я ранее установил Windows e; 10 Pro 64-bit, и даже здесь сценарий выполнялся каждое воскресенье.Из-за политики обновления Microsoft я удалил Windows 10 с нового ПК и установил Windows 7 64-bit.Но теперь тот же скрипт вылетает, так как не находит wget:

$wg = Start-Process wget.exe -wait -NoNewWindow -PassThru -ArgumentList $argList 

Gnu Wget установлен правильно (я думаю).Он размещается по адресу:

C:\Program Files (x86)\GnuWin32\bin\wget.exe

Он даже заносится в реестр в разделе HKEY_LOCAL_MACHINE → ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ → Wow6432Node → GnuWin32 | Wget | 1.11.4-1 | setup | InstallPath: C: \ Program Files(x86) \ GnuWin32 .

Но, несмотря на это, если я открою консоль CMD и введу wget (или wget.exe), я получу:

Порядок "wget "либо написан с ошибкой, либо не найден.

Что мне нужно сделать, чтобы PowerShell постоянно находил wget даже после перезагрузки ПК?Даже, например, Notepad ++ не может быть найден консолью CMD, несмотря на то, что он установлен правильно (?).Что здесь не так?

1 Ответ

0 голосов
/ 15 октября 2018

Если вы хотите иметь возможность запускать команду без указания ее пути, вам нужно добавить каталог, в котором она находится, в переменную среды PATH.Путь установки в ветви реестра ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ не имеет к этому никакого отношения.

Чтобы добавить каталог в PATH для текущего и всех будущих сеансов, необходимо выполнить что-то вроде этого:

$dir = "${env:ProgramFiles(x86)}\GnuWin32\bin"

# set PATH environment variable for current session
$env:Path += ";${dir}"

# set PATH environment variable for future sessions
$path = [Environment]::GetEnvironmentVariable('PATH', 'Machine')
$path += ";{$dir}"
[Environment]::SetEnvironmentVariable('PATH', $path, 'Machine')

Обратите внимание, однако, что второй шаг (установка переменной для будущих сеансов) работает правильно, только если в $path не используются переменные среды Windows (%something%), потому что метод сохраняет значение как REG_SZв реестре.Windows раскрывает переменные среды только в переменной PATH, если она хранится в виде значения REG_EXPAND_SZ.

Если у вас есть обычные переменные среды Windows где-то в $path, вы должны вручную записать значение в реестр с правильным типом.

$key = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
Set-ItemProperty -Path $key -Name 'Path' -Value $path -Type ExpandString

Приложение:

Все вышеперечисленное применимо, только если вы хотите сделать это программно, конечно.Для ручного подхода вы всегда можете отредактировать переменные среды через графический интерфейс и перезапустить PowerShell.

...