我有一个脚本,它构建了一个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中的名称匹配,应该就可以了。
- (附加说明)存储数据并作为本地管理员运行是不好的做法,即使在您的家庭实验室。你的错误将拥有本地管理员的权力,并且你的用户将无法运行脚本,因为源/结果文件在管理员的桌面。