【问题标题】:What does -expand really mean with WMI (Powershell Select-Object)-expand 对 WMI(Powershell 选择对象)的真正含义是什么
【发布时间】:2015-07-30 17:10:05
【问题描述】:

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=  

所以我的部分问题是这个。 VideoProcessor 真的是“Quadro 1000M”或“Intel(R) HD Graphics Family Quadro 1000M”,还是两者都正确,一个是短名称,一个是长(或扩展)名称?如何将短名称检索到变量?

根据“halfknot”的回复,我添加了这个:

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”。

【问题讨论】:

    标签: wmi powershell-4.0


    【解决方案1】:

    当您扩展一个属性 (-expandproperty) 并将其分配给一个变量时,您实际上是在说将该属性的值作为字符串提供给我。反对将对象本身分配给变量。我的猜测是 VideoProcessor 是一个具有多个属性的对象。

    如果您对每个项目进行 gm,我相信您会更好地了解您处理的内容

    $VideoProcessorEx |获取会员

    $视频处理器 |获取会员

    【讨论】:

    • 用你的想法更新了我的问题......仍然不清楚。它显然是返回一个对象,而不是一个字符串。看起来可能 -expandproperty 正在为该对象调用 .ToString() ?
    • 运行这个.. "VideoController.VideoProcessor | gm" 并记下属性/noteproperties
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2017-08-14
      • 1970-01-01
      • 2017-05-06
      • 2012-03-30
      • 2011-10-10
      相关资源
      最近更新 更多