PowerShell脚本问题:无法按AD部门信息筛选安装打印机
问题分析与修正方案
核心问题
你的脚本会添加所有打印机,根源在于以下两点:
遍历所有AD用户而非当前登录用户
你用Get-ADUser -filter *获取了域内所有用户,然后循环每个用户的部门信息。只要有一个用户属于某部门,该部门的打印机安装代码就会执行一遍。最终所有部门的打印机都会被添加,完全没实现“为当前用户匹配对应部门打印机”的逻辑。打印机路径格式错误
你写的\LMSMAN-Print01\MH18缺少转义,PowerShell里UNC路径需要用双引号包裹并写成"\\LMSMAN-Print01\MH18",否则会被解析为无效路径(不过你说能添加所有打印机,可能环境里自动处理了,但这是规范问题)。
修正后的脚本
以下是实现“为当前登录用户安装对应部门打印机”的正确脚本:
# 获取当前登录用户的AD信息 $currentUser = Get-ADUser -Identity $env:USERNAME -Properties Department $userDep = $currentUser.Department # 检查部门并安装对应打印机(先判断驱动/打印机是否已存在,避免重复操作) switch ($userDep) { "Information Technology" { # 检查驱动是否存在,不存在再安装 if (-not (Get-PrinterDriver -Name "KONICA MINOLTA C4050iSeriesPCL" -ErrorAction SilentlyContinue)) { Add-PrinterDriver -Name "KONICA MINOLTA C4050iSeriesPCL" } if (-not (Get-PrinterDriver -Name "KONICA MINOLTA C360iSeriesPCL" -ErrorAction SilentlyContinue)) { Add-PrinterDriver -Name "KONICA MINOLTA C360iSeriesPCL" } # 检查打印机是否已连接,不存在再添加 if (-not (Get-Printer -Name "\\LMSMAN-Print01\MH18" -ErrorAction SilentlyContinue)) { Add-Printer -ConnectionName "\\LMSMAN-Print01\MH18" } if (-not (Get-Printer -Name "\\LMSMAN-Print01\MH16" -ErrorAction SilentlyContinue)) { Add-Printer -ConnectionName "\\LMSMAN-Print01\MH16" } break } "Supply Chain & Logistics" { if (-not (Get-PrinterDriver -Name "KONICA MINOLTA 5000i PCL" -ErrorAction SilentlyContinue)) { Add-PrinterDriver -Name "KONICA MINOLTA 5000i PCL" } if (-not (Get-PrinterDriver -Name "KONICA MINOLTA C360iSeriesPCL" -ErrorAction SilentlyContinue)) { Add-PrinterDriver -Name "KONICA MINOLTA C360iSeriesPCL" } if (-not (Get-Printer -Name "\\LMSMAN-Print01\MH21" -ErrorAction SilentlyContinue)) { Add-Printer -ConnectionName "\\LMSMAN-Print01\MH21" } if (-not (Get-Printer -Name "\\LMSMAN-Print01\MH05" -ErrorAction SilentlyContinue)) { Add-Printer -ConnectionName "\\LMSMAN-Print01\MH05" } if (-not (Get-Printer -Name "\\LMSMAN-Print01\MH33" -ErrorAction SilentlyContinue)) { Add-Printer -ConnectionName "\\LMSMAN-Print01\MH33" } break } "Customer Support" { if (-not (Get-PrinterDriver -Name "KONICA MINOLTA C360iSeriesPCL" -ErrorAction SilentlyContinue)) { Add-PrinterDriver -Name "KONICA MINOLTA C360iSeriesPCL" } if (-not (Get-Printer -Name "\\LMSMAN-Print01\MH10" -ErrorAction SilentlyContinue)) { Add-Printer -ConnectionName "\\LMSMAN-Print01\MH10" } break } default { Write-Host "当前用户部门[$userDep]无对应打印机配置" } }
额外优化说明
- 使用
switch代替多个if,代码更简洁易维护 - 添加了驱动和打印机的存在性检查,避免重复执行安装操作,减少报错和冗余
- 用
$env:USERNAME获取当前登录用户名,精准定位到需要安装打印机的用户
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

