0

这里的想法是静默卸载程序。不幸的是,该程序的 msi 是自定义的,并且在卸载过程中会执行一个批处理文件。我想要做的是防止在 powershell 卸载脚本期间显示此窗口。我正在使用 wmi 卸载方法,因为程序使用的 msi 不会完全响应或卸载标志(/q、/x、/uninstall)。我试图将它作为后台作业运行,但窗口仍然出现。该脚本如下所示:

start-job -scriptblock `
    {(Get-WmiObject -class Win32_Product |? {$_Name -eq "Annoying1"}).uninstall()} `
    -Name Uninstall1
$job = get-job -name Uninstall1
wait-job $job
receive-job $job

这将在很大程度上隐藏运行,直到卸载作业到达执行批处理文件的位置,此时将出现并运行一个 cmd 窗口。关于如何在不显示额外窗口的情况下运行此脚本的任何想法?

该脚本也运行-windowstyle hidden

4

1 回答 1

1

放纵一下,我对此并不感到自豪,但我很确定如果您尝试使用远程处理在本地运行您的脚本,用户将不会看到该窗口:

我只是尝试:

$sess = New-PSSession -ComputerName localhost
Invoke-Command -Session $sess -ScriptBlock {calc.exe}
get-process "calc"

在你的情况下尝试:

$sess = New-PSSession -ComputerName localhost
$job = Invoke-Command -Session $sess -ScriptBlock {(Get-WmiObject -class Win32_Product |? {$_Name -eq "Annoying1"}).uninstall()} -asjob -Name Uninstall1
wait-job $job
receive-job $job
于 2012-06-29T03:42:28.427 回答