ОШИБКА: Описание = Неверный запрос
Из-за испорченного объекта групповой политики на нескольких компьютерах установлен TightVNC, когда они не должны. Объект групповой политики пропал, поэтому просто удалить из него вариант, о котором я не знаю. Поэтому я пишу сценарии, чтобы удалить 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. Это в моем списке дел.
2 ответа
Вы сталкиваетесь с разбором строк в PowerShell. Попробуйте это вместо этого:
wmic /node:$pc product where name=`"TightVNC`" call uninstall
Обратите внимание, что для тех, кто на PowerShell V3, вы можете использовать:
wmic /node:$pc --% product where name="TightVNC" call uninstall
Вот ответ от 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