【发布时间】:2018-06-25 05:06:14
【问题描述】:
我正在编写一个试图安装 CUDA 并设置环境变量的脚本。因此,它还应该检查 CUDA 是否安装成功。作为这项检查,我运行nvcc -V 来获取编译器版本。不幸的是,由于某种原因,在我打开另一个 shell 窗口之前它不起作用。但我强烈需要这种行为,因为我必须在同一会话中实际运行 nvcc。
这是我的脚本:
param([Parameter(mandatory=$true)][string] $FileName)
$VERSION = "9.1"
$argumentList = "-s nvcc_$VERSION cublas_$VERSION cublas_dev_$VERSION cufft_$VERSION cufft_dev_$VERSION npp_$VERSION npp_dev_$VERSION"
$envPath = ";%ProgramFiles%\NVIDIA GPU Computing Toolkit\CUDA\v$VERSION\bin;%ProgramFiles%\NVIDIA GPU Computing Toolkit\CUDA\v$VERSION\libnvvp";
Write-Host "Install CUDA from $FileName with argumentList $argumentList"
Start-Process -FilePath $FileName -ArgumentList $argumentList -Wait
#adding CUDA to PATH
[Environment]::SetEnvironmentVariable("Path", $env:Path + $envPath, [EnvironmentVariableTarget]::Machine)
#updating PATH for current session
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
#trying to run something
nvcc -V
但是显示错误
术语“nvcc”未被识别为 cmdlet、函数的名称, 脚本文件或可运行的程序。检查名称的拼写,或 如果包含路径,请验证路径是否正确并重试。
怎么做?
PS C:\Users\SOLO> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.16299.98
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.16299.98
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
【问题讨论】:
-
这个post 重新加载了
("Path", "Machine")的路径和("Path", "User")- 这有帮助吗? -
提供的代码做同样的事情。
-
$env:Path + $envPath->"${env:Path};${envPath}" -
PowerShell ISE 是实际脚本中不会发生的问题的丰富来源。为完整起见,请在 PowerShell 窗口中使用
.ps1中的脚本再次尝试。调整$env:path在我的 PS 5.1 窗口中工作。 -
@JeroenMostert 问题不在于
%ProgramFiles%本身,而是SetEnvironmentVariable()将注册表值写入为 REG_SZ(即使之前是 REG_EXPAND_SZ)。 Windows 仅为 REG_EXPAND_SZ 值扩展注册表值中的%-变量。
标签: powershell