Сравнение локальных модулей Powershell с модулями в удаленном репозитории

#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. Хэш