0

我正在尝试在 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" }

有什么建议么?

4

1 回答 1

1

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

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

$proxyexception = (Get-ItemProperty -path $regKey -name ProxyOverride -ErrorAction SilentlyContinue).ProxyOverride
于 2013-09-12T15:19:57.930 回答