Проблема с фильтром WMI

У меня в сеансе запущен notepad.exe:

gwmi -Query "Select CommandLine from Win32_Process where CommandLine='C:\Windows\system32\notepad.exe'"

дает

Get-WmiObject : Demande non valide
Au niveau de ligne : 1 Caractère : 5
+ gwmi <<<<  -Query "Select CommandLine from Win32_Process where CommandLine='C:\Windows\system32\notepad.exe'"
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], ManagementException
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

Я тестирую:

gwmi -Query "Select CommandLine from Win32_Process where CommandLine='C:\\Windows\\system32\\notepad.exe'"

Это ничего не дает

gwmi -Query "Select CommandLine from Win32_Process where CommandLine LIKE '%C:\\Windows\\system32\\notepad.exe%'"

Работает отлично

__GENUS          : 2
__CLASS          : Win32_Process
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
CommandLine      : "C:\Windows\system32\notepad.exe"

Возможно, это проблема с подстановочными знаками между PowerShell и WMI, но кто-нибудь может помочь мне заставить фильтр CommandLine='C:\Windows\system32\notepad.exe' работать


person JPBlanc    schedule 06.10.2011    source источник
comment
Каково значение CommandLine в найденном (при обнаружении) экземпляре Win32_Process? Например. здесь значение CommandLine включает двойные кавычки.   -  person Richard    schedule 06.10.2011
comment
Я редактирую вопрос, чтобы показать значение свойства, когда оно работает. Если вы посмотрите на WMBEMTEST.EXE CommandLine, это одно из свойств WIN32_Process.   -  person JPBlanc    schedule 06.10.2011
comment
проблема в том, что CommandLine окружен . как избежать в запросе gwmi?   -  person CB.    schedule 06.10.2011


Ответы (2)


Значение свойства CommandLine содержит кавычки, поэтому их также необходимо экранировать.

Рабочая, но ужасная строка:

gwmi -Query "Select * from Win32_Process where CommandLine = '`"c:\\windows\\system32\\notepad.exe`"'"
person craika    schedule 06.10.2011
comment
вы тестировали его? ничего не вернуть! - person CB.; 06.10.2011
comment
Я переворачиваю его, спасибо, это как раз то, что я искал. Я просто не вижу, чтобы они были в WBEMTEST.EXE. - person JPBlanc; 06.10.2011
comment
@craika: конечно! но для меня вернуть ничего! почему сейчас? - person CB.; 06.10.2011
comment
@Christian У меня это тоже работает, ты не забыл запустить блокнот перед запуском теста? ;о) Я просто копирую прошлое. - person JPBlanc; 06.10.2011
comment
@JPBlanc: конечно! но для меня вернуть ничего! почему сейчас? - person CB.; 06.10.2011
comment
@Chistian: x64 против 32, может быть? Путь к 32-битному блокноту в 64-битной оболочке PowerShell находится в SysWOW? - person craika; 06.10.2011
comment
@craika: нет, у меня коробка XP x32. Я сошел с ума... до твоего ответа у меня был выход с обратными трюками, но не работает... почему?? - person CB.; 06.10.2011
comment
Теперь проверьте семерку, сервер W2K8R2 и Windows 8 (PowerShell 3) работают на всех трех, извините @Christian - person JPBlanc; 06.10.2011
comment
НЕВЕРОЯТНЫЙ! в моем окне commandLine есть дополнительный пробел после последней цитаты: '(backtricks)c:\\windows\\system32\\notepad.exe(backtricks)'. - person CB.; 06.10.2011
comment
Я только что столкнулся с тем же на семерке! Я воспроизвожу это при запуске блокнота через пункт «поиск» в меню «Пуск»! - person JPBlanc; 06.10.2011
comment
вопрос-загадка. На моем ящике всегда одно и то же, запуск по ссылке или оригинальный notepad.exe. спасибо, что сообщили мне о своем тесте! - person CB.; 06.10.2011

Вам нужно включить кавычки, но, поскольку я не могу вспомнить, как их экранировать в WQL, я бы сделал это в PSH:

gwmi -class Win32_Process -filter "CommandLine like '`"C:\\Windows\\system32\\notepad.exe`"'"

Выражение фильтра заключено в двойные кавычки, а строковый аргумент LIKE заключен в одинарные кавычки. Двойные кавычки, являющиеся частью этого аргумента, должны быть взяты из PowerShell.

person Richard    schedule 06.10.2011