powershell条件IsNullorEmpty无法按计划运行

时间:2013-09-12 14:21:38

标签: powershell

我正在尝试在Powershell中编写一个条件语句,用于测试注册表值名称中是否存在数据。我已将以下路径声明为变量。 HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings

我还使用 Get-ItemProperty cmdlet 为注册表名称本身声明一个变量(即 ProxyOverride )。当我写条件语句时,我正在使用:

[string]::IsNullorEmpty($proxyoverridevariable)

当条件语句运行时,它总是报告注册表值ProxyOverride不是Null或Empty,即使我知道它是。

到目前为止我所知道的是,如果我从注册表中删除 ProxyOverride ,则条件语句可以正常工作。如果数据字段为空,我希望它能工作。

$regKey="HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

$proxyoverride = "localhost;127.0.0.1"

$proxyexception = Get-ItemProperty -path $regKey -name ProxyOverride -ErrorAction SilentlyContinue

if ([string]::IsNullorEmpty($proxyexception)) { Set-ItemProperty -Path $regKey -name ProxyOverride -value $proxyoverride }

else { write-host "Value not empty" }

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为这是因为价值存在。如果它是空的,PowerShell会返回它以及其他一些与提供者相关的属性(例如PSPath等)等等,这就是为什么IsNullorEmpty报告始终为False的原因。如果该值不存在,则不返回所有其他属性,并且您将获得预期的结果。

这是一种解决方法,查询值本身,然后检查它是否为空或为空:

$proxyexception = (Get-ItemProperty -path $regKey -name ProxyOverride -ErrorAction SilentlyContinue).ProxyOverride