私がこのXMLを持っているとしましょう:
<?xml version="1.0" encoding="utf-16"?>
<GPO xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.microsoft.com/GroupPolicy/Settings">
<Identifier>
<Identifier xmlns="http://www.microsoft.com/GroupPolicy/Types">{0afca021-554a-49cf-adab-2b6241895145}</Identifier>
</Identifier>
<Name>DefaultName</Name>
<IncludeComments>true</IncludeComments>
<CreatedTime>2012-08-08T18:20:05</CreatedTime>
<ModifiedTime>2018-09-05T20:23:59</ModifiedTime>
<ReadTime>2018-09-19T11:02:17.4750654Z</ReadTime>
</GPO>
PowerShellを使用して、CreatedTimeノードとModifiedTimeノードを削除するにはどうすればよいですか?
私を失望させているのは、GPO要素の名前空間の問題です。
これが私がこれまでに持っているものです:
[xml]$xml = Get-Content "C:\temp\x.xml"
$parent_xpath = '//GPO'
$nodes = $xml.SelectNodes($parent_xpath)
$nodes
$nodes | % {
$child_node = $_.SelectSingleNode('CreatedTime')
$_.RemoveChild($child_node) | Out-Null
}
$xml.Save("C:\temp\x-2.xml")
exit
親を呼び出し、各子ノードをループしてから、親ノードから削除できます。「Node.ChildNode.ChildNode」を使用して親を定義できます
あなたのためのクイック関数を書きました
function Remove-ChildNodes([xml]$FullXML, [string]$ParentNode, [string[]]$NodeNames){
return ($xml.$ParentNode.ChildNodes | ?{ $NodeNames -contains $_.Name }) | %{[void]$_.ParentNode.RemoveChild($_)}
}
そしてここに作業コピーがあります
[xml]$xml=@"
<?xml version="1.0" encoding="utf-16"?>
<GPO xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.microsoft.com/GroupPolicy/Settings">
<Identifier>
<Identifier xmlns="http://www.microsoft.com/GroupPolicy/Types">{0afca021-554a-49cf-adab-2b6241895145}</Identifier>
</Identifier>
<Name>DefaultName</Name>
<IncludeComments>true</IncludeComments>
<CreatedTime>2012-08-08T18:20:05</CreatedTime>
<ModifiedTime>2018-09-05T20:23:59</ModifiedTime>
<ReadTime>2018-09-19T11:02:17.4750654Z</ReadTime>
</GPO>
"@
function Remove-ChildNodes([xml]$FullXML, [string]$ParentNode, [string[]]$NodeNames){
return ($xml.$ParentNode.ChildNodes | ?{ $NodeNames -contains $_.Name }) | %{[void]$_.ParentNode.RemoveChild($_)}
}
Remove-ChildNodes -FullXML $xml -ParentNode "GPO" -NodeNames "CreatedTime","ModifiedTime"
$xml.InnerXml
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加