Я пытаюсь выполнить запрос WMI, в котором перечислены все подкаталоги в каталоге на другом компьютере (сервере), подключенном к сети, но он завершается с ошибкой System.Management.ManagementException
«Недопустимый запрос».
Я практически уверен, что эта проблема связана с именем каталога, содержащим левые и / или правые фигурные скобки ({
, }
).
ОБНОВЛЕНИЕ: I 'мы определили, что проблема заключается не в левой фигурной скобке, а в правой фигурной скобке.
Я пробовал разные способы экранирования этих символов, но, похоже, ничего не работает.
Нижеэто надуманный пример, который каждый раз завершается с ошибкой «Неверный запрос».
using System;
using System.Management;
public static class Program
{
public static void Main()
{
const string username = @"Domain\User";
const string password = @"Password";
const string server = @"Server";
const string query = @"Associators of {"
+ @"Win32_Directory.Name='"
+ @"c:\program files (x86)\a_test}"
+ @"'} "
+ @"Where AssocClass = Win32_Subdirectory ResultRole = PartComponent";
var options = new ConnectionOptions { Username = username, Password = password };
var wmiScope = new ManagementScope(@"\\" + server + @"\root\cimv2", options);
var wmiQuery = new ObjectQuery(query);
var searcher = new ManagementObjectSearcher(wmiScope, wmiQuery);
var searchResults = searcher.Get();
foreach (var searchResult in searchResults)
{
var subPath = searchResult.GetPropertyValue("Name").ToString();
var system = Convert.ToBoolean(searchResult.GetPropertyValue("System"));
Console.WriteLine($"subPath = {subPath}; system = {system}");
}
}
}
Для чего бы то ни было, код работает на компьютере с Windows 10, запрашивая сервер Windows 2008 R2 SP1 (да, он запланирован наснос).
Спасибо!