错误:说明=查询无效

时间:2013-01-02 22:25:46

标签: powershell powershell-v2.0

由于组策略对象混乱,多台计算机不应安装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行复制并粘贴到提升的命令提示符中并用[computer]替换$ pc,它就可以了。我的PowerShell窗口已升级。

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

注意:我使用的是wmic,因为此处的计算机未正确配置以进行远程PowerShell访问。这是我要做的事情清单。

2 个答案:

答案 0 :(得分:6)

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

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

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

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

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