6

由于混乱的组策略对象,多台计算机在不应该安装的时候安装了 TightVNC。GPO 已消失,因此仅从那里删除软件不是我所知道的选项。因此,我正在编写脚本以便从计算机列表中删除 PowerShell。

这是我的脚本:

if ($args.length -ne 1) {
    Write-Warning "Must pass computer name, ending script.";
    break
}

$pc = $args[0]

Write-Output "Scanning $pc for TightVNC...."
$prod = wmic /node:$pc product get name | where {$_ -match "TightVNC"}
if ($prod) {
    Write-Output "Found TightVNC, attempting uninstall...."
    wmic /node:$pc product where name="TightVNC" call uninstall
} else {
    Write-Warning "Could not find TightVNC on $pc."
}
Write-Output "Done."

现在,我的输出如下:

Scanning [computer] for TightVNC....
Found TightVNC, attempting uninstall....
ERROR:
Description = Invalid query
Done.

但是,如果我将第二个 wmic 行复制并粘贴到提升的命令提示符中并将 $pc 替换为 [computer],它就可以正常工作。我的 PowerShell 窗口被提升了。

有谁知道为什么我的剧本会适合这个?我知道第一个 wmic 命令确实需要很长时间才能完成(> = 5 分钟),但它在实际工作的第二个命令窗口中也是如此。我很感激对此的任何见解。

注意:我使用 wmic 是因为这里的计算机没有正确配置为远程 PowerShell 访问。它在我要做的事情清单上。

4

2 回答 2

9

您正在与 PowerShell 的字符串解析发生冲突。试试这个:

wmic /node:$pc product where name=`"TightVNC`" call uninstall

请注意,对于 PowerShell V3 上的用户,您可以使用:

wmic /node:$pc --% product where name="TightVNC" call uninstall
于 2013-01-03T03:01:53.480 回答
0

这是来自http://www.tinyint.com/index.php/2011/04/20/escaping-quotes-in-powershell-exe-command-via-command-prompt/的答案,对我有用:

wmic /node:$pc product where 'name=\"TightVNC\"' call uninstall
于 2016-05-27T04:36:44.333 回答