使用具有日期比较的 PowerShell 解析 XML

Parsing XML with PowerShell with date comparison

你能帮我调试我的代码吗?

我正在使用 Powershell 脚本从一个文件夹中解析大量 XML 文件并创建监控报告,以查看谁在修改 XML 以及何时修改。 所以,当我尝试比较 XML 文件的修改日期和今天的日期 ($filterDate) 时,问题就来了。

最初我有一个包含 XML 个文件的文件夹,我需要从这些文件中获取修改日期、用户和文件名。我添加了 XML 代码示例。

现在,带有 Where-Object {$_.TimeModified.Date -GE $filterDate} 的部分不适用于 -GE,但如果我尝试将其放入 -LE,它会显示所有文件的输出。

示例XML

<ModullarRule schema="3.2" id="2132135e" entrypoint="12321321321313ce2" design="118;51">
    <Name>AnyShit2Queue</Name>
    <Description/>
    <Comments/>
    <RuleAudit stamp="2132131237" version="0.SS@TEST.3">
        <SrvModified date="2018.11.29 09:35:11" user="User1"/>
        <XmlModified date="2017.12.05 17:13:49" user="User2"/>
        <SrvCreated date="2017.12.05 10:07:36" user="User2"/>
        <XmlCreated date="2017.12.05 10:07:36" user="User2"/>
    </RuleAudit>
</ModullarRule>

我正在尝试从 XML 中提取 <SrvModified> 部分。

$Path = "C:\Test"
$filterDate = Get-Date -format "yyyy.MM.dd hh:mm:ss"

Get-ChildItem -Path $Path -Filter '*.xml' -File -Recurse | ForEach-Object {
    [xml]$xml = Get-Content -Path $_.FullName | Where-Object {
        $_.TimeModified.Date -LE $filterDate
    }
    foreach ($item in $xml.ModullarRule.RuleAudit.SrvModified) {
        $Xml.ModullarRule.RuleAudit.SrvModified | Select date, user 
    }
}

谢谢!

尽我所能解释你的问题,你想要 select @date@user 所有 <SrvModified> 的属性,其中 @date 更大在目标文件夹中的所有 XML 个文件中,比给定的参考日期,例如 "two days ago"。

可以使用 Where-Object:

$path = "C:\Test"
$refDate = (Get-Date).AddDays(-2).ToString('yyyy.MM.dd HH:mm:ss')

Get-ChildItem -Path $Path -Filter '*.xml' -File -Recurse | ForEach-Object {
    $xmlPath = $_.FullName

    $xml = New-Object xml
    $xml.Load($xmlPath)

    $xml.ModullarRule.RuleAudit.SrvModified |
        Where-Object date -gt $refDate |
        Select-Object date, user, @{name="file"; expr={$xmlPath}}
}