Powershell と C# を操作するために見つけたコード例の大部分は、Powershell スクリプトからデータを返すために PSobject を使用しています。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 クラスのいずれかに変更できる汎用的なままにしておきたいと思いますが、それでも機能します。