【发布时间】:2018-02-08 21:41:42
【问题描述】:
我在这里找到了有关 Powershell 中 foreach 循环的一些很好的示例,但是对于我正在做的事情,我无法完全理解 foreach 循环。
在从一台 Windows 打印服务器迁移到另一台时,我发现了处理打印机迁移的出色脚本,但我面临的挑战是我正在从 Novell iPrint 服务器迁移到 Windows 服务器。
问题在于 iPrint 打印机的打印机名称或共享名称(或任何打印机属性)不是主机名,所以我必须想出一些带有 iPrint 名称和打印机主机名的转换表。
最初,我只想让我的转换表的第 2 列让它执行我的 powershell 命令来安装网络打印机,这会使事情变得更容易。
我正在尝试创建一个登录脚本来查询计算机上安装的打印机,并让它针对具有 iPrint 名称和主机名的 CSV 执行“foreach”循环。
csv 1
安装的iprintprintername1 安装iprintprintername2 安装iprintprintername3printtranslationtable.csv
第 1 列 第 2 列 iprintprintername1 主机名printer1 iprintprintername2 主机名printer2 iprintprintername3 主机名printer3 iprintprintername4 主机名printer4这是我到目前为止得到的,但无法让它工作。任何帮助将不胜感激!
$printers = @(Get-wmiobject win32_printer)
$path = "\\networkdrive\printtranslationtable.csv"
$printertranslation = Import-Csv -path $path
foreach ($iprintprinter in $printtranslationtable) {
foreach ($name in $csv1) {
if ($name -eq $printtranslationtable.column1) {
Write-Host $newPrinter = $printtranslationtable.column2
}
}
}
更新 所以我能够调整@TheMadTechnician 建议的脚本,并能够让这个 PS 脚本在我的环境中工作。我要做的是检查是否安装了新打印机,如果它们只是退出脚本。这就是我所拥有的,但无法让它退出或中断。我也尝试将新打印机写入文本文件,但没有必要,我希望它停止执行脚本。
if (($printers.name -like "\winprint*") -eq $true) { $printers.name -like "\winprint\" |输出文件 -FilePath "C:\windowsprinters.txt" -Append {中断} {退出} }
【问题讨论】:
标签: powershell