使用 PowerShell 静默卸载非 win32 软件

使用 PowerShell 静默卸载非 win32 软件

我的公司在我的操作系统上安装了很多不必要的软件,我真的不喜欢这些软件,它们给我带来了很多麻烦。考虑一下foobar在已安装软件列表中显示的软件Control Panel > Programs > Programs and Features。但是,当我使用以下命令进行搜索时,它不会显示:

Get-WmiObject -Class Win32_Product

命令。所以我不能使用此解决方案。当我使用

Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"

我可以看到这个程序。

我只想在每次启动操作系统时静默卸载此软件。我拥有计算机的管理员权限,所以这应该不是问题。我使用的是 Windows 10 22H2。

附注1.经过一些研究,我尝试了以下 cmd 命令并且它有效。

"C:\Program Files\Common Files\Microsoft Shared\ClickToRun\OfficeClickToRun.exe" scenario=install scenariosubtype=uninstall sourcetype=None productstoremove=O365ProPlusRetail.16_de-de_x-none culture=de-de version.16=16.0 DisplayLevel=False forceappshutdown=true

PS2。我想知道我是否可以以下命令

msiexec.exe /x {<packageRegisteryName>} /qn

答案1

您可以使用这个 PowerShell 片段:

$program = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object {$_.DisplayName -match "Part of App Name" } | Select-Object -Property DisplayName, Uninstallstring, QuietUninstallString 

start-process cmd.exe -argumentlist "/c ""$($prog.quietUninstallString) /norestart""" -Wait

其中“应用程序名称的一部分”足以唯一地标识产品。

答案2

我可以编写一个小型 PowerShell 脚本来满足我的特定需要:

# Name of the software to check
$softwareName = "O365ProPlusRetail - de-de"

# Check if software is installed
$software = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object { $_.PSChildName -match $softwareName }

if ($software -ne $null) {
    # Software is installed, uninstall it
    & 'C:\Program Files\Common Files\Microsoft Shared\ClickToRun\OfficeClickToRun.exe' scenario=install scenariosubtype=uninstall sourcetype=None productstoremove=O365ProPlusRetail.16_de-de_x-none culture=de-de version.16=16.0 DisplayLevel=False forceappshutdown=true
    Write-Host "$softwareName has been uninstalled."
}
else {
    # Software is not installed
    Write-Host "$softwareName is not installed."
}

它对我有用,但这不是一个通用的解决方案。

相关内容