W dzisiejszych czasach można uzyskać FileVersionInfo z Get-Item lub Get-ChildItem, ale wyświetli oryginalną wersję pliku z wysyłanego produktu, a nie zaktualizowaną wersję. Na przykład:
(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion
Co ciekawe, można uzyskać zaktualizowaną (poprawioną) ProductVersion za pomocą tego:
(Get-Command C:\Windows\System32\Lsasrv.dll).Version
Należy zauważyć, że z pliku jak LSASRV (który został zamieniony z powodu problemów związanych z bezpieczeństwem w SSL/TLS/RDS w listopadzie 2014 r.) Wersje zgłoszone przez te dwie komendy są inne, a druga druga wersja jest poprawną wersją.
Jednakże, mimo że jest poprawne w LSASrv, możliwe jest, że ProductVersion i FileVersion są różne (tak naprawdę jest to typowe).Więc jedynym sposobem, aby uzyskać aktualizowane FileVersion jest zbudować go samemu, coś takiego:
Get-Item C:\Windows\System32\Lsasrv.dll | ft FileName, File*Part
czy raczej coś takiego:
Update-TypeData -TypeName System.IO.FileInfo -MemberName FileVersion -MemberType ScriptProperty -Value {
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) | % {
[Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart)-join".")
}
}
Teraz za każdym razem robisz Get-ChildItem
lub Get-Item
będziesz mieć właściwość FileVersion
, która pokazuje zaktualizowany plik FileVersion ...
Zobacz @Jaykul dla rozwiązania, które nie wymaga obiektu .NET. Odpowiedź IMHO Jaykula powinna być wybrana jako odpowiedź :) –
Mimo że pozostałe odpowiedzi dają krótsze polecenia, wszystkie te, które próbowałem, wypisują za dużo informacji i skracają ścieżkę pliku do "...". Drugie polecenie w tej odpowiedzi daje dokładnie to, czego potrzebujesz, działa dla katalogu plików i formatuje się w taki sposób, aby łatwo było go zmodyfikować w celu zwrócenia innych informacji. Po prostu zmień .LegalCopyright w poleceniu na .FileVersion. – Dennis
Nawiasem mówiąc, link "odnotowano tutaj" jest martwy. –