我编写了一个power shell脚本来从regedit获取PATH值。 (我必须从regedit读取它的原因是myscript每次安装后都会检测到PATH值,环境PATH值在重新启动之前不会重新加载,所以我需要从regedit获取值,解析它并做一些操作。)
这是原始脚本,
function getEnv($type){
$retval = (Get-ItemProperty -Path "Registry::HKEY_CURRENT_USER\Environment" -Name $type -ErrorAction SilentlyContinue)
if (($retval -eq $null) -or ($retval.Length -eq 0))
{
return ""
}
else
{
return $retval.$type
}
}
getEnv $args[0]
问题是我在控制台中什么都没有,即使我在脚本中添加了一些“写主机”消息,看起来整个脚本都没有加载,但如果我在PowerShell中调用脚本它可以正常工作交互式控制台。
Ansgar Wiechers提供了一些建议,非常感谢你的帮助,但它仍然没有输出任何东西。
Ansgar Wiechers&马蒂亚斯,非常感谢你的帮助,我仍然无法让它发挥作用。我怀疑它是由其他设置引起的,但我没有得到它的线程。
答案 0 :(得分:1)
如果您需要一个脚本来回显给定用户环境变量的当前值,只需扩展相应的值应该可以正常工作:
Get-ItemProperty -Path HKCU:\Environment -Name $args[0] -EA SilentlyContinue |
select -Expand $args[0]
这将回显给定环境变量的值,如果变量不存在则不回显,或者在没有参数传递给脚本时回显HKCU:\Environment
的所有属性的列表。
演示:
C:\>echo %COMSPEC%
C:\Windows\system32\cmd.exe
C:\>powershell .\getenv.ps1 foo
C:\>powershell .\getenv.ps1 PATH
C:\bin;C:\apps\ant\bin;C:\Python33\bin
C:\>powershell .\getenv.ps1
DIRCMD : /o:gn
PATH : C:\bin;C:\apps\ant\bin;C:\Python33\bin
TEMP : C:\Users\foo\AppData\Local\Temp
TMP : C:\Users\foo\AppData\Local\Temp
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Environment
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
PSChildName : Environment
PSDrive : HKCU
PSProvider : Microsoft.PowerShell.Core\Registry
如果要在没有参数传递给脚本时禁止显示属性列表,请添加如下检查:
if ($args[0]) {
Get-ItemProperty -Path HKCU:\Environment -Name $args[0] -EA SilentlyContinue |
select -Expand $args[0]
}