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