Comment pouvez-vous obtenir les informations de version d'un fichier .dll
ou .exe
dans PowerShell?
Je suis particulièrement intéressé File Version
, bien que d' autres informations sur la version (qui est, Company
, Language
, Product Name
, etc.) serait utile aussi bien.
file
powershell
versioninfo
Empereur XLII
la source
la source
get-item C:\Windows\System32\ubpm.dll | % VersionInfo | fl * -force
et comparez le FilePrivatePart à la dernière partie de FileVersion. La FileVersion montre ce qui a été livré à l'origine, et non la version corrigée. Cette commande, en revanche, affiche le numéro de version corrigé: (get-command C: \ Windows \ System32 \ ubpm.dll) .Version(Get-Command ... ).Version
renvoie la ProductVersion pas la FileVersion , et parfois cela compte. Donc, pour une solution complète qui renvoie réellement la FileVersion mise à jour , consultez l'exemple Update-TypeData dans ma réponse ci-dessous.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:
Fait intéressant, vous pouvez obtenir la ProductVersion mise à jour (corrigée) en utilisant ceci:
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:
Ou en extrayant les données de ceci:
Vous pouvez facilement l'ajouter à tous les objets FileInfo en mettant à jour le TypeData dans PowerShell:
Maintenant, chaque fois que vous le faites
Get-ChildItem
ouGet-Item
vous aurez uneFileVersion
propriété qui affiche la FileVersion mise à jour ...la source
(Get-Command C:\Path\YourFile.Dll).FileVersionInfo.FileVersion
Get-Command
application à un fichier dll. Pourriez-vous expliquer son effet?(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.ProductVersion
moyen plus récent et plus simple d'obtenir les mêmes informations ProductVersion que celles documentées dans la réponse? Je ne fais pas vraiment confiance à Microsoft pour utiliser le terme de manièreProductVersion
cohérente.'dir' est un alias pour Get-ChildItem qui retournera une classe System.IO.FileInfo lorsque vous l'appelez à partir du système de fichiers qui a VersionInfo comme propriété. Alors ...
Pour obtenir les informations de version d'un seul fichier, procédez comme suit:
Pour plusieurs fichiers ceci:
la source
Je préfère installer les extensions de communauté PowerShell et utiliser simplement la fonction Get-FileVersionInfo qu'elle fournit.
Ainsi:
avec une sortie comme:
Je l'ai utilisé contre un répertoire entier d'assemblages avec beaucoup de succès.
la source
Je sais que cela a déjà été répondu, mais si quelqu'un est intéressé à taper moins de caractères, je pense que c'est le moyen le plus court d'écrire ceci dans PS v3 +:
ls
est un alias pourGet-ChildItem
%
est un alias pourForEach-Object
versioninfo
voici une manière abrégée d'écrire{$_.VersionInfo}
L'avantage d'utiliser
ls
de cette manière est que vous pouvez facilement l'adapter pour rechercher un fichier donné dans les sous-dossiers. Par exemple, la commande suivante renverra les informations de version pour tous les fichiers appelésapplication.exe
dans les sous-dossiers:-r
est un alias pour-Recurse
Vous pouvez affiner davantage cela en ajoutant
-ea silentlycontinue
pour ignorer des éléments tels que les erreurs d'autorisation dans les dossiers que vous ne pouvez pas rechercher:-ea
est un alias pour-ErrorAction
Enfin, si vous obtenez des ellipses (...) dans vos résultats, vous pouvez ajouter
| fl
pour renvoyer les informations dans un format différent. Cela renvoie beaucoup plus de détails, bien que formatés dans une liste, plutôt que sur une ligne par résultat:fl
est un alias pourFormat-List
Je me rends compte que c'est très similaire à la réponse de xcud en cela
ls
et que cedir
sont tous les deux des alias pourGet-ChildItem
. Mais j'espère que ma méthode "la plus courte" aidera quelqu'un.Le dernier exemple pourrait être écrit à la main de la manière suivante:
... mais je pense que mon chemin est plus cool et, pour certains, plus facile à retenir. (Mais surtout plus frais).
la source
Une autre façon de le faire est d'utiliser la technique d'accès aux fichiers intégrée:
Vous pouvez également obtenir une propriété particulière de VersionInfo, ainsi:
C'est assez proche de la technique dir.
la source
Ceci est basé sur les autres réponses, mais c'est exactement ce que je recherchais:
la source
Get-Command
application à un fichier dll. Pourriez-vous expliquer son effet (avant même d'appeler la propriété FileVersionInfo)?FileVersionInfo
tout comme les fichiers exe. L'application de cette commande au chemin obtiendra les informations sur la version du fichier!la source
Je trouve cela utile:
la source
Comme EBGreen l'a dit, [System.Diagnostics.FileVersionInfo] :: GetVersionInfo (chemin) fonctionnera, mais rappelez-vous que vous pouvez également obtenir tous les membres de FileVersionInfo, par exemple:
Vous devriez pouvoir utiliser tous les membres de FileVersionInfo documentés ici, ce qui vous donnera essentiellement tout ce que vous pourriez souhaiter concernant le fichier.
la source
Voici une méthode alternative. Il utilise Get-WmiObject CIM_DATAFILE pour sélectionner la version.
la source