以 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#rootcimv2Win32_BIOS]
Unable to find type [System.Management.ManagementObject#rootcimv2Win32_BIOS].
At line:1 char:1
+ (Get-WMIObject -Class Win32_BIOS) -is [System.Management.ManagementOb ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Manageme...imv2Win32_BIOS:TypeName)
[], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
与此相关的是,这些的目的是什么?
PS C:> Get-TypeData | Where-Object {$_.TypeName -like '*Win32_BIOS' }
TypeName Members
-------- -------
System.Management.ManagementObject#rootcimv2Win32_BIOS {}
Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_BIOS {}
假设...
PS> $bios = Get-WmiObject -Class Win32_BIOS
。可以使用 __CLASS
系统属性来测试对象的特定 WMI 类,如下所示...
PS> $bios.__CLASS -eq 'Win32_BIOS'
True
。或者这个...
PS> $bios.SystemProperties['__CLASS'].Value -eq 'Win32_BIOS'
True
你也可以测试命名空间,以确保你得到了正确的类:
PS> $bios.__NAMESPACE -eq 'rootcimv2' -and $bios.__CLASS -eq 'Win32_BIOS'
True
请注意,上面的比较与-is
不完全相同,因为您正在测试确切的类,而-is
考虑了类层次结构。 也就是说,即使从CIM_BIOSElement
继承Win32_BIOS
,以下内容也会失败:
PS> $bios.__CLASS -eq 'CIM_BIOSElement'
False
$bios | Get-Member
之所以将System.Management.ManagementObject#rootcimv2Win32_BIOS
显示为类型名称,是因为Win32_BIOS
及其继承链已添加到TypeNames
属性中......
PS> $bios.PSObject.TypeNames
System.Management.ManagementObject#rootcimv2Win32_BIOS
System.Management.ManagementObject#rootcimv2CIM_BIOSElement
System.Management.ManagementObject#rootcimv2CIM_SoftwareElement
System.Management.ManagementObject#rootcimv2CIM_LogicalElement
System.Management.ManagementObject#rootcimv2CIM_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
字符串is
作为比较运算符;但是,所有比较运算符都以连字符开头,因此您应该使用 -is
: (Get-WMIObject -Class Win32_BIOS) -is [System.Management.ManagementObject...]