索引超出powershell的范围



我有一个脚本,它构建了一个GUI,其中包含将由用户选择的打印机列表。这些打印机也是在CSV文件上构建的,如下所示:电脑(打印机名称);知识产权xxxx; x.x.x.x

我想收集一个名为x的数组中所有选定的值然后,我要获取CSV中与所选项对应的每个条目,并将其放入另一个名为y的数组中最后,我将y数组导出到一个新的CSV中,该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:UsersAdministrateurDesktopClasseur33.csv | Where-Object {$_.Computer -eq $x[$i]}
    }

$y > C:UsersAdministrateurDesktopallezjoue.csv

我试过在另一个脚本中使用3个值的x数组,它工作得很好,但我真的需要保留列表框,允许用户选择他想要的打印机。

Powershell总是返回"Index out of range"我试图把"$y=$x",所以他们有相同的范围,但当我这样做,它返回,我不能索引的对象有"系统。字符串"类型。

  • 这是PowerShell,非常面向对象。使用手边的对象和集合。
  • 描述性变量名是您的朋友。
  • $objListbox.SelectedItems已经是一个对象集合。
  • 把它放在一个变量中,用Foreach-Object也就是foreach来循环它。
  • Import-CSV返回对象集合。

    $Selection = $ObjListbox.SelectedItems  
    $printers = Import-CSV 'C:UsersAdministrateurDesktopClasseur33.csv'  
    foreach ($chosen in $Selection) { 
        $printers = $printers | where-object { $_.Computer -eq $Chosen.Name } 
        } 
    $printers | Export-CSV 'C:UsersAdministrateurDesktopallezjoue.csv' -NoTypeInformation
    

选择美元。应该编辑名称,以符合您在$Selection中获得的任何对象。您可以通过$ObjListbox.SelectedItems | Get-Member测试这一点,并检查具有所选项目名称的属性的成员,然后假设名称与CSV中的名称匹配,应该就可以了。

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

相关内容

  • 没有找到相关文章

最新更新