等待WinGet - PS检测方法

m0rph

成员
16
2
3.
下面的脚本在PS ISE(作为LOCAL SYSTEM运行)中工作良好。但是当用作检测脚本时,我一直看到这个错误:

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

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

脚本:
------

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


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

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


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

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

m0rph

成员
16
2
3.
  • 线程启动
  • # 3
在我的环境中,我有一个检查winget应用程序列表的最新版本的脚本,然后基于该版本创建/更新许多MECM集合,更新基于PSADT的应用程序和部署类型(包括前面提到的检测脚本),并及时在不同的集合上传播安装。下面是我做了一些改进的最新版本。它可以找到winget.exe的最新版本,并允许2种方法来确定最新版本(winget of 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")[$WingetEXEs. 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列表—名称为“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
微软。net运行时- 5
微软。net运行时- 6
微软的优势
Microsoft SQL Server管理工作室
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 Redistributable
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 Redistributable (x86)
Microsoft Visual c++ 2015-2022 Redistributable (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篇文章中)实际上工作得很好。
我确实将所有应用程序的部署设置为隐藏。只有我们的试验组获得“可用”的第二次部署,因此安装在软件中心/安装状态中保持可见。华体会体育系列

最新的文章

论坛统计

线程
5133年
消息
20073年
成员
10742年
最新的成员
ardaip91