You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Get-WMIObject查询Win32_GroupUser时提示无效查询的问题

PowerShell中Win32_GroupUser查询失效原因及解决办法

问题场景

执行以下PowerShell代码时持续触发查询错误:

$admin = Get-WMIObject -CLass "Win32_GroupUser"  -ComputerName $Pc -Filter "GroupComponent = '$($admins.__Path)'"

错误输出:

Invalid query *select * from Win32_GroupUser where GroupComponent + ' '". Error Message: + ...    $admin = Get-WMIObject -Class "Win32_GroupUser" -ComputerName $Pc  ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-WmiObject], ManagementException
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

失效核心原因

问题出在WQL查询的字符串转义处理缺失:

  • $admins.__Path返回的WMI路径自带特殊字符,比如反斜杠\、双引号",直接代入Filter参数时会破坏WQL的语法结构。
  • 举个例子,__Path的典型值为\\PCNAME\root\cimv2:Win32_Group.Domain="DOMAIN",Name="Administrators",其中的双引号会和Filter外层的单引号逻辑冲突,反斜杠也会被当作转义符解析,导致查询语句被判定为无效。

修复方案

方案1:手动转义特殊字符

按照WQL规则,将路径中的双引号替换为两个双引号,反斜杠替换为两个反斜杠:

$escapedPath = $admins.__Path -replace '"', '""' -replace '\\', '\\'
$admin = Get-WMIObject -Class "Win32_GroupUser" -ComputerName $Pc -Filter "GroupComponent = '$escapedPath'"

方案2:改用Get-CimInstance(推荐)

CIM命令会自动处理实例路径的转义逻辑,无需手动操作,代码更简洁可靠:

# 直接转义路径的写法
$admin = Get-CimInstance -ClassName Win32_GroupUser -ComputerName $Pc -Filter "GroupComponent = '$($admins.CimInstanceProperties['__PATH'].Value)'"

# 更直观的关联查询写法
$admin = Get-CimInstance -ClassName Win32_Group -ComputerName $Pc -Filter "Name='Administrators'" | Get-CimAssociatedInstance -ResultClassName Win32_GroupUser

内容的提问来源于stack exchange,提问作者Mr. Mauve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 18:37:26