【问题标题】:Nested foreach loops to install printers用于安装打印机的嵌套 foreach 循环
【发布时间】:2017-05-29 07:51:29
【问题描述】:

我需要将多台打印机安装到多台服务器上,并且想要编写脚本以便只需要配置一次。

我正在使用 PowerShell 查询 2 个 CSV 文件; 1 获取要安装打印机的计算机列表,另一个列出所需打印机的名称、IP、驱动程序、位置。我正在使用 2 个 foreach 循环来完成此操作,并使用 break 尝试使其正确循环。

目前,break :outer 是第一台 PC,它安装了所有打印机。如果我将它移到foreach ($printer in $printers) 循环内,它只会将第一台打印机安装到所有计算机上。

感谢您提供的任何帮助。

$computerfile = Import-Csv C:\computerlist.csv
$printers = Import-Csv C:\printers2.csv 

foreach ($computer in $computerfile) {
    "computer: $computer"
    :outer
    foreach ($printer in $printers) {
        Add-PrinterPort -ComputerName $computer.Name -Name $printer.IP -PrinterHostAddress $printer.IP
        Add-Printer -ComputerName $computer.Name -Name $printer.Name -DriverName $printer.Driver -PortName $printer.IP -ShareName $printer.Name -Location $printer.Location
        Set-printer -ComputerName $computer.Name -Name $printer.Name -Shared $false -Published $true
    }
    break :outer
}

【问题讨论】:

  • 你为什么要使用 break :outer ?
  • break 语句可用于立即退出 ForeachForWhileDoSwitch 语句。完全省略它。
  • 除了可能做一些错误处理之外,这可能是一个好主意,以防出现远程处理或权限问题.....这里没有理由过早地打破循环。对于每台服务器安装每台打印机。删除标签和休息。你有错误吗?不知道这里的问题是什么。
  • YanivK - 我不认为 2 个 foreach 循环会在不分离循环的情况下循环遍历所有 PC,但你是对的;通过删除 ":outer" 和 "break :outer" 行,代码可以正常工作。谢谢。

标签: loops powershell foreach scripting break


【解决方案1】:

请从您的代码中删除 break :outer。

发生的情况是第一个循环开始运行,并且由于中断而进入第二个循环一次!,并跳转到下一台计算机。

【讨论】:

  • 我很高兴 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 2019-02-27
  • 2012-09-14
  • 2015-07-15
相关资源
最近更新 更多