我可以找到的与Powershell和C#一起使用的大多数代码示例都涉及使用PSobjects从Powershell脚本返回数据。创建PSObject的大量示例涉及从Get-WMIObject获取数据并将其转换为PSObject。这是通过手动指定要从结果中携带到新PSObject中的每个属性来完成的。反正是否有动态将Get-WMIObject(我认为是ManagementObject)的结果转换为Powershell中的PSObject?
基本上我想要一个函数,无论我使用什么类的WMIObject,我都能够转换成PSObject。我遇到了可以用于Get-WMIObject调用结果的.PSObject.Members调用(只是.PSObject似乎实际上没有任何效果)。所以我能够做到以下几点:
$class = "Win32_ComputerSystem"
$psObject = New-Object PSObject
$properties = (Get-WMIObject -Class $class).PSObject.Members | where membertype -match "Property"
foreach($property in $properties)
{
$psObject | Add-Member NoteProperty $property.name -Value $property.value
}
$psObject
但这给了我更大量的结果,我通常只是调用Get-WMIObject。有没有人知道更好的转换方式或进一步减少这些结果的方法更接近标准输出?我希望它保持通用,我可以将$ class的值更改为任何其他WMIObject类,它仍然可以工作。
答案 0 :(得分:1)
“标准属性”存储在隐藏在原始对象PSStandardMembers
上的属性中。
$obj = gwmi Win32_ComputerSystem
$psObject = $obj | select $obj.PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames
仅将标准成员投影到自定义PSObject中。