回答:
PowerShellは.NETクラスを呼び出すことができるため、次のことを実行できます。
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("somefilepath").FileVersionget-childitem * -include *.dll,*.exe | foreach-object { "{0}`t{1}" -f $_.Name, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }または、スクリプトとしてさらに良い:https : //jtruher3.wordpress.com/2006/05/14/powershell-and-file-version-information/
get-item C:\Windows\System32\ubpm.dll | % VersionInfo | fl * -forceFilePrivatePartを見て、FileVersionの最後の部分と比較します。FileVersionには、パッチが適用されたバージョンではなく、最初に出荷されたものが表示されます。一方、このコマンドは、パッチを適用したバージョン番号を表示します:(get-command C:\ Windows \ System32 \ ubpm.dll).Version
                    (Get-Command ... ).Version返すことです。更新された FileVersion を実際に返す完全なソリューションについては、以下の私の回答にあるUpdate-TypeDataの例を確認してください。
                    現在、Get-ItemまたはGet-ChildItemからFileVersionInfoを取得できますが、更新されたバージョンではなく、出荷された製品の元のFileVersionが表示されます。例えば:
(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion興味深いことに、これを使用して、更新された(パッチされた)ProductVersionを取得できます。
(Get-Command C:\Windows\System32\Lsasrv.dll).Version私が「オリジナル」と「パッチ」を区別しているのは、基本的にはFileVersionの計算方法によるものです(こちらのドキュメントを参照)。基本的にVista以降、Windows API GetFileVersionInfoは、言語ニュートラルファイル(exe / dll)のバージョン情報の一部と、言語固有のmuiファイル(ファイルが変更されるたびに更新されない)の非固定部分をクエリしています。 )。
したがって、lsasrv(2014年11月のSSL / TLS / RDSのセキュリティ問題のために置き換えられた)のようなファイルでは、これらの2つのコマンドによって報告されたバージョンは(少なくともその日付の後しばらくの間)異なり、2つ目はより「正しい」バージョン。
ただし、LSASrvでは正しいのですが、ProductVersionとFileVersionが異なる可能性があります(実際には一般的です)。したがって、アセンブリファイルから直接更新された Fileversion を取得する唯一の方法は、次のようにパーツから自分でビルドすることです。
Get-Item C:\Windows\System32\Lsasrv.dll | ft FileName, File*Partまたは、これからデータを取得する:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)PowerShellでTypeDataを更新することにより、これをすべてのFileInfoオブジェクトに簡単に追加できます。
Update-TypeData -TypeName System.IO.FileInfo -MemberName FileVersion -MemberType ScriptProperty -Value {
   [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) | % {
      [Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart)-join".") 
   }
}
あなたは今、すべての時間Get-ChildItemまたはGet-Itemあなたが持っているでしょうFileVersionが示す更新ファイルバージョンという性質を...
(Get-Command C:\Path\YourFile.Dll).FileVersionInfo.FileVersion
                    Get-Commanddllファイルに適用されることに興味をそそられます。その効果について詳しく教えてください。
                    (Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.ProductVersion答えに記載されているように同じPRODUCTVERSION情報を取得するための新しい簡単な方法は?マイクロソフトがこの用語をProductVersion一貫して使用することを本当に信じていません。
                    'dir'はGet-ChildItemのエイリアスであり、VersionInfoをプロパティとして持つファイルシステムから呼び出すと、System.IO.FileInfoクラスが返されます。そう ...
1つのファイルのバージョン情報を取得するには、次のようにします。
PS C:\Windows> (dir .\write.exe).VersionInfo | fl
OriginalFilename : write
FileDescription  : Windows Write
ProductName      : Microsoft® Windows® Operating System
Comments         :
CompanyName      : Microsoft Corporation
FileName         : C:\Windows\write.exe
FileVersion      : 6.1.7600.16385 (win7_rtm.090713-1255)
ProductVersion   : 6.1.7600.16385
IsDebug          : False
IsPatched        : False
IsPreRelease     : False
IsPrivateBuild   : False
IsSpecialBuild   : False
Language         : English (United States)
LegalCopyright   : © Microsoft Corporation. All rights reserved.
LegalTrademarks  :
PrivateBuild     :
SpecialBuild     :
複数のファイルの場合:
PS C:\Windows> dir *.exe | %{ $_.VersionInfo }
ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.1.7600.16385   6.1.7600.1638... C:\Windows\bfsvc.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\explorer.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\fveupdate.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\HelpPane.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\hh.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\notepad.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\regedit.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\splwow64.exe
1,7,0,0          1,7,0,0          C:\Windows\twunk_16.exe
1,7,1,0          1,7,1,0          C:\Windows\twunk_32.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\winhlp32.exe
6.1.7600.16385   6.1.7600.1638... C:\Windows\write.exe
PowerShell Community Extensionsをインストールし、それが提供するGet-FileVersionInfo関数を使用することを好みます。
そのようです:
Get-FileVersionInfo MyAssembly.dll
次のような出力で:
ProductVersion FileVersion FileName -------------- ----------- -------- 1.0.2907.18095 1.0.2907.18095 C:\ Path \ To \ MyAssembly.dll
アセンブリのディレクトリ全体に対して使用して、大きな成功を収めました。
私はこれがすでに回答されていることを理解していますが、誰かが少ない文字を入力することに興味があるなら、これがPS v3 +でこれを書く最も短い方法だと思います:
ls application.exe | % versioninfols のエイリアスです Get-ChildItem% のエイリアスです ForEach-Objectversioninfo ここに書くのは簡単な方法です {$_.VersionInfo}lsこの方法で使用することの利点は、サブフォルダー内の特定のファイルを探すように簡単に調整できることです。たとえば、次のコマンドは、application.exeサブフォルダー内で呼び出されたすべてのファイルのバージョン情報を返します。
ls application.exe -r | % versioninfo-r のエイリアスです -Recurseこれをさらに絞り込むに-ea silentlycontinueは、検索できないフォルダ内の権限エラーなどを無視して追加します。
ls application.exe -r -ea silentlycontinue | % versioninfo-ea のエイリアスです -ErrorAction最後に、結果に省略記号(...)が含まれている場合は、追加| flして情報を別の形式で返すことができます。これは、リストでフォーマットされていますが、結果ごとに1行ではなく、はるかに詳細を返します。
ls application.exe -r -ea silentlycontinue | % versioninfo | flfl のエイリアスです Format-Listこれは、xcudの応答と非常によく似てlsおりdir、どちらものエイリアスですGet-ChildItem。しかし、私は私の「最短」の方法が誰かを助けることを望んでいます。
最後の例は、次のように長文で書くことができます。
Get-ChildItem -Filter application.exe -Recurse -ErrorAction SilentlyContinue | ForEach-Object {$_.VersionInfo} | Format-List...しかし、私の方法はもっとクールで、覚えやすい人もいると思います。(しかし、ほとんどより涼しい)。
これを行うもう1つの方法は、組み込みのファイルアクセス手法を使用することです。
(get-item .\filename.exe).VersionInfo | FLまた、VersionInfoから特定のプロパティを取得することもできます。
(get-item .\filename.exe).VersionInfo.FileVersionこれは、dirテクニックに非常に近いものです。
これは他の回答に基づいていますが、まさに私が求めていたものです:
(Get-Command C:\Path\YourFile.Dll).FileVersionInfo.FileVersionGet-Commanddllファイルに適用されることに興味をそそられます。(プロパティFileVersionInfoを呼び出す前に)その効果について詳しく説明してもらえますか?
                    FileVersionInfo、exeファイルと同じように含まれています。このコマンドをパスに適用すると、ファイルバージョン情報が取得されます。
                    私はこれが便利だと思います:
function Get-Version($filePath)
{
   $name = @{Name="Name";Expression= {split-path -leaf $_.FileName}}
   $path = @{Name="Path";Expression= {split-path $_.FileName}}
   dir -recurse -path $filePath | % { if ($_.Name -match "(.*dll|.*exe)$") {$_.VersionInfo}} | select FileVersion, $name, $path
}EBGreenが言ったように、[System.Diagnostics.FileVersionInfo] :: GetVersionInfo(path)は機能しますが、FileVersionInfoのすべてのメンバーを取得することもできることを覚えておいてください。例:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo(path).CompanyNameここに記載されているFileVersionInfoのすべてのメンバーを使用できるようにする必要があります。これにより、基本的にファイルについて必要なすべてのものを取得できます。
ここで代替方法。Get-WmiObject CIM_DATAFILEを使用してバージョンを選択します。
(Get-WmiObject -Class CIM_DataFile -Filter "Name='C:\\Windows\\explorer.exe'" | Select-Object Version).Version