尝试从Registry获取数据时输出奇怪

时间:2014-07-02 13:34:09

标签: powershell

我有一个启动脚本,使用以下代码从注册表中捕获IP地址:

$icaaddr=(Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Citrix\XTEConfig" -Name "DefaultICAAddress")
[Net.IPAddress]$icaaddr=$icaaddr.DefaultICAAddress

稍后在该脚本中,IP用于不同的事情,并将其添加到“消息”输出中

$message+="ICA address found to be: $icaaddr `n"

但是今天在一台服务器而不是IP上捕获了以下内容。

ICA address found to be: @{DefaultICAAddress=; PSPath=Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\XTEConfig; PSParentPath=Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix; PSChildName=XTEConfig; PSDrive=HKLM; PSProvider=Microsoft.PowerShell.Core\Registry}

所以我的问题是2

  1. 导致此类输出的原因
  2. 我怎样才能测试这个'状态'
  3. 长话短说,当ouptut就像我需要重新启动服务器一样。如何测试$ icaaddr变量包含有效的IP地址

1 个答案:

答案 0 :(得分:0)

您需要更改此行:

$icaaddr=(Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Citrix\XTEConfig" -Name "DefaultICAAddress")

为:

$icaaddr=(Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Citrix\XTEConfig" -Name "DefaultICAAddress").DefaultICAAddress

或(这种方式更具可读性IMO):

$icaaddr = Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Citrix\XTEConfig" `
    -Name "DefaultICAAddress" | Select-Object -ExpandProperty "DefaultICAAddress"

因为Get-ItemProperty返回一个对象而你需要一个属性。

但请注意,在您的示例中DefaultICAAddress似乎是空的,并且尝试将其强制转换为[Net.IPAddress]可能会引发异常。为避免这种情况,您应该check if the value is a valid IP address