【发布时间】:2020-02-21 17:24:07
【问题描述】:
你能帮我调试一下我的代码吗?
我正在使用 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
}
}
谢谢!
【问题讨论】:
-
过去的时间小于未来的时间。由于
$filterdate是代码运行的时间,那么过去的任何日期都会小于那个时间。 -
当我使用 $filterDate 像 $filterDate = (Get-Date).AddDays(-2).Date 时,我得到了同样的错误。我需要先将其转换为 TimeModified 格式吗?
-
在比较不同类型时,LHS(左侧)指示要比较的对象类型。由于您没有转换任何一方,
$_.TimeModified.Date被认为是一个字符串,并且使$filterdate也成为一个字符串。你需要像[datetime]$_.TimeModified.Date一样投射它。 -
.TimeModified.Date到底应该是什么?据我所知,您正在处理的任何对象都没有这个属性。 -
我希望 .TimeModified.Date 是上次修改这个文件的时间,你可以在 Windows 的文件属性中看到。顺便说一句,在互联网上找到它
标签: xml powershell xml-parsing powershell-3.0