将XML连续导入PowerShell脚本

时间:2013-01-21 13:23:00

标签: xml powershell

我有一个项目来创建一个脚本来处理我们的Lync配置 - 尝试尽可能保持模块化。我认为这最好的方法是将每个脚本文件保存在自己的目录中,并使用自己的'scopedConfig'和amp;带有全局有用标签的'centralXML'。

我遇到的问题是尝试使用Get-content连续导入2个XML文件。

我拥有的代码是:

# Import CentralConfig
[xml]$centralXML = Get-content ".\centralConfig.xml"

# Import ScopedConfig
[xml]$scopedXML = Get-content ".\ExecutionResources\ScopedConfigfiles\HostConsole\config.xml"

测试成功导入以下内容:

"------------------"
"------------------"
$centralXML
"------------------"
$scopedXML
"------------------"
"------------------"

结果,问题在于输出:

------------------
------------------
Global_ConfigRoot
-----------------
Global_ConfigRoot
------------------

------------------
------------------

我期望两个XML的根节点都作为输出,而我只获得第一个的根节点。如果我交换它以便$ scopedXML是第一个 - 我只获得$ scopedXML根节点而没有来自$ centralXML。

有一点需要注意的是,如果我将第二个XML传递给Get-member - 你通常希望看到所有与XML相关的东西及其属性,那么我会得到一大堆空白:

------------------
------------------
Global_ConfigRoot
-----------------
Global_ConfigRoot
------------------














































------------------
------------------

我之前从未遇到过这个问题,有没有人有任何建议?

(PS尽我所能遵守发布规则,如果出现任何问题,请告诉我这是我第一次在这里发帖)

1 个答案:

答案 0 :(得分:0)

函数,cmdlet或脚本只能返回AN对象。你通过调用两个变量就像你一样返回多个变量,它实际上返回一个包含两个项目的object[]数组(+你打印的行)。对象不受影响,只是添加到此集合中。

现在,当您的脚本输出(显示)返回的对象时,它会将其格式化为表格,因为里面有多个对象。一个表只能包含1个头(列名),当显示数组时,它会从第一个项中获取列(属性),在本例中为$centralxml。这就是为什么你得到2列:xml和服务器。

如果你想分开它们,你必须告诉脚本在单独的表格中格式化它们。例如:

# Import CentralConfig
[xml]$centralXML = Get-content ".\test.xml"

# Import ScopedConfig
[xml]$scopedXML = Get-content ".\test2.xml"

$centralXML | Format-Table
$scopedXML | Format-Table