系统账户下通过SCCM导入打印机配置失败的解决方案咨询
我之前也踩过系统账户上下文操作打印机配置的坑,结合你的情况,给你几个可行的排查和解决方向:
先确认系统账户的文件访问权限
虽然你说文件在预期位置,但系统账户对C:\Temp的权限可能和普通管理员不同。可以先验证系统账户能否访问文件:用psexec -s cmd.exe打开系统账户的命令提示符,执行dir C:\Temp\Zebra.dat,确认能正常读取。如果权限有问题,给NT AUTHORITY\SYSTEM添加该文件夹的读写权限。调整PrintUIEntry命令参数
系统账户下运行PrintUIEntry可能需要明确指定本地机器,试试修改命令:rundll32 printui.dll,PrintUIEntry /Sr /n "Zebra" /a "C:\Temp\Zebra.dat" /m "\\%COMPUTERNAME%" /q其中
/m指定目标机器,/q静默执行(系统账户无桌面交互环境,弹窗会导致执行失败)。还可以加/G参数生成日志排查错误:rundll32 printui.dll,PrintUIEntry /Sr /n "Zebra" /a "C:\Temp\Zebra.dat" /G "C:\Temp\printui_import.log"运行后查看日志里的具体错误,比如是否存在权限不足或打印机识别问题。
尝试在当前用户上下文执行导入
你提到可以切换到当前用户上下文运行,这里有个无需第三方工具的方法:用schtasks创建临时任务,在当前登录用户的会话中执行导入命令。示例BAT脚本如下:@echo off :: 获取当前活跃登录的用户名 for /f "tokens=2 delims=\" %%a in ('query user ^| findstr "Active"') do set CURRENT_USER=%%a :: 创建临时任务 schtasks /create /tn "Temp_Printer_Import" /tr "rundll32 printui.dll,PrintUIEntry /Sr /n \"Zebra\" /a \"C:\Temp\Zebra.dat\"" /sc once /st 00:00 /ru "%CURRENT_USER%" /f :: 执行任务 schtasks /run /tn "Temp_Printer_Import" :: 等待执行完成 timeout /t 5 /nobreak >nul :: 删除临时任务 schtasks /delete /tn "Temp_Printer_Import" /f这个方法会在当前用户的上下文里运行导入命令,避开系统账户的权限限制。
排查配置文件的用户/机器级别属性
有些打印机配置是用户级别的(比如默认纸张大小、打印首选项),而非机器级别。如果你的Zebra.dat包含这类用户级设置,系统账户导入后普通用户是看不到的。这种情况下,需要在每个用户登录时执行导入操作,可通过SCCM用户登录脚本或组策略登录脚本部署。尝试用VBS脚本替代PrintUIEntry
微软提供的prncnfg.vbs脚本也支持导入打印机配置,试试系统账户下运行:cscript %windir%\System32\Printing_Admin_Scripts\zh-CN\prncnfg.vbs -t -p "Zebra" -z "C:\Temp\Zebra.dat"注意将
zh-CN替换为你的系统语言目录(比如en-US),这个脚本的权限要求可能和PrintUIEntry不同,说不定能绕过系统账户的限制。
备注:内容来源于stack exchange,提问作者Christian Leber

