等待WinGet - PS检测方法

m0rph

成员
16
2
3.
下面的脚本在PS ISE中运行良好(作为本地系统运行)。但当用作检测脚本时,我总是看到这样的错误:

内联脚本返回错误输出:管道元素中'&'后面的表达式产生的对象不是
有效的。它的结果必须是命令名、脚本块或CommandInfo对象。
在C:\WINDOWS\CCM\SystemTemp\ 44632 d8b - 862 d - 4 - dd4 - 8 c7b b768c8c61543。ps1:1 char: 29
+……getShow = &(解析路径"C:\程序文件\WindowsApps\微软。Des……

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

脚本:
------

$WingetShow = &(解析路径"C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_x64__8wekyb3d8bbwe\winget.exe") show——id缩放。变焦
foreach ($ WingetShow中的$Show){
if ($Show -like 'Version: *'){
$VersionLine = $Show


$LatestVersion = $VersionLine。削减(“版本:“)

$WingetList =(解析路径"C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_x64__8wekyb3d8bbwe\winget.exe") list——id缩放。变焦
foreach ($ WingetList中的$List){
if ($List -like '*Zoom.Zoom*'){
$VersionLine2 = $List


$VersionLine2 -match "Zoom\。变焦(? < >内容。*)| Out-Null
$CurrentVersion = $matches['content']。分割(' ')[0]

if ($CurrentVersion -eq $LatestVersion){
write-host“安装”
人事处

m0rph

成员
16
2
3.
  • 线程启动
  • # 3
在我的环境中,我有一个脚本,它检查winget应用程序列表的最新版本,然后基于该版本创建/更新许多MECM集合,更新基于PSADT的应用程序和部署类型(包括前面提到的检测脚本),并将安装及时分布到不同的集合上。下面是我的一些改进的最新版本。它可以找到winget.exe的最新版本,并允许两种方法确定最新版本(winget的fixed)。它现在还允许在应用程序名称中查找最新版本。对于一些“奇怪的”应用程序,这是必要的。例如,SSMS今天的版本是18.12.1,但在控制面板中显示为15.0.18424.0。

尝试{
$WingetEXEs =(解析路径"C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_x64__8wekyb3d8bbwe\winget.exe")路径| measure-object -line
$WingetPath =(解析路径"C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*_x64__8wekyb3d8bbwe\winget.exe")行- 1]。路径
$LatestVersionSource = 'MECM'
$LatestVersion = $null
$CurrentVersion = $null

抓住{}

if ($LatestVersionSource -eq 'Winget'){
尝试{
$WingetShow = & $WingetPath show——accept-source-agreements——id 7zip.7zip
foreach ($ WingetShow中的$Show){
if ($Show -like 'Version: *'){
$VersionLineLatest = $Show



$LatestVersion = $VersionLineLatest。削减(“版本:“)

抓住{}


if ($LatestVersionSource -eq 'MECM'){
$LatestVersion = '22.01'}

尝试{
$WingetList = & $WingetPath list——Id 7zip.7zip
foreach ($ WingetList中的$List){
if ($List -like '*7zip.7zip*'){
$VersionLineCurrentId = $List



如果(! (VersionLineCurrentId美元)){
$WingetList = & $WingetPath list—名称为“7-zip”
foreach ($ WingetList中的$List){
if ($List -like '*7-zip*'){
$VersionLineCurrentName = $List




如果(VersionLineCurrentId美元){
$VersionLineCurrentId -match "7zip\。7 zip(? < >内容。*)| Out-Null
$CurrentVersion = $matches['content']。分割(' ')[0]


如果(VersionLineCurrentName美元){
$VersionLineCurrentName -match "}(?<内容>.*)| Out-Null
$VersionLineCurrentNameSplit = $VersionLineCurrentName。分割(" ")
$CurrentVersion = $VersionLineCurrentNameSplit[-1]


if (($CurrentVersion -ne $null) -and ($CurrentVersion -ge $LatestVersion)){
write-host“安装”


抓住{}
人事处

m0rph

成员
16
2
3.
  • 线程启动
  • # 4
以下是我用这种方法部署和更新的应用程序:

7 - zip
Anydesk
比利时e-ID中间件
比利时e-ID查看器
Citrix工作区
戴尔命令|更新
谷歌Chrome
Greenshot
Java 8更新
本地管理员密码解决方案
微软的ASP。NET Core 5
微软的ASP。NET Core 6
Microsoft .NET Runtime - 5
微软。net运行时- 6
微软的优势
Microsoft SQL Server Management Studio
Microsoft Visual c++ 2005可重分发
Microsoft Visual c++ 2005 Redistributable (x64)
Microsoft Visual c++ 2008 Redistributable - x86
Microsoft Visual c++ 2008 Redistributable - x64
Microsoft Visual c++ 2010 x86可重分发
Microsoft Visual c++ 2010 x64可重分发
Microsoft Visual c++ 2012 Redistributable (x86)
Microsoft Visual c++ 2012 Redistributable (x64)
Microsoft Visual c++ 2013 Redistributable (x86)
Microsoft Visual c++ 2013 Redistributable (x64)
Microsoft Visual c++ 2015-2022可重分发(x86)
Microsoft Visual c++ 2015-2022可重分发(x64)
微软Windows桌面运行时- 5
微软Windows桌面运行时- 6
Mozilla Firefox
mRemoteNG
notepad++
Powershell 7
腻子
Screenpresso
TreeSize
VLC
Vmware Horizon客户端
网讯
Windows终端
解压缩的软件
WinZip
Wireshark
变焦
人事处

m0rph

成员
16
2
3.
  • 线程启动
  • # 6
启用此选项并再次检查?如果它需要任何用户接受,这可能会显示出来。
根据输出,可以在100%静默模式下自定义脚本。
查看附件4809

谢谢你,第二个版本的检测脚本(在这里的帖子#3)实际上运行得很好。
我确实将所有应用程序的部署设置为隐藏。只有我们的试验组得到第二次部署为“可用”,因此安装在软件中心/安装状态中仍然可见。华体会体育系列

论坛统计

线程
5171年
消息
20199年
成员
10859年
最新的成员
PremPal77