sql-server - 确定给定命名空间是否存在 wmiobject 类

标签 sql-server windows powershell wmi

我有一个命名空间,我想在代码中进一步针对它运行 Get-WmiObject 之前使用它来验证 WMI 对象的存在。例如,我想将 SSRS 2012 的命名空间扔给它,如果它在机器上不存在,那么我将尝试 SSRS 2008 R2 的下一个命名空间。

有没有办法通过猜测命名空间来检查类是否存在,如果它不存在则不抛出错误?

  1. 我不想使用 try-catch 作为解决方案。我想知道一种可以获得简单 bool 结果的方法,该结果告诉我该类是否存在于此命名空间中。
  2. 我也不想使用 SilentlyContinue 作为解决方案。
  3. 这将从 SQL 代理作业中的 Powershell 作业步骤执行。这有时会以不同于纯 Powershell 的方式处理错误,这也是我担心上面#'s 1 和 2 的原因。

最佳答案

您可以使用 Get-WmiObject cmdlet-Class-List-Namespace 参数查看指定命名空间中是否存在单个类:

$class = Get-WmiObject -Class 'Win32_BIOS' -List -Namespace 'root\cimv2';
$classExists = $class -ne $null;

这是来自 an earlier revision 的替代方法(但速度较慢)我的回答:

$class = Get-WmiObject -List -Namespace 'root\cimv2' `
    | Where-Object { $_.Name -eq 'Win32_BIOS'; };
$classExists = $class -ne $null;

回到my original answer ,这是第三个选项,在我的测试中,如果 namespace 或类无效,则不会抛出任何错误:

$class = Get-WmiObject -List | Where-Object {
    $_.__NAMESPACE -eq 'root\cimv2' -and $_.__CLASS -eq 'Win32_BIOS';
};
$classExists = $class -ne $null;

注意 $_.Name$_.__CLASS 实际上是同义词。在每个代码片段中,$class 将包含一个 ManagementClass您搜索的类的实例(如果找到),否则为 $null

关于sql-server - 确定给定命名空间是否存在 wmiobject 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689363/

相关文章:

python - 端口 8000,PID 4,无法终止,taskill/f/pid 4,拒绝访问

powershell - Powershell不会将变量扩展为参数

sql - 选择查询并使用 SQL 中的 select 进行插入

sql - 在 SQL Server 中检查模拟

sql-server - 在 SQL Server 数据库之间传递用户定义的表类型

windows - 通常从提升的进程执行进程

c++ - 如何在 MSVC 中的原始字符串文字中使用 Unicode 符号/表情符号

.net - 是否可以在 SQL Server 2014 中为 .NET 框架程序集创建非对称 key ?

azure - 在powershell中将字符串结果转换为数组

windows - 服务器管理 - 需要脚本来监控服务器上的可用空间