Aujourd'hui, vous pouvez obtenir l'information sur la version du fichier à partir de Get-Item ou Get-ChildItem, mais elle affichera la version originale du fichier du produit livré, et non la version mise à jour. Par exemple :
(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.FileVersion
Il est intéressant de noter que vous pouvez obtenir la mise à jour (patchée) Version du produit 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 les documents ici ). En gros, depuis Vista, l'API Windows GetFileVersionInfo interroge une partie des informations de version à partir du fichier neutre pour la langue (exe/dll) et la partie non fixée à partir d'un fichier mui spécifique à la langue (qui n'est pas mis à jour à chaque fois que les fichiers changent).
Ainsi, 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 commande. le deuxième est la version la plus "correcte".
Cependant, bien que cela soit correct dans LSASrv, il est possible que la ProductVersion et la FileVersion soient différentes (c'est courant, en fait). Ainsi, la seule façon d'obtenir la actualisé Fileversion directement à partir du fichier d'assemblage est de le construire vous-même à partir des pièces, quelque chose comme ceci :
Get-Item C:\Windows\System32\Lsasrv.dll | ft FileName, File*Part
Ou en tirant les données de ceci :
[System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
Vous pouvez facilement ajouter cela à 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 faites Get-ChildItem
o Get-Item
vous aurez un FileVersion
qui montre la version mise à jour de FileVersion ...