0

这里有点 PowerShell 新手,所以请善待。我正在创建一个 PS 脚本,它可以帮助我记录我的环境。我要做的是获取对象所有属性的名称,并使用属性名称和相应的值填充 XML 文档。例如:

PS C:\> $stuff = Get-SomeStuff
PS C:\> $stuff
Name: foo
Version: 1.0

输出 XML 如下所示:

<rootNode>
    <stuff>
        <Name>foo</Name>
        <Version>1.0</Version>
    </stuff>
</rootNode>

本质上,我想在检索对象属性时使用 $stuff 属性名称来替换属性。本质上,我需要用提取的名称动态替换属性名称。我的代码如下所示:

$stuff = Get-SomeStuff
CreateXML $rootnode,"stuff",$stuff

Function CreateXML ($rootNode, $nodeName, $category){
    $subRootNode = $xml.CreateElement($nodeName)
    $catProps = $stuff | Get-Member -MemberType Property | Select -ExpandProperty Name
    foreach ($prop in $catProps){
        $newNode = $xml.CreateElement($prop)
        $newNode.Text = $category.{$prop} #--- THIS IS THE LINE CAUSING PROBLEMS
        $subRootNode.AppendChild($newNode)
    }
$rootNode.AppendChild($subRootNode)
}

非常感谢任何帮助,因为我必须跨多个节点捕获数千个属性。

4

1 回答 1

2

试试这个方法:

[xml]$xml = '<rootNode></rootNode>'    

$stuff | foreach {

    $node = $xml.CreateElement('stuff')

    $_.psobject.properties | foreach{
        $prop = $xml.CreateElement($_.Name)
        $prop.InnerText = $_.value
        $node.AppendChild($prop)
    }

    $xml.DocumentElement.AppendChild($node)   

}

$xml
于 2013-05-31T17:49:34.760 回答