2017-06-15 21 views
1

配列$ PerfListに値を割り当て、Out-Gridviewを使用して表示する以下のスクリプトを作成しました。選択が行われると、その選択は$ Serverに渡されますが、$ Serverには渡されません。私は次のエラーを取得する:次のようにOut-Gridviewが変数に選択を渡しません

Index operation failed; the array index evaluated to null. At C:\CreateStart.ps1:7 char:21 + foreach { $PerfList[$_.IDX] }) + ~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : NullArrayIndex

私のコードは次のとおりです。

$PerfList = @("Primary", "SQL", "APE", "Netflow", "AWE") 
$IDX = 0 
$Server = ($(foreach ($item in $PerfList){ 
      $item | select @{l='#';e={$IDX}},@{l='Name';e={$PerfList[$IDX]}} 
      $IDX++}) | 
      Out-Gridview -Title 'What server is this?' -OutputMode Single | 
      foreach { $PerfList[$_.IDX] }) 

$TaskName = Switch ($Server) 
       { 
        'Primary' {'SolarWinds_App'} 
        'SQL' {'SolarWinds_SQL'} 
        'APE' {'SolarWinds_APE'} 
        'Netflow' {'SolarWinds_Netflow'} 
        'AWE' {'SolarWinds_AWE'} 
       } 

Switch ($Server) { 
    'Primary' { 
    logman import $TaskName -xml "Primary.xml" -y 
    logman start $TaskName 
    } 

    'SQL' { 
    logman import $TaskName -xml "SQL.xml" -y 
    logman start $TaskName 
    } 

    'APE' { 
    logman import $TaskName -xml "APE.xml" -y 
    logman start $TaskName 
    } 

    'Netflow' { 
    logman import $TaskName -xml "Netflow.xml" -y 
    logman start $TaskName 
    } 

    'AWE' { 
    logman import $TaskName -xml "AWE.xml" -y 
    logman start $TaskName 
    } 
} 

任意の助けをいただければ幸いです:)

答えて

2

をするだけインデントときちんと物事を保つことの重要性を示すことを行きます。

最初に$IDX++があなたのSelectステートメントの範囲内にあるので、エラーになるはずです。

第2に、Foreach (x in y) { }ステートメントからパイプすることはできません。また、

何よりも意味をしかし、取得するとき、私はSelectを好む:

第三に、あなたはそれで参照する必要があるので、それは「#」と呼ばれています、「IDE」という項目にプロパティを追加していませんオブジェクトから特定のプロパティを取得します。

これはトリックを行う必要があります。

$PerfList = @("Primary", "SQL", "APE", "Netflow", "AWE") 
$IDX = 0 
$Server = foreach ($item in $PerfList) 
{ 
    $item | select @{ l='#';e={ $IDX } },@{ l='Name';e={ $PerfList[$IDX] } } 
    $IDX++ 
} 

$Server = $Server | Out-Gridview -Title 'What server is this?' -OutputMode Single | 
    Select -ExpandProperty "Name" 
+0

はこのためにどうもありがとうございます、それは間違いなく、エラーなしに今の上に私がやった唯一の事を選択を通過しているが「名前」を取るために選択を変更し、 'はなかったです# ' しかし、エラーがなくても、項目を選択してOKを押すと、選択した内容が表示されますが、それ以上スクリプトには移動しません。変更したコードの下のステップは実行されません – Dax

+0

Yeeah元のスクリプトで試した$ Server変数の代わりにコンソールに値が送信されているためです。答えを修正しました。 –

+0

私はまだPowershell(と全体としてコーディング)で本当に新しいですので、ありがとう!それは今100%働いています – Dax

関連する問題