Powershell Set FileVersion - PullRequest
       7

Powershell Set FileVersion

0 голосов
/ 04 ноября 2018

У меня есть скрипт со связанными модулями, и я хотел бы добавить управление версиями файлов. По сути, я хочу обновить версию файла, когда я подпишу код, и код получит версию файла PS1, затем проверит ее по версии всех файлов PSM1 и зарегистрирует ошибку, если они не совпадают.

Тем не менее, я могу использовать

[System.Diagnostics.FileVersionInfo]::GetVersionInfo("somefilepath").FileVersion

, чтобы получить информацию, но я не могу найти информацию о том, как установить версию. Это потому, что версии файлов - залог скомпилированных EXE-файлов и DLL-файлов, и у меня нет способа добавить управление версиями файлов в файлы сценариев? Или я что-то упускаю?

1 Ответ

0 голосов
/ 04 ноября 2018

Я не могу найти информацию о том, как установить версию. Это , потому что версии файлов - это залог скомпилированных EXE и DLL , и у меня нет способа добавить управление версиями файлов в файлы сценариев?

Вы уже почти ответили на свой вопрос, вот именно! :)

FileVersionInfo.GetVersionInfo() оборачивает вызов собственной функции API (version.dll!GetFileVersionInfo).

Текущая версия API версии поддерживает широкий диапазон форматов файлов, при этом PE-файлы (.exe, .dll) являются очевидными.

Другие форматы, такие как элементы управления OLE (.ocx), заставки (.scr), драйверы (.drv, .sys), установщики (.msi, .msu) и ресурсы языкового пакета MUI (* 1025) *) может иметь встроенную информацию о версии, которая может быть проанализирована с использованием одной и той же библиотеки, поэтому это не просто исполняемых файлов.

С другой стороны, ваш .ps1 файл - это просто текстовый файл - операционная система не будет знать, где в ее содержимом искать и анализировать информацию о версии .

Для этого вам нужно либо прикрепить комментарий к последней строке файла и сохранить там версию, сохранить информацию о версии в имени файла, злоупотребить полем для ключевого слова справки на основе комментариев (например, .REMARKS например), или сохраните его в альтернативном потоке данных (при условии, что все машины в вашей цепочке инструментов сборки / подписи работают с NTFS):

# write version info to an alternate data stream
Set-Content -Value "1.4.884.3" -Path script.ps1 -Stream myVersion

# read it back during build
$versionString = Get-Content script.ps1 -Stream myVersion
...