我有一个脚本,用于构建一个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"的对象中索引。类型。
答案 0 :(得分:1)
$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
$ObjListbox.SelectedItems | Get-Member
对此进行测试,并检查具有所选项目名称的属性的成员,然后假设名称与CSV中的名称相匹配,那么您应该很好。