2014-06-13 76 views
0

我可以找到的大多數代碼示例與Powershell和C#一起使用都涉及使用PSobjects從Powershell腳本返回數據。大量有關創建PSObject的示例涉及從Get-WMIObject獲取數據並將其轉換爲PSObject。這是手動完成的,從結果中指定每個要結轉到新PSObject中的屬性。反正有動態轉換來自Get-WMIObject(我相信是一個ManagementObject)的結果到Powershell中的PSObject的結果嗎?Powershell:將Get-WMIObject動態轉換爲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類,它仍然可以工作。

回答

1

「標準屬性」存儲在原始對象PSStandardMembers上隱藏的屬性中。

$obj = gwmi Win32_ComputerSystem 
$psObject = $obj | select $obj.PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames 

只將標準成員投影到自定義PSObject中。