目前正在使用WinGet改进Intune中的应用程序部署生命周期。我正在考虑部署一个检测脚本,该脚本每天检查安装的版本,如果有可用的更新,则触发补救。
做一些简单的事情,如:
winget list --name 7-Zip
将以下列方式返回:
Name Id Version Available Source
----------------------------------------------------
7-Zip 19.00 (x64) 7zip.7zip 19.00 22.01 winget
在Powershell中,我们是否可以检查和比较可用的“列”和版本“列”,并返回出口0或退出1?
提前感谢
发布于 2022-08-10 04:41:40
如果您只需要知道升级是否可用,请在脚本的退出代码中反映:
以下报告在升级可用时退出代码1
,而0
则报告退出代码,只有在升级可用时才会依赖Available
列标题:
exit [int] (winget list --name 7-Zip | Select-String '\bVersion\s+Available\b' -Quiet)
如果您还想报告已安装的版本和最新的可用版本,还需要更多的工作:
$name = '7-Zip'
$lines = winget list --name $name
if ($lines -match '\bVersion\s+Available\b') {
$verinstalled, $verAvailable = (-split $lines[-1])[-3,-2]
[pscustomobject] @{
Name = $name
InstalledVersion = [version] $verInstalled
AvailableVersion = [version] $verAvailable
}
exit 1
} else {
Write-Verbose -Verbose "No upgrade for $name available."
exit 0
}
如果升级可用,上面的输出如下所示;退出代码设置为第一个命令:
Name InstalledVersion AvailableVersion
---- ---------------- ----------------
7-Zip 9.0.30729.4148 9.0.30729.6161
或者,如果盲目尝试升级是可以接受的
winget upgrade --name 7-Zip --silent
# If $LASTEXITCODE contains -1978335189, an upgrade was NOT available.
发布于 2022-08-10 02:21:18
为什么不使用
winget upgrade
它将返回可用的升级。
喜欢
Name Id Version Available Source
Google Chrome Google.Chrome 103.0.5060.53 104.0.5112.81 winget
Microsoft Edge Microsoft.Edge 103.0.1264.49 104.0.1293.47 winget
https://stackoverflow.com/questions/73299855
复制相似问题