dev*_*ter 2 windows sql-server powershell wmi
我有一个名称空间,我想用它来验证WMI对象的存在,然后Get-WmiObject再在代码中对其进行反对.例如,我想在它上面抛出SSRS 2012的命名空间,如果它在机器上不存在,那么我将尝试SSRS 2008 R2的下一个命名空间.
有没有办法通过猜测命名空间来检查类的存在,如果它不存在则不抛出错误?
您可以使用-Class,-List以及-Namespace对参数Get-WmiObject小命令,看是否在指定的命名空间中存在的一个类:
$class = Get-WmiObject -Class 'Win32_BIOS' -List -Namespace 'root\cimv2';
$classExists = $class -ne $null;
Run Code Online (Sandbox Code Playgroud)
这是从我的答案的早期修订版中替代(但速度较慢)的方法:
$class = Get-WmiObject -List -Namespace 'root\cimv2' `
| Where-Object { $_.Name -eq 'Win32_BIOS'; };
$classExists = $class -ne $null;
Run Code Online (Sandbox Code Playgroud)
回到我原来的答案,这是第三个选项,在我的测试中,如果命名空间或类无效,则不会抛出任何错误:
$class = Get-WmiObject -List | Where-Object {
$_.__NAMESPACE -eq 'root\cimv2' -and $_.__CLASS -eq 'Win32_BIOS';
};
$classExists = $class -ne $null;
Run Code Online (Sandbox Code Playgroud)
请注意,$_.Name并且$_.__CLASS实际上是同义词.在每个代码片段中,如果找到,$class将包含ManagementClass您搜索的类的实例,否则$null.
| 归档时间: |
|
| 查看次数: |
4407 次 |
| 最近记录: |