变量上的 PowerShell WMI 筛选器

PowerShell WMI filter on variable

这不是我想要完成的确切场景,但却是我遇到困难的一个很好的例子。

$Path = "\192.168.1.1\config"
Get-CimInstance -Namespace ROOT\CIMV2 -ClassName Win32_MappedLogicalDisk -Filter "ProviderName=$Path"

这会产生“无效查询”错误,因为它试图在查询中使用 \

我知道我可以使用以下方法手动执行此操作:

Get-CimInstance -Namespace ROOT\CIMV2 -ClassName Win32_MappedLogicalDisk -Filter "ProviderName='`\`\192.168.1.1`\config'"

这不能解决我的问题,因为我需要从变量传递值

如有任何帮助,我们将不胜感激

您可以进行内联替换以转义反斜杠:

$Path = "\192.168.1.1\config"
Get-CimInstance -Namespace ROOT\CIMV2 -ClassName Win32_MappedLogicalDisk -Filter "ProviderName='$($Path -replace '\','\')'"

注意:不要忘记在过滤器的值部分加上单引号。

$() 是子表达式 operator。由于 -replace 使用正则表达式,因此还必须为匹配表达式转义单个 \