我需要做的是:
在“c:\ Program Files \”中,我必须搜索.exe文件,然后收集此文件的版本。
现在,我坚持使用.exe搜索。我这样做是为了知道,但没有显示输出:
Get-ChildItem -Path C:\Pr*\ -Filter SymCorpUI.exe -Recurse | % {Write-Host $_.FullName}
我知道如何收集版本:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("PATH OF THE FILE\ccc.exe").FileVersion
也许搜索的结果应放在一个变量中,然后内容可以在getVersionInfo部分中进行检索,但我完全被卡住了。
关于如何实现这一目标的任何想法/想法?
非常感谢您的帮助:D
答案 0 :(得分:1)
你快到了,你只需要将Get-ChildItem
的输出存储到一个变量中。这将是一个FileInfo
个对象的数组,因此您需要迭代它们以获取所需的信息,这将是fullname
属性:
$f = Get-ChildItem -Path C:\Pr*\ -Filter SymCorpUI.exe -Recurse
$f | % { [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_.FullName).FileVersion
%
是Foreach-Object
的简写,$_
是管道中的变量,它将是FileInfo
对象。然后,您使用FullName
访问$_.FullName
媒体资源。这将包含文件的完整路径。
<强>更新强>
似乎powershell v1.0中的-filter
功能与更高版本不同,似乎只对路径起作用,而不是文件名,因此您需要执行以下操作:
$f = gci "C:\Pro*" -recurse | ? { $_.name -eq 'SymCorpUI.exe' }
$f | % { [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_.FullName).FileVersion