2017-06-15 60 views
1

我創建了下面的腳本,它將值賦給數組$ PerfList並使用Out-Gridview顯示它們。一旦選擇完成,它應該將選擇傳遞給$ 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語句中,所以應該是錯誤的。

其次,您不能通過Foreach (x in y) { }聲明進行管道操作。

第三你不能將屬性添加到名爲「IDE」的項目,這就是所謂的「#」,所以你需要通過引用:

而且,比什麼都重要的語義,但是我更喜歡Select得到一個時來自對象的特定屬性。

這應該做的伎倆:

$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

非常感謝你這一點,它肯定是經過選擇結束了,沒有錯誤,只是我做的事情是改變選擇採取「名稱」,而不是「 #' 但是,現在即使沒有錯誤,在選擇一個項目並按下確定後,它會顯示我選擇的內容,但不會進一步移動到腳本中。它不會在您更改的代碼 – Dax

+0

Yeeah下執行以下步驟,因爲該值將發送到控制檯,而不是您在原始腳本中嘗試使用的$ Server變量。修改了答案。 –

+0

我仍然是Powershell的新手(整體編碼),所以謝謝!它現在工作100% – Dax