我有一台旧的笔记本电脑,带有Windows 7 64位,可以在每个星期日完美地执行PowerShell脚本。不幸的是,一旦负载增加,它就会开始崩溃,我决定购买一台新PC。我以前在这台PC上安装了64位Windows 10 Pro;即使在这里,脚本也是每个星期日执行的。由于Microsoft的更新政策,我从新PC上删除了Windows 10并安装了Windows 7 64位。但是现在,相同的脚本崩溃了,因为找不到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 下输入注册表。 / p>
但是尽管如此,如果我打开CMD控制台并输入wget
(或wget.exe
),我会得到:
“ wget”命令拼写错误或找不到。
即使重启PC,PowerShell仍会不断发现wget
,我该怎么做?甚至尽管已正确安装(CM),但CMD控制台无法找到Notepad ++。怎么了?
答案 0 :(得分:3)
如果希望能够在不指定命令路径的情况下运行命令,则需要将其驻留的目录添加到PATH环境变量中。注册表的SOFTWARE分支中的安装路径与此无关。
要将当前和所有以后会话的目录添加到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')
但是请注意,第二步(为将来的会话设置变量)仅在%something%
中没有使用Windows环境变量($path
)的情况下才能正确运行,因为该方法会保存该值作为注册表中的REG_SZ。如果Windows环境变量存储为REG_EXPAND_SZ值,则Windows仅在环境变量中扩展环境变量。
如果在$path
中确实有常规Windows环境变量,则必须使用正确的类型将值手动写入注册表。
$key = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
Set-ItemProperty -Path $key -Name 'Path' -Value $path -Type ExpandString
附录:
当然,仅当您要以编程方式执行上述操作时,上述所有条件才适用。对于手动方法,您始终可以通过GUI编辑环境变量,然后重新启动PowerShell。