我有一个由WinServer 2019生成的XML文件(GPO导出)。我希望创建对子项目的引用,该子项目包含AD组的名称:
<q1:UserRightsAssignment>
<q1:Name>SeNetworkLogonRight</q1:Name>
<q1:Member>
<SID xmlns="http://www.microsoft.com/GroupPolicy/Types">S-1-5-9</SID>
<Name xmlns="http://www.microsoft.com/GroupPolicy/Types">NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS</Name>
</q1:Member>
命令,我试着:
[xml]$GpoXml = Get-GPOReport -name $param1 -ReportType Xml
$Object3 = foreach ($p in $GpoXml.GPO.Computer.ExtensionData.Extension.UserRightsAssignment) {
if ($p.Name -ne $null) {
[PSCustomObject]@{
"Name" = $p.Name
"Value" = $p.Member.Name
}
}
}
对于$p. $Name,我得到了"SeNetworkLogonRight"作为Name,但是对于Value,我得到了"System.Object []"答案。为什么会这样?我应该如何创建一个引用来获取Member/Name项的值?
非常感谢!
更新:
完整块:
> <q1:UserRightsAssignment>
> <q1:Name>SeNetworkLogonRight</q1:Name>
> <q1:Member>
> <SID xmlns="http://www.microsoft.com/GroupPolicy/Types">S-1-5-9</SID>
> <Name xmlns="http://www.microsoft.com/GroupPolicy/Types">NT
> AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS</Name>
> </q1:Member>
> <q1:Member>
> <SID xmlns="http://www.microsoft.com/GroupPolicy/Types">S-1-5-11</SID>
> <Name xmlns="http://www.microsoft.com/GroupPolicy/Types">NT
> AUTHORITY\Authenticated Users</Name>
> </q1:Member>
> <q1:Member>
> <SID xmlns="http://www.microsoft.com/GroupPolicy/Types">S-1-5-32-544</SID>
> <Name xmlns="http://www.microsoft.com/GroupPolicy/Types">BUILTIN\Administrators</Name>
> </q1:Member>
> <q1:Member>
> <Name xmlns="http://www.microsoft.com/GroupPolicy/Types">Admin</Name>
> </q1:Member>
> </q1:UserRightsAssignment>
1条答案
按热度按时间li9yvcax1#
您有 * 多个 *
<Member>
子元素,这会导致PowerShell将它们作为 * 数组 *([object[]
(System.Object[]
)类型)返回。访问此数组的
.Name
属性(由于PowerShell的member-access enumeration),然后返回<Name>
孙元素的数组(跨所有<Member>
元素)。还要注意,在这种情况下,必须访问
.Name
的.InnerText
属性才能只获取元素的 * text *(因为元素也有 * attributes *)。您需要:
[pscsustomobject]
示例 *。[pscustomobject]
,并且希望成员名称的 * 数组 * 用 * string * 表示,以便可以将对象导出到CSV文件,则需要对数组进行 * 自定义字符串化 *;在此示例中,/
用作分隔符: