De nos jours, vous pouvez obtenir le FileVersionInfo à partir de Get-Item ou Get-ChildItem, mais il affichera la FileVersion d'origine du produit expédié, et non la version mise à jour. Par exemple:
(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion
Fait intéressant, vous pouvez obtenir la ProductVersion mise à jour (corrigée) en utilisant ceci:
(Get-Command C:\Windows\System32\Lsasrv.dll).Version
La distinction que je fais entre "original" et "patché" est essentiellement due à la façon dont la FileVersion est calculée ( voir la documentation ici ). Fondamentalement, depuis Vista, l'API Windows GetFileVersionInfo interroge une partie des informations de version du fichier indépendant de la langue (exe / dll) et la partie non fixe d'un fichier mui spécifique à la langue (qui n'est pas mis à jour chaque fois que les fichiers changent ).
Donc, avec un fichier comme lsasrv (qui a été remplacé en raison de problèmes de sécurité dans SSL / TLS / RDS en novembre 2014), les versions signalées par ces deux commandes (au moins pendant un certain temps après cette date) étaient différentes, et la seconde est la version plus "correcte".
Cependant, bien que ce soit correct dans LSASrv, il est possible que ProductVersion et FileVersion soient différents (c'est courant, en fait). Donc, la seule façon d'obtenir la Fileversion mise à jour directement à partir du fichier d'assemblage est de la créer vous-même à partir des pièces, quelque chose comme ceci:
Get-Item C:\Windows\System32\Lsasrv.dll | ft FileName, File*Part
Ou en extrayant les données de ceci:
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
Vous pouvez facilement l'ajouter à tous les objets FileInfo en mettant à jour le TypeData dans PowerShell:
Update-TypeData -TypeName System.IO.FileInfo -MemberName FileVersion -MemberType ScriptProperty -Value {
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName) | % {
[Version](($_.FileMajorPart, $_.FileMinorPart, $_.FileBuildPart, $_.FilePrivatePart)-join".")
}
}
Maintenant, chaque fois que vous le faites Get-ChildItem
ou Get-Item
vous aurez une FileVersion
propriété qui affiche la FileVersion mise à jour ...