为什么我的powershell不能在控制台中获得任何输出,但在PowerShell的CLI模式下是否正常?

时间:2014-12-19 11:13:19

标签: powershell windows-7

我编写了一个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提供了一些建议,非常感谢你的帮助,但它仍然没有输出任何东西。 This is the result I run the script as admin, but still nothing follow Mathias's advice, still not work

Ansgar Wiechers&马蒂亚斯,非常感谢你的帮助,我仍然无法让它发挥作用。我怀疑它是由其他设置引起的,但我没有得到它的线程。

1 个答案:

答案 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]
}