これには、DataTable のように重いデータ構造を使用する必要はありません。必要なのは、配列やジェネリックのような単純なコレクションだけですPSObject
。以下は、上記のスクリプトを書き換えResult
、最初のコンピューターの を に設定しComplete
ます。
Function CheckWMI {
Param (
[Parameter(Mandatory=$True)]
[string[]]$Computers
)
$CheckWMIResults = @();
ForEach ($Computer in $Computers) {
$TempResults = New-Object PSObject;
$TempResults | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $Computer;
$TempResults | Add-Member -MemberType NoteProperty -Name "Attempts" -Value 0;
$TempResults | Add-Member -MemberType NoteProperty -Name "Result" -Value "Incomplete";
$CheckWMIResults += $TempResults;
}
$CheckWMIResults;
}
$Results = CheckWMI -Computers "192.168.1.8","192.168.1.7","192.168.1.6"
$Results[0].Result = "Complete";
$Results;
型チェックが必要な場合 (これはによって提供されDataTable
ます)、独自の型を定義してください。
add-type @"
public class WMIResults {
public string ComputerName;
public int Attempts;
public string Result;
}
"@
Function CheckWMI {
Param (
[Parameter(Mandatory=$True)]
[string[]]$Computers
)
$CheckWMIResults = @();
ForEach ($Computer in $Computers) {
$TempResults = New-Object WMIResults;
$TempResults.ComputerName = $Computer
$TempResults.Attempts = 0;
$TempResults.Result = "Incomplete";
$CheckWMIResults += $TempResults;
}
$CheckWMIResults;
}
$Results = CheckWMI -Computers "192.168.1.8","192.168.1.7","192.168.1.6"
$Results[0].Result = "Complete";
$Results;
この 2 番目の方法の詳細については、http://blogs.msdn.com/b/powershell/archive/2009/03/11/how-to-create-an-object-in-powershell.aspxを参照してください (Get-Help Add-Type
些細なケースではクラスの代わりに構造体を使用しますが、通常はクラスの方が適しています)。