我不理解某事。我有一个哈希表,其中包含外部实用程序的位置
$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
?
答案 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