使用具有日期比较的 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}}
}
你能帮我调试我的代码吗?
我正在使用 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}}
}