【发布时间】:2015-07-30 04:59:37
【问题描述】:
我有一个脚本,它构建了一个带有用户将选择的打印机列表的 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:\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”类型的对象中建立索引。
【问题讨论】:
-
我将从明显的注释开始,$x 和 $y 是可怕的变量名。接下来我会问到底是什么让你相信 $x 是一个数组?在您发布的代码中,至少您没有将其初始化为数组。
-
为什么每次 for 循环运行时都导入 csv?我会首先只加载一次 csv(在一个变量中),然后在每个循环中读取它。
-
我已经在按钮上的事件之前完成了。
-
Where-Object {$_.Computer -eq $x[$i]}您正在使用 -eq 比较将一个属性值与整个数组进行比较。真诚地怀疑这种情况是否会成立。 -
关于索引超出范围的具体问题的答案在这里:stackoverflow.com/questions/226596/…。您仍然应该阅读此页面上的许多其他好建议。
标签: arrays powershell indexing range out