【问题标题】:Batch Scripting - Wait until network Established批处理脚本 - 等到网络建立
【发布时间】:2014-10-03 19:25:43
【问题描述】:

我有 logon.bat 脚本,每次用户登录其 Active Directory 域的工作站时都会运行该脚本。

此脚本使用如下命令映射一些网络驱动器:

net use x: \\192.168.0.2\share1
net use y: \\192.168.0.3\share2
net use z: \\192.168.0.4\share3

但是,对于某些工作站,此脚本在工作站本身完全建立自己的 LAN 连接之前运行。然后用户转到开始菜单 > 计算机,并查看每个映射驱动器的红色 X。到这个时候,网络已经建立,所以如果他们点击红色的 X,它就会消失。不过,我希望 logon.bat 脚本在运行 net-use 命令之前验证网络是否已建立。

我已经看到了需要更改组策略设置或需要更改罪魁祸首工作站设置的解决方案。但是,我对在我当前的批处理脚本中专门解决此问题的解决方案感兴趣(不需要该脚本之外的任何其他脚本依赖项)。

我见过其他脚本解决方案,它们只是将超时(或睡眠)放入批处理脚本,以便在运行 net use 命令之前等待任意时间。这些解决方案提供的等待常数要么“映射驱动器的时间比它们可能被映射的时间稍晚”,要么“仍然冒着在网络建立之前运行 net-use 命令的风险”。

相反,我想要一个每秒检查一次网络是否已建立的脚本,然后(成功后)继续运行前面提到的“net use”命令。

如何在 Windows 批处理脚本中实现这一点?

【问题讨论】:

    标签: windows batch-file active-directory network-programming mapped-drive


    【解决方案1】:

    简单检查。一段时间后不会自动退出。为我需要的东西工作。

    :CHECKFOLDER
    TIMEOUT 1
    IF NOT EXIST C:\TEST GOTO CHECKFOLDER
    

    【讨论】:

      【解决方案2】:

      我在How to ping a server only once from within a batch file?Deleting Desktop Shortcuts Associated With Network Drives? 上的回答包含对这项任务有用的信息。

      这是一个用于 1 台服务器的模板批处理脚本:

      @echo off
      set "Server=192.168.0.2"
      set "RetryCount=0"
      
      :CheckServer
      rem Ping server only once with a time limit of 1000 ms.
      %SystemRoot%\System32\ping.exe -n 1 -w 1000 %Server% >nul
      if not errorlevel 1 goto MapDrive
      
      rem Connection to server is not yet established. Give up after 30 seconds
      rem in case of not being in right LAN or no network connection at all or
      rem this server is currently not running.
      set /A RetryCount+=1
      if not %RetryCount%==30 goto CheckServer
      
      echo There is no connection to server %Server%.
      echo The network drive X: is not available.
      goto :EOF
      
      :MapDrive
      echo Mapping network drive X: ...
      %SystemRoot%\System32\net.exe use X: \\%Server%\share1 /persistent:no >nul
      

      我必须补充一点,如果服务器上运行的防火墙阻止了对服务器的 ping 操作,因此该解决方案将不起作用,因此工作站在其服务器 ping 操作上永远得不到答案。

      【讨论】:

        【解决方案3】:

        您应该使用组策略首选项来映射网络驱动器,而不是批处理脚本,但是,如果您坚持,在脚本中 ping 服务器不是正确的方法。

        您应该部署组策略设置:

        "Computer Configuration" -> "Administrative Templates" -> "System" -> "Logon" -> "Always wait for the network at computer startup and logon"
        

        这将强制计算机在运行启动/登录脚本之前等待网络启动。

        【讨论】:

          猜你喜欢
          • 2013-05-04
          • 2014-07-10
          • 2015-09-08
          • 1970-01-01
          • 1970-01-01
          • 2012-09-16
          • 1970-01-01
          • 1970-01-01
          • 2018-04-17
          相关资源
          最近更新 更多