通过PowerShell编写和读取XML配置

时间:2015-12-14 11:41:43

标签: xml powershell serialization xml-parsing

我正在努力使用PowerShell阅读XML文件。

主要思想是 - 我有一个标志,表示是否读取或写入配置文件。如果需要编写文件 - 脚本将获取参数并将其保存到XML文件中。如果该标志设置为“read” - PowerShell脚本不带参数,但它应该从保存的XML中获取它们。

问题是从XML读取。 我使用代码写入XML:

$Config = @{}
$Config.parameter1 = $parameterValue
$Config.dictionaryWithArray = $dictWithArray
($Config | ConvertTo-XML).Save("$path")

保存的XML文件结果为:

<?xml version="1.0"?>
<Objects>
  <Object Type="System.Collections.Hashtable">
    <Property Name="Key" Type="System.String">parameter1</Property>
    <Property Name="Value" Type="System.String">value_in_variable_parameter_Value</Property>
    <Property Name="Key" Type="System.String">dictionaryWithArray</Property>
    <Property Name="Value" Type="System.Collections.Generic.Dictionary`2[System.String,System.String[]]">
      <Property Name="Key" Type="System.String">key1</Property>
      <Property Name="Value" Type="System.String[]">
        <Property Type="System.String">subkey1</Property>
        <Property Type="System.String">subvalue1</Property>
      </Property>
      <Property Name="Key" Type="System.String">key2</Property>
      <Property Name="Value" Type="System.String[]">
        <Property Type="System.String">subkey2</Property>
        <Property Type="System.String">subvalue2</Property>
      </Property>
... and so on

我尝试使用http://blogs.technet.com/b/heyscriptingguy/archive/2012/09/13/powertip-use-powershell-to-easily-read-an-xml-document.aspx之类的方法阅读此配置,但没有运气。

请告诉我们如何阅读这种方法编写的配置文件?或者可能有更好的方法在写入之前序列化配置,所以它会更容易阅读吗?

1 个答案:

答案 0 :(得分:5)

有很多方法可以使用XML来完成此操作,但您可能已阅读过的大多数博客都不会从XML中读取自定义/嵌套对象。虽然我确信存在解决方案,但我个人并不知道如何做到这一点。

  

或者可能有更好的方法在编写之前序列化配置

这就是我想要关注的答案。您可以使用Export-CliXml及其对应的Import-CliXml。这些cmdlet应该更容易为您完成工作。

#.... your other code that generates $config
$Config | Export-Clixml $path

然后您可以根据需要调用配置并检查您将数据写入文件之前的值。

$fileConfig = Import-Clixml $path
$fileConfig.parameter1

警惕对象的复杂程度,因为您可能需要使用Export-CliXml-Depth

  

-depth

     

指定XML表示中包含多少级别的包含对象。 默认值为2