You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

从打印服务器提取权限并应用至服务器所有打印机的技术求助

批量同步打印服务器打印机权限的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

火山引擎 最新活动