安装后使用PATH中的exe

时间:2018-01-16 13:12:57

标签: powershell

我正在编写一个试图安装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的名称,函数,   脚本文件或可操作程序。检查名称的拼写,或   如果包含路径,请验证路径是否正确,然后重试。

怎么做?

enter image description here enter image description here

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

1 个答案:

答案 0 :(得分:1)

您的问题是由[Environment]::SetEnvironmentVariable()%ProgramFiles%的组合引起的。 SetEnvironmentVariable()方法将相应的注册表值写为REG_SZ,这意味着当使用该变量时,该字符串中的环境变量(如%ProgramFiles%)不会被扩展。

如果您想继续使用%ProgramFiles%将注册表值写为REG_EXPAND_SZ:

$regkey = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
Set-ItemProperty -Path $regkey -Name 'Path' -Value "${env:Path};${envPath}" -Type ExpandString

否则使用$env:ProgramFiles代替%ProgramFiles%,以便使用已展开的路径编写变量:

$envPath = "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v$VERSION\bin;$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v$VERSION\libnvvp";
[Environment]::SetEnvironmentVariable("Path", "${env:Path};${envPath}", [EnvironmentVariableTarget]::Machine)