-expand 对于 WMI(Powershell Select-Object)的真正含义是什么?



Select-Object 上的此页面仅显示 -ExpandProperty "指定要选择的属性,并指示应尝试扩展该属性。 你还记得一个旧规则吗,即定义不应该包括被定义的词,即真正被扩展的内容?

这是我的概念验证代码:

get-wmiobject -class CIM_VideoController
$VideoController = get-wmiobject -class CIM_VideoController
$VideoProcessorEx = $VideoController | select-object -expand   VideoProcessor
$VideoProcessor   = $VideoController | select-object -property VideoProcessor
Write-Host "VideoProcessorEx =$VideoProcessorEx"
Write-Host "VideoProcessor=$VideoProcessor"

第一行代码显示处理器是这样的:

VideoProcessor               : Quadro 1000M

两个 Write-Host 语句显示了这一点:

VideoProcessorEx =Intel(R) HD Graphics Family Quadro 1000M
VideoProcessor=  

所以我的部分问题是这个。 视频处理器真的是"Quadro 1000M"或"英特尔(R) HD Graphics 家族 Quadro 1000M",还是两者都正确,一个是短名称,一个是长(或扩展)名称? 如何将短名称检索到变量中?

根据"半结"的回应,我添加了以下内容:

Write-Host "************* Get-Member of `$VideoProcessor **********************" 
$VideoProcessor   | get-member
Write-Host "VideoProcessor via obj.property = $($VideoProcessor.VideoProcessor)"

并得到了这个结果:

************* Get-Member of $VideoProcessor **********************
TypeName   : Selected.System.Management.ManagementObject
Name       : Equals
MemberType : Method
Definition : bool Equals(System.Object obj)
TypeName   : Selected.System.Management.ManagementObject
Name       : GetHashCode
MemberType : Method
Definition : int GetHashCode()
TypeName   : Selected.System.Management.ManagementObject
Name       : GetType
MemberType : Method
Definition : type GetType()
TypeName   : Selected.System.Management.ManagementObject
Name       : ToString
MemberType : Method
Definition : string ToString()
TypeName   : Selected.System.Management.ManagementObject
Name       : VideoProcessor
MemberType : NoteProperty
Definition : System.String VideoProcessor=Intel(R) HD Graphics Family
VideoProcessor via obj.property = Intel(R) HD Graphics Family  Quadro 1000M

我仍然不清楚为什么它不根据 WMI 类的原始输出显示"Quadro 1000M"。

当你展开一个属性(-expandproperty)并将其分配给一个变量时,你实际上是在说给我该属性的值作为一个字符串。与将对象本身分配给变量相反。我的猜测是,视频处理器是一个具有多个属性的对象。

如果你对每个项目都做一个gm,我相信你会更好地了解你的处理

$VideoProcessorEx | 获取会员

$VideoProcessor | 获取会员

显然你有两个VideoController实体,一个是Intel HD Graphics,另一个是Quadro 1000M。如果你运行普通$VideoController.VideoProcessor你会得到两个字符串而不是一个。所以这里有一个混乱,你错过了get-wmiobject -class CIM_VideoController返回的第一个实体,因为它向上滚动得太高而不可见,因此你正在将两个不同的值解释为一个值。

最新更新