ОШИБКА: Описание = Неверный запрос

Из-за перепутанного объекта групповой политики на нескольких компьютерах TightVNC установлен, когда им этого не нужно. Объект групповой политики ушел, поэтому просто удаление программного обеспечения оттуда не является вариантом, о котором я знаю. Поэтому я пишу сценарии, чтобы удалить PowerShell из списка компьютеров.

Это мой script:

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" повышено.

Кто-нибудь знает, почему мой script будет соответствовать этому? Я знаю, что для выполнения первой команды wmic ( >= 5 минут) потребуется довольно много времени, но она также работает во втором командном окне, где оно действительно работает. Я был бы признателен за понимание этого.

ПРИМЕЧАНИЕ. Я использую wmic, потому что компьютеры здесь неправильно настроены для удаленного доступа PowerShell. Это в моем списке дел.

Ответ 1

Вы столкнулись с синтаксическим разбором строк PowerShell. Вместо этого попробуйте:

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

Примечание. Для тех, кто находится на PowerShell V3, вы можете использовать:

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