Sql server 确定给定命名空间是否存在WMIOObject类
我有一个名称空间,我想在运行Sql server 确定给定命名空间是否存在WMIOObject类,sql-server,windows,powershell,wmi,Sql Server,Windows,Powershell,Wmi,我有一个名称空间,我想在运行Get WmiObject之前,用它来验证WMI对象是否存在。例如,我想抛出SSRS 2012的名称空间,如果机器上不存在,那么我将尝试SSRS 2008 R2的下一个名称空间 是否有一种方法可以检查类的存在,只需猜测名称空间,如果不存在则不抛出错误? 我不想用试捕作为解决方案。我想知道一种方法,可以得到一个简单的布尔结果,告诉我这个类是否存在于这个名称空间中 我也不想使用SilentlyContinue作为解决方案 这将从SQL代理作业中的Powershell作业步
Get WmiObject
之前,用它来验证WMI对象是否存在。例如,我想抛出SSRS 2012的名称空间,如果机器上不存在,那么我将尝试SSRS 2008 R2的下一个名称空间
是否有一种方法可以检查类的存在,只需猜测名称空间,如果不存在则不抛出错误?
可以使用的
-Class
、-List
和-Namespace
参数查看指定命名空间中是否存在单个类:
$class = Get-WmiObject -Class 'Win32_BIOS' -List -Namespace 'root\cimv2';
$classExists = $class -ne $null;
以下是我的答案中的另一种(但速度较慢)方法:
$class = Get-WmiObject -List -Namespace 'root\cimv2' `
| Where-Object { $_.Name -eq 'Win32_BIOS'; };
$classExists = $class -ne $null;
回到,这里有第三个选项,在我的测试中,如果名称空间或类无效,它不会引发任何错误:
$class = Get-WmiObject -List | Where-Object {
$_.__NAMESPACE -eq 'root\cimv2' -and $_.__CLASS -eq 'Win32_BIOS';
};
$classExists = $class -ne $null;
请注意,
$\uu.Name
和$\uu.CLASS
实际上是同义词。在每个代码段中,$class
将包含您搜索的类的实例(如果找到),否则$null
当找不到该类以及您无权查询该类时,上述代码将出错。因此,最好将其包装在一个try-catch中,以处理错误并相应地显示消息。如果您指的是我的答案,我已经使用PowerShell 2.0和3.0进行了测试,当您传递无效的命名空间时,我的代码会产生错误,但是如果传递一个带有有效名称空间的无效类名,它将返回$null
@BACON,那么这就不是我要寻找的逻辑。我想猜测一个名称空间,并确定该类是否存在于该计算机上。我将尝试编辑我的问题以反映这一点。我仅限于SQL代理如何执行Powershell作业步骤,并且我认为try-catch和错误处理不像纯Powershell那样优雅。基本上,我想测试名称空间,如果计算机上不存在对应的类,我想尝试另一个名称空间,因为它可能正在使用另一个版本的SSRS。我意识到我可能可以先检查安装的版本,但我希望知道我最初的方法是否可行。我已经更新了我的答案(实际上,恢复了我原来的解决方案)使用在命名空间或类名无效时不会引发错误的代码。我们通过捕获SSRS版本来解决此问题,就像这家伙在foreach循环中所做的那样:。但是我仍然认为这个问题有价值。谢谢你解释$。\u Name和$。\u CLASS之间的相似性。不幸的是,当我尝试你的第三个例子(或其中任何一个)时,$classExists是假的,即使我知道名称空间应该在机器上。我正在搜索的类:MSReportServer\u ConfigurationSetting
我正在搜索的名称空间:root\microsoft\sqlserver\reportserver\RS\uv11\admin
因为我知道正确的名称空间,所以我可以运行$sclass=Get wmiossrect-namespace$ns-class“MSReportServer\u ConfigurationSetting”
并获得$SSRSClass
结果中列出的\uu类
和uu命名空间
。但是当我对\uu类
和\uu名称空间
使用相同的值时,您的方法似乎不起作用。如果运行Get Wmiobject-List-NAMESPACE$ns
它是否返回任何内容、错误、不包括MSReportServer\u配置设置的类列表
?那么,仅仅getwmioobject-List
如何,这是从目标名称空间返回类吗?如果从提升的PowerShell会话运行,输出是否会更改(不确定是否适用于您的环境)?运行Get Wmiobject-List-Namespace$ns
会返回包含MSReportServer\u配置设置的列表。但是getwmioobject-List
没有。