登录缓慢时如何延长添加Windows打印机连接的超时时间?
解决登录时AddWindowsPrinterConnection超时失败的问题
这个场景我之前帮同事排查过好几次——登录阶段网络资源还在初始化,默认的SMB超时阈值太低,导致打印机连接请求直接失败。下面几个方法应该能帮到你:
1. 调整SMB客户端超时注册表项
Windows默认的SMB连接超时比较短(通常3秒左右),登录慢的时候根本等不到服务器响应。你可以通过注册表修改延长这个时间:
- 打开注册表编辑器(
regedit.exe),定位到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters - 新建或修改DWORD(32位)值:
ConnectionTimeout:设置为你需要的毫秒数,比如10000(10秒),控制建立SMB连接的超时时间。KeepConn:设置为秒数,比如300(5分钟),控制保持SMB连接的时长,避免连接过早断开。
- 修改后重启电脑生效。
2. 给VBScript添加重试机制
即使延长了系统级超时,偶尔还是会因为网络波动失败,给脚本加个重试逻辑更稳妥:
Set objNetwork = CreateObject("WScript.Network") strPrinter = "\\server\printer" maxRetries = 3 waitInterval = 2000 ' 每次重试间隔2秒 For retry = 1 To maxRetries On Error Resume Next objNetwork.AddWindowsPrinterConnection strPrinter If Err.Number = 0 Then WScript.Echo "打印机连接成功!" Exit For Else WScript.Sleep waitInterval If retry = maxRetries Then WScript.Echo "重试" & maxRetries & "次后仍失败:" & Err.Description End If End If On Error GoTo 0 Next
3. 延迟脚本执行,等网络完全就绪
登录脚本有时候会在网络适配器还没获取到IP、LanmanWorkstation服务还没启动时就运行。可以先等关键服务就绪再执行连接:
' 等待LanmanWorkstation服务启动(SMB依赖这个服务) Set wmiService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Do Set serviceList = wmiService.ExecQuery("SELECT State FROM Win32_Service WHERE Name='LanmanWorkstation'") For Each service In serviceList If service.State = "Running" Then Exit Do Next WScript.Sleep 1000 ' 每秒检查一次 Loop ' 现在执行打印机连接 Set objNetwork = CreateObject("WScript.Network") objNetwork.AddWindowsPrinterConnection "\\server\printer"
另外提个小细节:如果是用组策略推送登录脚本,可以试试把脚本放在用户配置下的登录脚本里,并且确保组策略的“登录脚本的延迟处理”选项开启,它会让脚本等网络完全初始化后再运行。
内容的提问来源于stack exchange,提问作者js2010




