防止在PowerShell脚本中显示其他窗口

时间:2012-06-29 00:39:57

标签: powershell powershell-v2.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运行。

1 个答案:

答案 0 :(得分: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