索引超出范围powershell

时间:2015-05-18 15:39:16

标签: arrays powershell indexing range out

我有一个脚本,用于构建一个GUI,其中包含将由用户选择的打印机列表。 这些打印机也在这样构建的CSV文件中: 电脑(打印机名称); IP XXXX; X.X.X.X

我想收集名为x的数组中的所有选定值 然后我想获取CSV中与所选项对应的每个条目,并将其放在另一个名为y的数组中 最后,我将y数组导出为一个新的CSV,用于在域上安装打印机。 我试图直接从第二步到最后一步,但我不能。

以下是代码的一部分:

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

    y=@()
    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"的对象中索引。类型。

1 个答案:

答案 0 :(得分: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以符合$ Selection中的任何对象。您可以通过$ObjListbox.SelectedItems | Get-Member对此进行测试,并检查具有所选项目名称的属性的成员,然后假设名称与CSV中的名称相匹配,那么您应该很好。

  • (奖励说明)即使在您的家庭实验室,将数据存储在本地管理员中并作为本地管理员运行也是不好的做法。您的错误将具有本地管理员的能力,并且您的用户将无法运行脚本,因为源/结果文件位于管理员的桌面中。