WMI名称空间中的转义字符

时间:2019-07-17 10:52:40

标签: powershell reporting-services wmi

我正在尝试在本地计算机上找到类ReportServer_ConfigurationSetting(SSRS的配置)的所有实例。归结为找到正确的名称空间并列出其中的对象。我在大多数机器上都没问题,但是有一个问题。我使用以下代码进行操作:

function SSRS-GetInstanceNamespace($sqlInstanceName) {
    $ns = "Root\Microsoft\SqlServer\ReportServer\RS_${sqlInstanceName}"
    $ns = ($ns + '\' + (Get-WmiObject -Namespace $ns -Class __Namespace).Name + "\Admin")
    return $ns
}    
$x = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances
$x | % { SSRS-GetInstanceNamespace $_ }

在大多数情况下都可以使用,但是我们的其中一台计算机的实例名称包含下划线,例如“ A_B”。不幸的是,由于下划线在WMI实例中是有意义的(至少看起来如此),因此必须对其进行转义。我可以使用简单的替换操作来做到这一点,但是有什么方法能够始终如一地转义所有特殊字符吗?在上面的示例中,我需要的是“ A_5fB”而不是“ A_B”。

1 个答案:

答案 0 :(得分:0)

我从未按照自己想要的方式解决此问题,我只是遍历名称空间并递归地执行:

get-wmiobject -namespace $ns -class __namespace

寻找那些符合我的条件的文件,并尝试使用“启发式”来匹配实例名称,也就是说,如果它不直接匹配,那么我尝试将_替换为5F。这行得通,但是我可以肯定的是,随着越来越多的客户使用此工具,这将是长期错误源的好来源。