#powershell
#powershell
Вопрос:
Я изучаю автоматизацию публикации модулей Powershell в нашем локальном репозитории.
Как я могу сравнить модуль, который существует локально (который находится в $env:PSModulePath), и модуль в удаленном репозитории?
Я хотел бы сравнить номера версий и определить, совпадает ли код модуля.
Насколько это возможно?
Ответ №1:
Чтобы сравнить версии, вы можете использовать Get-InstalledModule
для составления списка и извлечения установленных версий локальных модулей и Find-Module
для поиска в ваших настроенных репозиториях последнего доступного модуля. Затем вы просто сравниваете версии. Использование AWSPowerShell.NetCore
модуля в качестве образца:
$installedVersion ( Get-InstalledModule -Name AWSPowerShell.NetCore ).Version | Select-Object -First 1 # More than 1 version can be returned if installed
$upstreamVersion ( Find-Module -Name AWSPowerShell.Core ).Version
# returns $true if out of date, $false if not
$outOfDate = $installedVersion -lt $upstreamVersion
Но для сравнения кода вам придется загрузить модуль с помощью Save-Module
, чтобы сохранить его по некоторому произвольному пути, а затем разделить локальную копию и новую копию, чтобы проверить любые изменения. Вы также можете проверить версию самих модулей, просмотрев первый уровень каталога модулей — код модуля будет находиться в папке с именем, независимо от версии модуля.
Чтобы проверить наличие изменений в коде ( AWSPowerShell.NetCore
снова используя в качестве примера), вы можете использовать Compare-Object
для разделения каталогов модулей:
Save-Module -Name AWSPowerShell.NetCore -Path /tmp
# Use whatever the latest installed version directory you have here is
$installedModule = gci '/home/bender/.local/share/powershell/Modules/AWSPowerShell.NetCore/1.2.3.4'
# Use the version directory which appears here
$upstreamModule = gci /tmp/AWSPowerShell.NetCore/1.2.3.5
Compare-Object -ReferenceObject $installedModule -DifferenceObject $upstreamModule
Комментарии:
1. Чтобы проверить, изменился ли какой-либо из файлов (в отличие от просто имен файлов), я использовал это: Compare-Object -referenceObject $installedModule. Хэш -DifferenceObject $upstreamModule. Хэш