从打印服务器提取权限并应用至服务器所有打印机的技术求助
批量同步打印服务器打印机权限的PowerShell解决方案
我之前也碰到过类似的需求,用PowerShell结合CIM(Common Information Model)就能完美解决这个批量权限同步的问题。下面是完整的实现方案,你可以直接根据自己的环境调整使用:
核心实现思路
- 先从你指定的参考打印机中提取完整的安全权限配置
- 遍历目标打印服务器上的所有其他打印机
- 将参考权限逐一应用到这些打印机,自动跳过参考打印机本身
完整PowerShell脚本
# -------------------------- 配置参数 -------------------------- $printServerName = "你的打印服务器名称" # 本地服务器可填"localhost"或计算机名 $referencePrinterName = "参考打印机的名称" # 用来提取权限模板的目标打印机 # ------------------------------------------------------------- # 1. 获取参考打印机的安全描述符 $referencePrinter = Get-CimInstance -ComputerName $printServerName -ClassName Win32_Printer -Filter "Name='$referencePrinterName'" if (-not $referencePrinter) { Write-Error "❌ 找不到指定的参考打印机: $referencePrinterName" exit 1 } $securityDescriptor = $referencePrinter | Invoke-CimMethod -MethodName GetSecurityDescriptor # 2. 获取服务器上的所有打印机,排除参考打印机本身 $allPrinters = Get-CimInstance -ComputerName $printServerName -ClassName Win32_Printer | Where-Object { $_.Name -ne $referencePrinterName } # 3. 批量将参考权限应用到其他打印机 foreach ($printer in $allPrinters) { Write-Host "`n正在处理打印机: $($printer.Name)" try { # 调用WMI方法设置打印机安全描述符 $result = $printer | Invoke-CimMethod -MethodName SetSecurityDescriptor -Arguments @{SecurityDescriptor = $securityDescriptor.Descriptor} if ($result.ReturnValue -eq 0) { Write-Host "✅ 权限同步成功: $($printer.Name)" } else { Write-Warning "⚠️ 权限同步失败,返回码: $($result.ReturnValue),打印机: $($printer.Name)" } } catch { Write-Error "❌ 处理打印机 $($printer.Name) 时发生错误: $_" } }
关键注意事项
- 必须以管理员权限运行脚本,否则会因权限不足无法修改打印机安全设置
- 如果操作远程服务器,确保你的账户在目标服务器上拥有打印机管理权限
- 脚本中的
ReturnValue返回码0表示操作成功,其他返回码可以参考Win32_Printer的官方文档排查问题 - 若需要过滤特定打印机(比如只同步某类名称的打印机),可以在
Where-Object语句中添加额外筛选条件,例如:Where-Object { $_.Name -ne $referencePrinterName -and $_.Name -like "*部门打印机*" }
内容的提问来源于stack exchange,提问作者Slyons




