我创建了一个脚本来创建一个报告,列出所有不是最新的文件。我想先以2018年开头的那些人订购这些文件。除此之外,我没有偏好。
dir *.exe | %{ $_.VersionInfo } | Where-Object {$_.FileVersion -NotMatch "^2018.1"} | Sort-Object FileVersion -Descending > V:\file.path\binFileVersion.txt
我目前的输出:
4.0.30319.01
3.10.0.0
2018.0.0.0
2018.0.0.0
2018.0.0.0
2018.0.0.0
2.5.3.5
15, 0, 3, 0
1.0.0.0
期望的输出:
2018.0.0.0
2018.0.0.0
2018.0.0.0
2018.0.0.0
Everything else
Everything else
我一直在修修补补,但还没有真正找到解决方案。我看到另一个关于垫左侧的帖子,但这并没有真正做到预期的动作。
谢谢!
有人发布了一个有效但在我批准之前被删除的答案。
$Match,$NotMatch = (dir *.exe | %{ $_.VersionInfo } | Where-Object {$_.FileVersion -NotMatch "^2018.1"} | Sort-Object FileVersion -Descending).Where({$_.FileVersion -like '2018*'},'Split')
@($Match,$NotMatch)
欣赏它!
答案 0 :(得分:2)
您可以将.Where()
方法与拆分重载一起使用,将其拆分为两个集合,以确定它是否与2018*
匹配。然后首先返回匹配的集合。
$Match,$NotMatch = (dir *.exe | %{ $_.VersionInfo } | Where-Object {$_.FileVersion -NotMatch "^2018.1"} | Sort-Object FileVersion -Descending).Where({$_.FileVersion -like '2018*'},'Split')
@($Match,$NotMatch)
注意:需要PowerShell 4 +
答案 1 :(得分:0)
你可以使用正则表达式,试试这个:
dir *.exe | %{ $_.VersionInfo } | Where-Object {$_.FileVersion -NotMatch "^2018.1"} |
Sort-Object {[regex]::Match($_,'2018')} -Descending