如果不满足条件,如何退出巧克力安装?
How to exit chocolatey installation if a condition is not met?
在我通常的 PowerShell
脚本中,像往常一样,我在进行正常完整性检查时使用 Exit 1
退出脚本,因此如果不满足条件,我会提前退出并通知用户满足条件。
Chocolatey
包开发是否遵循相同的 PoSh 方式?或者是否有任何 Chocolatey
方法,例如 helpers
或 core-extension
可以为开发人员执行此操作?例如:
我希望用户为我的 SQL Server
巧克力包 --params "/IsoPath:C:\Pkg"
提供 SQL Server iso
路径,如果没有提供路径,包安装应该会失败:
$pp = Get-PackageParameters
if (!pp['IsoPath']) {
Write-Host "No 'ISO' path is provided, please provide path in '--params'"
Exit 1
}
上面的代码片段是否会导致安装失败,或者有什么巧妙的方法可以做到这一点?
有几种方法可以做到这一点。
第一种是简单地抛出异常。一个很好的例子是 vcredist140 包,它决定这个包是否打算用于当前正在安装的 OS。
$os = Get-WmiObject -Class Win32_OperatingSystem
$version = [Version]$os.Version
if ($version -ge [Version]'6.1' -and $version -lt [Version]'6.2' -and
$os.ServicePackMajorVersion -lt 1)
{
# On Windows 7 / Server 2008 R2, Service Pack 1 is required.
throw 'This package requires Service Pack 1 to be installed first. The
"KB976932" package may be used to install it.'
}
elseif ($version -ge [Version]'6.0' -and $version -lt [Version]'6.1' -and
$os.ServicePackMajorVersion -lt 2)
{
# On Windows Vista / Server 2008, Service Pack 2 is required.
throw 'This package requires Service Pack 2 to be installed first.'
}
elseif ($version -ge [Version]'5.2' -and $version -lt [Version]'6.0' -and
$os.ServicePackMajorVersion -lt 2)
{
# On Windows Server 2003 / XP x64, Service Pack 2 is required.
throw 'This package requires Service Pack 2 to be installed first.'
}
elseif ($version -ge [Version]'5.1' -and $version -lt [Version]'5.2' -and
$os.ServicePackMajorVersion -lt 3)
{
# On Windows XP, Service Pack 3 is required.
throw 'This package requires Service Pack 3 to be installed first.'
}
另一种方法是使用 Chocolatey 提供的 Set-PowerShellExitCode
辅助方法:
https://chocolatey.org/docs/helpers-set-power-shell-exit-code
如果您需要专门将退出代码设置为稍后使用的内容。
在我通常的 PowerShell
脚本中,像往常一样,我在进行正常完整性检查时使用 Exit 1
退出脚本,因此如果不满足条件,我会提前退出并通知用户满足条件。
Chocolatey
包开发是否遵循相同的 PoSh 方式?或者是否有任何 Chocolatey
方法,例如 helpers
或 core-extension
可以为开发人员执行此操作?例如:
我希望用户为我的 SQL Server
巧克力包 --params "/IsoPath:C:\Pkg"
提供 SQL Server iso
路径,如果没有提供路径,包安装应该会失败:
$pp = Get-PackageParameters
if (!pp['IsoPath']) {
Write-Host "No 'ISO' path is provided, please provide path in '--params'"
Exit 1
}
上面的代码片段是否会导致安装失败,或者有什么巧妙的方法可以做到这一点?
有几种方法可以做到这一点。
第一种是简单地抛出异常。一个很好的例子是 vcredist140 包,它决定这个包是否打算用于当前正在安装的 OS。
$os = Get-WmiObject -Class Win32_OperatingSystem
$version = [Version]$os.Version
if ($version -ge [Version]'6.1' -and $version -lt [Version]'6.2' -and
$os.ServicePackMajorVersion -lt 1)
{
# On Windows 7 / Server 2008 R2, Service Pack 1 is required.
throw 'This package requires Service Pack 1 to be installed first. The
"KB976932" package may be used to install it.'
}
elseif ($version -ge [Version]'6.0' -and $version -lt [Version]'6.1' -and
$os.ServicePackMajorVersion -lt 2)
{
# On Windows Vista / Server 2008, Service Pack 2 is required.
throw 'This package requires Service Pack 2 to be installed first.'
}
elseif ($version -ge [Version]'5.2' -and $version -lt [Version]'6.0' -and
$os.ServicePackMajorVersion -lt 2)
{
# On Windows Server 2003 / XP x64, Service Pack 2 is required.
throw 'This package requires Service Pack 2 to be installed first.'
}
elseif ($version -ge [Version]'5.1' -and $version -lt [Version]'5.2' -and
$os.ServicePackMajorVersion -lt 3)
{
# On Windows XP, Service Pack 3 is required.
throw 'This package requires Service Pack 3 to be installed first.'
}
另一种方法是使用 Chocolatey 提供的 Set-PowerShellExitCode
辅助方法:
https://chocolatey.org/docs/helpers-set-power-shell-exit-code
如果您需要专门将退出代码设置为稍后使用的内容。