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

登录缓慢时如何延长添加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

火山引擎 最新活动