gpt4 book ai didi

xml - 在 PowerShell 中更改 XML 标记并保留内容。

转载 作者:行者123 更新时间:2023-12-02 23:31:26 28 4
gpt4 key购买 nike

我已使用 PowerShell 从 EventLog 导出数据,并创建了一个示例架构以将数据导入 SQL,但是使用 ConvertToXML 从 PowerShell 导出数据的方式存在问题。

XML 的导出看起来像这样;

<Property Name="Version">0</Property>

<Property Name="Qualifiers" />

<Property Name="Level">0</Property>

<Property Name="Task">14339</Property>

<Property Name="Opcode">0</Property>

<Property Name="Keywords">-9218868437227405312</Property>

<Property Name="RecordId">57963203</Property>

<Property Name="ProviderName">Microsoft-Windows-Security-Auditing</Property>

但它应该看起来像这样;
<Version>0</Version>

<Qualifiers> />

<Level>0</Level>

<Task>14339</Task>

下面的代码标识了属性名称版本和属性标签的开始和结束
并尝试将其更改为但不幸的是它更改了它而没有将内容保留在标签中。我似乎无法保持值(value)。
$EventLog = (Get-WinEvent -ComputerName xxxxxxx-FilterXML $Query) | ConvertTo-Xml -NoTypeInformation

$EventLogModify = (Get-Content P:\EventTracking\Events.xml) | foreach{$_ -replace '(<Property Name=""Version"">(.*?)</Property>)', "<Version></Version>" };Set-Content P:\EventTracking\Events.xml $EventLogModify;

最佳答案

你的问题在

-replace '(<Property Name=""Version"">(.*?)</Property>)', "<Version></Version>"

用空标签替换完整标签。我猜您想在替换中使用捕获的组:
-replace '(<Property Name=""Version"">(.*?)</Property>)', '<Version>$2</Version>'

此外,您之前可能在正则表达式上使用了双引号,因为有 ""在那里。这可能不会匹配任何内容,因为它现在连续查找两个双引号。

另一件事,您可能想一次全部替换,所以可能使用这个:
-replace '<Property Name="([^"]+)">([^<]+)</Property>', '<$1>$2</$1>'

然而,这还不够:
PS> $xml -replace '<Property Name="([^"]+)">([^<]+)</Property>', '<$1>$2</$1>'
<Version>0</Version>
<Property Name="Qualifiers" />
<Level>0</Level>
<Task>14339</Task>
<Opcode>0</Opcode>
<Keywords>-9218868437227405312</Keywords>
<RecordId>57963203</RecordId>
<ProviderName>Microsoft-Windows-Security-Auditing</ProviderName>

如您所见, Qualifiers仍然没有改变。所以另一个替换:
-replace '<Property Name="([^"]+)"\s*/>','<$1/>'

现在看起来好多了
PS> $xml -replace '<Property Name="([^"]+)">([^<]+)</Property>', '<$1>$2</$1>' -replace '<Property Name="([^"]+)"\s*/>','<$1/>'
<Version>0</Version>
<Qualifiers/>
<Level>0</Level>
<Task>14339</Task>
<Opcode>0</Opcode>
<Keywords>-9218868437227405312</Keywords>
<RecordId>57963203</RecordId>
<ProviderName>Microsoft-Windows-Security-Auditing</ProviderName>

关于xml - 在 PowerShell 中更改 XML 标记并保留内容。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517524/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com