Как вы можете получить информацию о версии от .dll
или.exe
в PowerShell?
Я специально заинтересованы в File Version
, хотя другая информация о версии (то есть Company
, Language
, Product Name
и т.д.) было бы полезно , как хорошо.
file
powershell
versioninfo
Император XLII
источник
источник
get-item C:\Windows\System32\ubpm.dll | % VersionInfo | fl * -force
и сравните FilePrivatePart с последней частью FileVersion. FileVersion показывает, что было отправлено, а не исправленную версию. Эта команда, с другой стороны, показывает исправленный номер версии: (get-команда C: \ Windows \ System32 \ ubpm.dll). Версия(Get-Command ... ).Version
возвращает ProductVersion, а не FileVersion , а иногда это имеет значение. Так что для полного решения, которое фактически возвращает обновленный FileVersion, посмотрите пример Update-TypeData в моем ответе ниже.В настоящее время вы можете получить FileVersionInfo из Get-Item или Get-ChildItem, но он будет показывать оригинальный FileVersion из поставляемого продукта, а не обновленную версию. Например:
Интересно, что вы можете получить обновленную (исправленную) ProductVersion , используя это:
Различие, которое я делаю между «оригинальным» и «исправленным», в основном связано с тем, как рассчитывается FileVersion ( см. Здесь документы ). По сути, начиная с Vista, Windows API GetFileVersionInfo запрашивает часть информации о версии из файла, не зависящего от языка (exe / dll), и нефиксированную часть из файла mui для конкретного языка (который не обновляется при каждом изменении файлов). ).
Таким образом, в случае файла типа lsasrv (который был заменен из-за проблем безопасности в SSL / TLS / RDS в ноябре 2014 года) версии этих двух команд (по крайней мере, некоторое время после этой даты) были разными, и вторая - более «правильная» версия.
Однако, хотя это правильно в LSASrv, возможно, что ProductVersion и FileVersion могут быть разными (на самом деле это обычное дело). Так что единственный способ получить обновленный Fileversion прямо из файла сборки - это создать его самостоятельно из частей, примерно так:
Или потянув данные из этого:
Вы можете легко добавить это ко всем объектам FileInfo, обновив TypeData в PowerShell:
Теперь каждый раз, когда вы делаете,
Get-ChildItem
или уGet-Item
вас будетFileVersion
свойство, которое показывает обновленный FileVersion ...источник
(Get-Command C:\Path\YourFile.Dll).FileVersionInfo.FileVersion
Get-Command
применении к файлу DLL. Не могли бы вы подробнее рассказать о его эффекте?(Get-Item C:\Windows\System32\Lsasrv.dll).VersionInfo.ProductVersion
ли более простой способ получить ту же информацию о ProductVersion, которая описана в ответе? Я действительно не доверяю Microsoft использовать этот терминProductVersion
последовательно.'dir' - это псевдоним для Get-ChildItem, который будет возвращать класс System.IO.FileInfo при вызове его из файловой системы, в которой свойство VersionInfo является свойством. Так ...
Чтобы получить информацию о версии одного файла, сделайте это:
Для нескольких файлов это:
источник
Я предпочитаю устанавливать расширения сообщества PowerShell и просто использовать предоставляемую им функцию Get-FileVersionInfo.
Вот так:
с выводом как:
Я использовал его против целого каталога сборок с большим успехом.
источник
Я понимаю, что на это уже дан ответ, но если кто-то заинтересован в наборе меньшего количества символов, я считаю, что это самый короткий способ написать это в PS v3 +:
ls
это псевдоним дляGet-ChildItem
%
это псевдоним дляForEach-Object
versioninfo
вот сокращенный способ написания{$_.VersionInfo}
Преимущество использования
ls
этого способа заключается в том, что вы можете легко адаптировать его для поиска определенного файла в подпапках. Например, следующая команда вернет информацию о версии для всех файлов, вызываемыхapplication.exe
в подпапках:-r
это псевдоним для-Recurse
Вы можете уточнить это, добавив
-ea silentlycontinue
игнорировать такие вещи, как ошибки прав доступа в папках, которые вы не можете найти:-ea
это псевдоним для-ErrorAction
Наконец, если вы получаете эллипсы (...) в своих результатах, вы можете добавить
| fl
информацию в другом формате. Это возвращает гораздо больше деталей, хотя и отформатировано в виде списка, а не по одной строке на результат:fl
это псевдоним дляFormat-List
Я понимаю, что это очень похоже на ответ xcud
ls
иdir
оба являются псевдонимами дляGet-ChildItem
. Но я надеюсь, что мой «самый короткий» метод поможет кому-то.Последний пример может быть написан от руки следующим образом:
... но я думаю, что мой путь круче и для некоторых легче запомнить. (Но в основном круче).
источник
Еще один способ сделать это - использовать встроенную технику доступа к файлам:
Вы также можете получить любое конкретное свойство из VersionInfo, таким образом:
Это довольно близко к технике DIR.
источник
Это основано на других ответах, но это именно то, что я был после:
источник
Get-Command
применении к файлу DLL. Не могли бы вы подробнее рассказать о его эффекте (еще до вызова свойства FileVersionInfo)?FileVersionInfo
же, как исполняемые файлы. Применяя эту команду к пути, вы получите информацию о версии файла!источник
Я считаю это полезным:
источник
Как сказал EBGreen, [System.Diagnostics.FileVersionInfo] :: GetVersionInfo (path) будет работать, но помните, что вы также можете получить все члены FileVersionInfo, например:
Вы должны быть в состоянии использовать каждого члена FileVersionInfo, описанного здесь, что даст вам практически все, что вы когда-либо хотели о файле.
источник
Здесь альтернативный метод. Он использует Get-WmiObject CIM_DATAFILE для выбора версии.
источник