You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本问题:无法按AD部门信息筛选安装打印机

问题分析与修正方案

核心问题

你的脚本会添加所有打印机,根源在于以下两点:

  1. 遍历所有AD用户而非当前登录用户
    你用Get-ADUser -filter *获取了域内所有用户,然后循环每个用户的部门信息。只要有一个用户属于某部门,该部门的打印机安装代码就会执行一遍。最终所有部门的打印机都会被添加,完全没实现“为当前用户匹配对应部门打印机”的逻辑。

  2. 打印机路径格式错误
    你写的\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:15:32