hashtable包含$ null值

时间:2017-01-09 17:15:22

标签: xml powershell hashtable

我不理解某事。我有一个哈希表,其中包含外部实用程序的位置

$ExtUtilities = @{}

然后我将它们从XML文档添加到哈希表中

$ExtUtilities.essclient = $XmlDoc.config.local.setup.external.utility.essclient
$ExtUtilities.lcm       = $XmlDoc.config.local.setup.external.utility.lcm
$ExtUtilities.sqlclient = $XmlDoc.config.local.setup.external.utility.sqlclient
$ExtUtilities.oraexport = $XmlDoc.config.local.setup.external.utility.oraexport

一切都很好,但我注意到每个条目的表格中都有$ null,我不知道它们来自哪里

Name                           Value
----                           -----
sqlclient                      {$null, $null, C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe, $null}
oraexport                      {$null, $null, $null, C:\app\client\epmadmin\product\12.1.0\client_1\BIN\exp.exe}
essclient                      {$null, C:\Oracle\Middleware\EPMSystem11R1\products\Essbase\EssbaseClient\bin\startMaxl.cmd, $null, $null}
lcm                            {C:\Oracle\Middleware\user_projects\Foundation1\bin\Utility.bat, $null, $null, $null}

由于CMD interpriter不喜欢具有前导$null s的命令,$null正在弄乱我运行这些命令。

任何人都可以解释为什么会有$null

1 个答案:

答案 0 :(得分:3)

如果没有看到原始XML,很难说,但可能是因为有多个匹配元素; $XmlDoc.config.local.等的结果可能会返回一个数组,其中一些值为$null

在执行作业时,您应该可以将其过滤掉,如下所示:

$ExtUtilities.essclient = $XmlDoc.config.local.setup.external.utility.essclient | 
    Where-Object -FilterScript { $_ }

这只会将解析为$true的对象分配。

如果你真的不想要一个数组,那么也只得到第一个:

$ExtUtilities.essclient = $XmlDoc.config.local.setup.external.utility.essclient | 
    Where-Object -FilterScript { $_ } |
    Select-Object -First 1