0

誰でもPowerShellテーブルについて助けてもらえますか?

スクリプトの作業部分

Function CheckWMI {
Param (
    [Parameter(Mandatory=$True)]
    $Computers

)
        $CheckWMIResults = New-Object system.Data.DataTable
        $Function = $CheckWMIResults.columns.add("ComputerName", [System.Type]::GetType("System.String") )
        $Function = $CheckWMIResults.columns.add("Attempts", [System.Type]::GetType("System.Int32") )
        $Function = $CheckWMIResults.columns.add("Result", [System.Type]::GetType("System.String") )

    ForEach ($Computer in $Computers) {
        $CheckWMIResults.Rows.Add($Computer,"0","Incomplete")
    }

}

CheckWMI "192.168.1.8","192.168.1.7","192.168.1.6"

ご覧のとおり、各 IP アドレスを取得し、それらに対して個別の行を作成します。

これらの行の 1 つを選択して、2 行目の count 列などを更新するにはどうすればよいでしょうか。

4

1 に答える 1

3

これには、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些細なケースではクラスの代わりに構造体を使用しますが、通常はクラスの方が適しています)。

于 2013-04-08T12:58:10.350 に答える