使用powershell,[Get-ChildItem]我想通过名称显示最高的FileVersion和FullName来递归搜索所有exe

时间:2017-11-09 17:33:51

标签: powershell recursion versioning

使用PowerShell, 像[Get-ChildItem]

我想通过'.Name'递归搜索所有exe,显示最高'.FileVersion'和'.FullName'

Get-ChildItem -Recurse \\server\loads\*\Product\*.exe | sort Name,FileVersion | Select-Object -Property  FileVersion, Name, FullName | Out-GridView

第一个*是Alpha,Beta,Release和第二个*是子产品[可能的2个深度]和可执行文件

这个LOADS共享如何变得难以驾驭,以及EXE的备份和递归存储

我正在寻找输出:

FileVersion Name                         FullName
----------- ----                         --------
1.0.0.3     PBX.exe         \\server\loads\Beta\product\Platform\PBXInstall\PBXInterface.exe
2.0.0.0     Door.exe         \\server\loads\Release\product\Platform\DoorInstall\DoorInterface.exe
1.0.1.3     CA.exe         \\server\loads\Alpha\product\Platform\CAInstall\CAInterface.exe
1.0.9.3     POS.exe         \\server\loads\Release\product\Platform\POSInstall\POSInterface.exe

其中每一个都在所有3个文件夹中都有一个计数,而在低深度可能会有更多,因为它存储不正确

无论发布周期如何,我都需要获得最新版本

2 个答案:

答案 0 :(得分:0)

据我所知,您想要搜索路径中的所有exe文件,然后针对每个exe名称,例如PBX.exe,您只想显示最高版本的路径。

这是我在Windows 10上设计的解决方案

GCI -recurse *.exe | Select -first 20| select name,fullname,@{l='FileVersion';e={[SYSTEM.version]($_.versioninfo.fileversion)}} | group Name | %{$_.Group | sort -descending fileVersion | select -first 1}

祝你好运!

答案 1 :(得分:0)

Get-ChildItem -Recurse -Path '\\server\loads\*\Product\*.exe' |
  Select-Object -Property @(
      'Name','FullName',
      @{ N='FileVersion';
         E={[Diagnostics.FileVersionInfo]::GetVersionInfo($_.FullName) |
              ForEach-Object {
                  [Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart) -join '.' }
           }
       }
  ) |
  Sort-Object -Property 'Name','FileVersion' |
  Out-GridView