模仿Get-Help about_Type_Operators
中的示例:
PS C:\> (get-culture) -is [System.Globalization.CultureInfo]
True
我试图用不同的类型做同样的事情。为什么这会失败?我从Get-TypeData
的输出中复制了类型名称。
(我对使用is
而不是-is
的原始问题表示道歉。)
这个建议不起作用。
PS C:\> (Get-WMIObject -Class Win32_BIOS) -is [System.Management.ManagementObject#root\cimv2\Win32_BIOS]
Unable to find type [System.Management.ManagementObject#root\cimv2\Win32_BIOS].
At line:1 char:1
+ (Get-WMIObject -Class Win32_BIOS) -is [System.Management.ManagementOb ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Manageme...imv2\Win32_BIOS:TypeName)
[], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
在相关的说明中,每个目的的目的是什么?
PS C:\> Get-TypeData | Where-Object {$_.TypeName -like '*Win32_BIOS' }
TypeName Members
-------- -------
System.Management.ManagementObject#root\cimv2\Win32_BIOS {}
Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_BIOS {}
答案 0 :(得分:3)
您使用字符串is
作为比较运算符;但是,所有比较运算符都以连字符开头,因此您应该使用-is
:(Get-WMIObject -Class Win32_BIOS) -is [System.Management.ManagementObject...]
答案 1 :(得分:3)
...假设
PS> $bios = Get-WmiObject -Class Win32_BIOS
...您可以使用__CLASS
system property来测试像这样的对象的特定WMI类...
PS> $bios.__CLASS -eq 'Win32_BIOS'
True
......或者......
PS> $bios.SystemProperties['__CLASS'].Value -eq 'Win32_BIOS'
True
您也可以测试命名空间只是为了确实确保您拥有合适的类:
PS> $bios.__NAMESPACE -eq 'root\cimv2' -and $bios.__CLASS -eq 'Win32_BIOS'
True
请注意,上面的比较与-is
完全不同,因为您正在测试确切的类,而-is
会考虑类层次结构。也就是说,即使Win32_BIOS
继承自CIM_BIOSElement
:
PS> $bios.__CLASS -eq 'CIM_BIOSElement'
False
$bios | Get-Member
显示System.Management.ManagementObject#root\cimv2\Win32_BIOS
作为类型名称的原因是因为Win32_BIOS
及其继承链已添加到TypeNames
property ...
PS> $bios.PSObject.TypeNames
System.Management.ManagementObject#root\cimv2\Win32_BIOS
System.Management.ManagementObject#root\cimv2\CIM_BIOSElement
System.Management.ManagementObject#root\cimv2\CIM_SoftwareElement
System.Management.ManagementObject#root\cimv2\CIM_LogicalElement
System.Management.ManagementObject#root\cimv2\CIM_ManagedSystemElement
System.Management.ManagementObject#Win32_BIOS
System.Management.ManagementObject#CIM_BIOSElement
System.Management.ManagementObject#CIM_SoftwareElement
System.Management.ManagementObject#CIM_LogicalElement
System.Management.ManagementObject#CIM_ManagedSystemElement
System.Management.ManagementObject
System.Management.ManagementBaseObject
System.ComponentModel.Component
System.MarshalByRefObject
System.Object
实际类型仍为ManagementObject
...
PS> $bios.GetType().FullName
System.Management.ManagementObject