Heutzutage können Sie FileVersionInfo von Get-Item oder Get-ChildItem herunterladen, es wird jedoch die ursprüngliche FileVersion des gelieferten Produkts und nicht die aktualisierte Version angezeigt. Zum Beispiel:
(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion
Interessanterweise können Sie die aktualisierte (gepatchte) ProductVersion folgendermaßen herunterladen :
(Get-Command C:\Windows\System32\Lsasrv.dll).Version
Die Unterscheidung, die ich zwischen "Original" und "Patched" mache, beruht im Wesentlichen auf der Art und Weise, wie die FileVersion berechnet wird ( siehe die Dokumente hier ). Grundsätzlich fragt die Windows-API GetFileVersionInfo seit Vista einen Teil der Versionsinformationen aus der sprachneutralen Datei (exe / dll) und den nicht festen Teil aus einer sprachspezifischen Mui-Datei ab (die nicht jedes Mal aktualisiert wird, wenn sich die Dateien ändern ).
Bei einer Datei wie lsasrv (die aufgrund von Sicherheitsproblemen in SSL / TLS / RDS im November 2014 ersetzt wurde) waren die von diesen beiden Befehlen gemeldeten Versionen (zumindest für eine Weile nach diesem Datum) unterschiedlich, und die zweite ist die mehr "richtige" Version.
Obwohl dies in LSASrv korrekt ist, können ProductVersion und FileVersion unterschiedlich sein (dies ist tatsächlich üblich). Die einzige Möglichkeit, die aktualisierte Dateiversion direkt aus der Baugruppendatei zu erhalten, besteht darin, sie selbst aus den Teilen zusammenzustellen.
Get-Item C:\Windows\System32\Lsasrv.dll | ft FileName, File*Part
Oder indem Sie die Daten daraus ziehen:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
Sie können dies einfach zu allen FileInfo-Objekten hinzufügen, indem Sie die TypeData in PowerShell aktualisieren:
Update-TypeData -TypeName System.IO.FileInfo -MemberName FileVersion -MemberType ScriptProperty -Value {
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) | % {
[Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart)-join".")
}
}
Nun jedes Mal , wenn Sie tun , Get-ChildItem
oder Get-Item
Sie eine haben FileVersion
Eigenschaft , dass zeigt die aktualisierte Fileversion ...