Я использую следующий сценарий PowerShell для установки dotnetcore-windowshosting версии 1.1.1 с помощью этапа развертывания Octopus.
ChocolateyPackageId равно "dotnetcore-windowshosting", а $ ChocolateyPackageVersion равно "1.1.1".
Однако на целевой машине установлена новая версия DotNetCore.1.0.4_1.1.1-WindowsHosting.exe, чем версия, устанавливаемая пакетом Chocolatey. В результате возникает ошибка, предупреждающая меня о том, что на целевой машине уже установлена более новая версия.
Как я могу установить пакет, используя cinst
, как в сценарии, но игнорировать и не вызывать ошибку, если устанавливаемый пакет (или более новая версия) уже установлен?
$chocolateyBin = [Environment]::GetEnvironmentVariable("ChocolateyInstall", "Machine") + "\bin"
if(-not (Test-Path $chocolateyBin)) {
Write-Output "Environment variable 'ChocolateyInstall' was not found in the system variables. Attempting to find it in the user variables..."
$chocolateyBin = [Environment]::GetEnvironmentVariable("ChocolateyInstall", "User") + "\bin"
}
$cinst = "$chocolateyBin\cinst.exe"
$choco = "$chocolateyBin\choco.exe"
if (-not (Test-Path $cinst) -or -not (Test-Path $choco)) {
throw "Chocolatey was not found at $chocolateyBin."
}
if (-not $ChocolateyPackageId) {
throw "Please specify the ID of an application package to install."
}
$chocoVersion = & $choco --version
Write-Output "Running Chocolatey version $chocoVersion"
$chocoArgs = @()
if([System.Version]::Parse($chocoVersion) -ge
[System.Version]::Parse("0.9.8.33")) {
Write-Output "Adding --confirm to arguments passed to Chocolatey"
$chocoArgs += @("-y", "")
}
if (-not $ChocolateyPackageVersion) {
Write-Output "Installing package $ChocolateyPackageId from the Chocolatey package repository..."
& $cinst $ChocolateyPackageId $($chocoArgs)
}
else {
Write-Output "Installing package $ChocolateyPackageId version $ChocolateyPackageVersion from the Chocolatey package repository..." & $cinst $ChocolateyPackageId -Version $ChocolateyPackageVersion $($chocoArgs)
}