2015-05-18 231 views
0

我有一個腳本,用於構建一個GUI,其中包含用戶將要選擇的打印機列表。 這些打印機也是這樣構建的CSV文件: 計算機(打印機的名稱); IP XXXX,XXXX索引超出範圍powershell

我想收集所有在名爲x 然後我想在對應於所選項目的CSV每個條目,並把它放在另一個數組名爲Ÿ 最後,我的陣列選定的值將y數組導出到將用於在域中安裝打印機的新CSV中。 我試圖從第二步直接走到最後一步,但我不能。

下面是部分代碼:

$OKButton.Add_Click({ 
     foreach ($objItem in $objListbox.SelectedItems) 
      {$x += $objItem} 

    [email protected]() 
    for ($i=0; $i -lt $x.length; $i++) 
    { 
     $y[$i]=Import-Csv C:\Users\Administrateur\Desktop\Classeur33.csv | Where-Object {$_.Computer -eq $x[$i]} 
    } 


$y > C:\Users\Administrateur\Desktop\allezjoue.csv 

我試圖用另一種語言的3 x值數組來做到這一點,它工作得很好,但我真的需要保留,可以讓列表框用戶選擇他想要的打印機。

Powershell的總是返回我的「索引超出範圍」 我試圖把「$ Y = $ X」,所以它們具有相同的範圍,但我這樣做,當它返回,我可以在一個對象不是指數,有「System.string」類型。

+0

我將從顯而易見的評論開始,$ x和$ y是可怕的變量名稱。接下來我會問,究竟是什麼讓你相信$ x是一個數組?在您發佈的代碼中,至少不要將其初始化爲數組。 – EBGreen

+0

我在按鈕上的事件之前完成了它。 – Sami

+0

'Where-Object {$ _。Computer -eq $ x [$ i]}' 您正在使用-eq比較將一個屬性值與整個數組進行比較。真誠地懷疑這種情況永遠是真的。 – Xalorous

回答

1
  • 這是PowerShell,非常面向對象。使用手頭的對象和集合。
  • 描述性變量名稱是你的朋友。
  • $objListbox.SelectedItems已經是對象的集合。
  • 把它放在一個變量中,並用Foreach-Object又名foreach循環。
  • Import-CSV返回一組對象。

    $Selection = $ObjListbox.SelectedItems 
    $printers = Import-CSV 'C:\Users\Administrateur\Desktop\Classeur33.csv' 
    foreach ($chosen in $Selection) { 
        $printers = $printers | where-object { $_.Computer -eq $Chosen.Name } 
        } 
    $printers | Export-CSV 'C:\Users\Administrateur\Desktop\allezjoue.csv' -NoTypeInformation 
    

$ Chosen.Name應該被編輯與您在$選擇得到任何對象一致。您可以通過$ObjListbox.SelectedItems | Get-Member來測試此項,並檢查成員的名稱與所選項目的名稱,然後假設名稱與CSV中的內容相匹配,則應該很好。

  • (附加說明)即使在家庭實驗室,以本地管理員身份存儲數據並作爲本地管理員運行也是不好的做法。您的錯誤將具有本地管理員的權力,並且您的用戶將無法運行腳本,因爲源/結果文件位於管理員桌面。