Подтверждение источника пакета 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
Другие вопросы по тегам