Подтверждение источника пакета PowerShell
Я пытаюсь создать функцию, которая будет автоматически устанавливать, обновлять и импортировать модуль PowerShell по требованию из репозитория PSGallery, и он будет запускаться на сервере сборки, поэтому я должен избегать любых запросов на подтверждение. Эта функция будет вызываться довольно часто и не будет пытаться установить или обновить модули, если модуль уже загружен в сеанс (только в первый раз).
# Already imported? Let's not go further with updates and import again...
if (Get-Module -Name $moduleName)
{
Write-Host "'$moduleName' is already imported to the current session!"
return
}
Если модуль еще не установлен, я постараюсь установить его. Проблема заключается в том, что я перехожу к шагу, на котором мне нужно установить поставщика NuGet PackageManagement (перед импортом модуля PowerShellGet необходимо установить модули из PSGallery). Я делаю следующий командлет:
Install-PackageProvider -Name "NuGet" -Confirm:$false -Verbose
Но я получаю следующее подтверждение:
Я мог бы решить эту проблему с помощью -Force
такой параметр:
Install-PackageProvider -Name "NuGet" -Confirm:$false -Force -Verbose
Но проблема, которую я вижу с этим решением (возможно, не имеет большого значения) заключается в том, что использование -Force
будет загружать и устанавливать NuGet каждый раз, даже если установленная версия обновлена. Без -Force
Параметр, он просто пропустит его, если версия обновлена, и я бы предпочел это.
Есть ли способ установить источник пакета " https://oneget.org/nuget-2.8.5.208.package.swidtag" в качестве доверенного, поэтому я не получаю запрос подтверждения снова без необходимости использовать -Force
параметр?
2 ответа
На самом деле, если вы запускаете Get-PackageProvider -Name "NuGet" -Force
он автоматически загрузит и установит его, если он не установлен. Если он установлен, он возвращает NuGet как объект. Моя версия PowerShell - 5.1.14393.1480.
Оригинальный ответ:
Может быть, вы могли бы просто проверить, доступна ли она, а затем запустить вашу команду?
$NuGetProvider = Get-PackageProvider -Name "NuGet" -ErrorAction SilentlyContinue
if ( -not $NugetProvider )
{
Install-PackageProvider -Name "NuGet" -Confirm:$false -Force -Verbose
}
Как насчет использования параметра -ForceBoostrap в Get-PackageProvider, например
Get-PackageProvider -Name "nuget" -ForceBootstrap
Не уверен, поможет ли это, но здесь ничего не говорится
Можете ли вы использовать cmd-версию try-catch с использованием errorlevel?
Install-PackageProvider -Name "NuGet" -Confirm:$false -Verbose
if errorlevel 1 GOTO Forced
exit /b
:Forced
Install-PackageProvider -Name "NuGet" -Confirm:$false -Force -Verbose