gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:54:57 27 4
gpt4 key购买 nike

我有一个命名空间,我想在代码中进一步针对它运行 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com