Powershell:动态转换Get-WMIObject到PSObject
本文关键字:PSObject Get-WMIObject 转换 动态 Powershell | 更新日期: 2023-09-27 18:08:37
我能找到的与Powershell和c#一起工作的大多数代码示例都涉及使用pobject从Powershell脚本返回数据。关于创建PSObject的大量示例涉及从Get-WMIObject获取数据并将其转换为PSObject。这是通过手动指定要从结果中传递到新PSObject的每个属性来完成的。是否有无论如何动态转换从Get-WMIObject(我认为是一个管理对象)到Powershell中的PSObject的结果?
基本上我想要一个函数,无论我使用什么类的WMIObject,我都能够转换成PSObject。我遇到过。psobject。可以在Get-WMIObject调用的结果上使用的成员调用(只是. 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类,它仍然会工作。
"标准属性"存储在原始对象PSStandardMembers
上隐藏的属性中。
$obj = gwmi Win32_ComputerSystem
$psObject = $obj | select $obj.PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames
仅将标准成员投影到自定义PSObject中。