如何在PowerShell中以管理员身份启动msiexec实现无UAC静默卸载Adobe Acrobat Reader?
批量卸载Adobe Acrobat Reader无UAC提示解决方案
问题背景
批量卸载Adobe Acrobat Reader时,使用msiexec /qn参数触发Error 1730权限错误;改用/qb参数会弹出UAC提示,手动确认后可卸载,但无法批量推送。当前脚本通过注册表读取卸载GUID,调用Start-Process指定域凭据启动msiexec,但管理员账号运行仍无法绕过UAC,需无交互的批量卸载方案。
核心问题解析
- Error 1730是Windows Installer权限不足错误,说明
msiexec未在足够权限的上下文运行 - UAC提示源于管理员账号默认以标准用户权限启动进程,
Start-Process -Credential无法绕过UAC,反而会触发验证
可行解决方案
方案1:组策略部署卸载(批量环境首选)
- 打开组策略管理器,新建软件部署包,选择高级部署模式
- 定位至Adobe Acrobat Reader的MSI安装包,或直接使用卸载GUID配置部署类型为卸载
- 设置为计算机启动时执行(计算机级部署),组策略会在系统上下文自动执行卸载,完全绕过UAC且无用户交互
方案2:本地系统账户上下文执行(非组策略环境)
利用本地系统账户的最高权限特性,绕过UAC限制:
- 使用Sysinternals工具
PsExec执行卸载命令:
# 需确保PsExec已在目标机器PATH中,或指定完整路径 $regPath = 'HKLM:\Software\Wow6432Node\Adobe\Acrobat Reader\DC\Installer' $guid = Get-ItemPropertyValue -Path $regPath -Name 'ENU_GUID' -ErrorAction Stop Start-Process -FilePath "psexec.exe" -ArgumentList "-s msiexec.exe /x $guid /qn /norestart" -Wait -NoNewWindow
-s参数指定以本地系统账户运行,无UAC限制且权限足够
- 通过任务计划创建高权限任务:
$regPath = 'HKLM:\Software\Wow6432Node\Adobe\Acrobat Reader\DC\Installer' $guid = Get-ItemPropertyValue -Path $regPath -Name 'ENU_GUID' -ErrorAction Stop $taskName = "UninstallAcrobatReader" $action = New-ScheduledTaskAction -Execute "msiexec.exe" -Argument "/x $guid /qn /norestart" $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(10) $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries $principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Principal $principal -Force Start-ScheduledTask -TaskName $taskName Start-Sleep -Seconds 30 Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
- 任务以本地系统账户、最高权限运行,无UAC提示
方案3:修复Error 1730,直接使用/qn参数
确保脚本在真正的高权限上下文执行(而非管理员用户的标准权限):
- 右键PowerShell选择「以管理员身份运行」,直接执行:
$regPath = 'HKLM:\Software\Wow6432Node\Adobe\Acrobat Reader\DC\Installer' $guid = Get-ItemPropertyValue -Path $regPath -Name 'ENU_GUID' -ErrorAction Stop msiexec.exe /x $guid /qn /norestart
- 批量推送时,结合PsExec或任务计划的方式,确保命令在高权限上下文运行,即可避免Error 1730和UAC提示
原脚本问题修正
原脚本存在全局变量冗余、Invoke-Command无意义、-Credential触发UAC等问题,修正后的基础脚本(需高权限运行):
function Get-AcrobatGuid { $regPath = 'HKLM:\Software\Wow6432Node\Adobe\Acrobat Reader\DC\Installer' try { return Get-ItemPropertyValue -Path $regPath -Name 'ENU_GUID' -ErrorAction Stop } catch { Write-Error "未找到Adobe Acrobat Reader注册表项" exit 1 } } function Uninstall-Acrobat { $guid = Get-AcrobatGuid $process = Start-Process -FilePath "msiexec.exe" -ArgumentList "/x $guid /qn /norestart" -Wait -PassThru -NoNewWindow if ($process.ExitCode -eq 0) { Write-Host "卸载成功" } else { Write-Host "卸载失败,退出码:$($process.ExitCode)" } } Uninstall-Acrobat
内容的提问来源于stack exchange,提问作者Merrick
相关产品推荐
相关产品推荐

