PowerShell无法获取LastWriteTime字段数据问题求助
解决Select-String无法获取LastWriteTime的问题
这个问题我之前也碰到过,核心原因是Select-String返回的对象类型和你想的不一样——它输出的是MatchInfo对象,这类对象只记录匹配的路径(字符串形式)、行内容这些匹配相关的信息,本身并没有附带文件的LastWriteTime属性,所以你直接选这个字段自然是空的。
要同时获取匹配行和文件的最后修改时间,你可以利用MatchInfo对象自带的FileInfo属性(它指向对应的文件对象,包含所有文件属性),通过计算属性来提取LastWriteTime:
Get-ChildItem -Recurse | Select-String -Pattern "CYCLE" | Select-Object Path, Line, @{Name='LastWriteTime'; Expression={$_.FileInfo.LastWriteTime}}
命令解释:
@{Name='LastWriteTime'; Expression={$_.FileInfo.LastWriteTime}}:这是PowerShell的计算属性语法,我们手动定义一个名为LastWriteTime的字段,其值来自当前MatchInfo对象关联的FileInfo对象的LastWriteTime属性。
如果你更喜欢分步处理(可读性更强),也可以先遍历每个文件,再执行搜索并绑定文件属性:
Get-ChildItem -Recurse | ForEach-Object { # $_ 是当前的文件对象(FileInfo),包含LastWriteTime $file = $_ $file | Select-String -Pattern "CYCLE" | Select-Object Path, Line, @{Name='LastWriteTime'; Expression={$file.LastWriteTime}} }
这两种方法都能完美解决你的问题,输出结果里的LastWriteTime列会正确显示文件的最后修改时间。
内容的提问来源于stack exchange,提问作者JohnL1953
相关产品推荐
相关产品推荐

