如何在 WMI Win32_Directory 查询的目录名称中转义右花括号 ( } )?
How can I escape a right-curly brace ( } ) in a directory name of a WMI Win32_Directory query?
我正在尝试执行一个 WMI 查询,该查询列出了另一台连接网络的计算机(服务器)上的目录中的所有子目录,但它因 System.Management.ManagementException
"Invalid query" 异常而失败。
我几乎可以肯定这个问题是由于目录名称包含左 and/or 右花括号 ({
, }
).
更新:我确定问题不是左花括号,而是右花括号。
我尝试了各种方法来转义这些字符,但似乎没有任何效果。
下面是一个人为的例子,每次都失败 "Invalid query"。
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 服务器(是的,它已计划拆除)。
谢谢!
这似乎是 Associators of
解析的一个怪癖。要解决此问题,请对字符串使用双引号语法而不是单引号语法(注意转义反斜杠,因为这是双引号方法所必需的):
const string query = @"Associators of {"
+ @"Win32_Directory.Name="""
+ @"c:\program files (x86)\a_test}"
+ @"""} "
+ @"Where AssocClass = Win32_Subdirectory ResultRole = PartComponent";
我正在尝试执行一个 WMI 查询,该查询列出了另一台连接网络的计算机(服务器)上的目录中的所有子目录,但它因 System.Management.ManagementException
"Invalid query" 异常而失败。
我几乎可以肯定这个问题是由于目录名称包含左 and/or 右花括号 ({
, }
).
更新:我确定问题不是左花括号,而是右花括号。
我尝试了各种方法来转义这些字符,但似乎没有任何效果。
下面是一个人为的例子,每次都失败 "Invalid query"。
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 服务器(是的,它已计划拆除)。
谢谢!
这似乎是 Associators of
解析的一个怪癖。要解决此问题,请对字符串使用双引号语法而不是单引号语法(注意转义反斜杠,因为这是双引号方法所必需的):
const string query = @"Associators of {"
+ @"Win32_Directory.Name="""
+ @"c:\program files (x86)\a_test}"
+ @"""} "
+ @"Where AssocClass = Win32_Subdirectory ResultRole = PartComponent";