【问题标题】:check if network drive exists and mount it otherwise check until it's available检查网络驱动器是否存在并安装它,否则检查它直到它可用
【发布时间】:2015-03-26 03:43:47
【问题描述】:

我需要帮助创建一个 VBScript 来执行以下操作:

启动名为“NAS PM 服务”的服务

net start "NAS PM service"

然后检查\192.168.1.1\drive1是否存在

IF EXIST \192.168.1.1\drive1

如果是,将其映射到指定登录名/密码的驱动器:

net use M: \192.168.1.1\Disk_1 password /USER:admin

如果它还不存在,请等待 10 秒后再尝试再次映射它(直到成功)。

我或多或少知道如何使用ping 等待批处理文件来执行此操作,但我宁愿使用没有ping 的小而干净的VBScript。

【问题讨论】:

    标签: vbscript wait drive


    【解决方案1】:

    在连接尝试期间启用错误处理,并在您不断收到错误时继续:

    Set net = CreateObject("WScript.Network")
    
    On Error Resume Next
    Do
      Err.Clear
      net.MapNetworkDrive "M:", "\\192.168.1.1\Disk_1", False, "admin", "password"
      If Err Then WScript.Sleep 10000
    Loop While Err
    On Error Goto 0
    
    WScript.Echo "Drive connected."
    

    不过,限制最大连接尝试次数可能是个好主意,否则如果远程共享从未上线,脚本将永远循环。

    服务可以像这样通过 WMI 启动:

    Set wmi = GetObject("winmgmts://./root/cimv2")
    
    qry = "SELECT * FROM Win32_Service WHERE Name='NAS PM service' AND State='Stopped'"
    For Each svc In wmi.ExecQuery(qry)
      svc.StartService
    Next
    

    【讨论】:

    • 非常感谢您的回复。如果您有一点时间,我还有 2 个问题:Q1。脚本中的条件是否为:: On Error Resume Next Do Loop While Err On Error Goto 0 相当于: Dim k (在脚本的顶部) Do On Error Resume Next k= k+1 循环直到 Err.Number=0 ? Q2。使用您的方法通过 WMI 加载服务与仅此方法有区别吗:objShell.Run ("net start ""NAS PM service"""), 0, False ?
    • @TheShadowRunner A1:不,代码 sn-ps 不等价。循环体不是 VBScript 中的不同范围,因此您的第二个示例永远不会禁用错误处理。 A2:两者都可以,但 WMI 是更简洁的方法。
    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多