PowerShell: добавление фильтра или запроса в Get-WmiObject - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь добавить фильтр или запрос в строку кода PowerShell, но получаю странные результаты.Я могу повторить эту проблему, используя любой запрос WMI.Вот пример:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "Get-WmiObject -class Win32_Processor -Namespace root\cimv2 -filter 'Status = `"OK`"'"

Это дает мне эту ошибку: Get-WmiObject: Неверный запрос "select * from Win32_Processor, где Status = OK".Но если я запускаю его в уже открывшемся окне PowerShell, например:

Get-WmiObject -class Win32_Processor -Namespace root\cimv2 -filter 'Status = "OK"'

Это прекрасно работает.Поэтому я не понимаю этого поведения.Я испробовал все способы одинарных кавычек, двойных кавычек и экранирующих символов, но, похоже, ничего не получалось.

1 Ответ

0 голосов
/ 05 июня 2018

Ваша проблема - неправильное понимание цитирования с помощью синтаксического анализатора cmd (поскольку именно это используется при вызове powershell.exe):

powershell.exe -Command ""

Все, что находится в двойных кавычках, будет передано -Command.В вашем случае самый простой путь - избежать одиночных кавычек (путем удвоения числа), поскольку cmd обрабатывает двойные кавычки особым образом (обычно, удаляя их):

powershell.exe -Command "Get-WmiObject -Class Win32_Processor -Filter 'Status = ''OK'''"

Каксноска, root/cimv2 является пространством имен по умолчанию для Get-WmiObject

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...