0

我有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 

然而,對於某些工作站,該腳本運行前的工作站本身已全面建立了自己的局域網連接。然後用戶進入開始菜單>計算機,並查看每個映射驅動器的紅色X.到此時,網絡已經建立,所以如果他們點擊紅色的X,它就會消失。不過,我希望logon.bat腳本在運行net-use命令之前驗證網絡是否已建立。

我見過這樣的解決方案,需要在組策略中更改設置或要求更改罪魁禍首工作站上的設置。但是,我對僅在我當前的批處理腳本中解決此問題的解決方案感興趣(不需要該腳本之外的任何其他腳本依賴項)。

我見過其他腳本解決方案,它只是將超時(或睡眠)放入批處理腳本中,以便在運行net use命令之前等待一段任意時間。這些解決方案提供了等待常量,要麼「映射驅動器的時間比他們映射的時間要晚得多」,要麼「仍然存在早於網絡建立時運行網絡使用命令的風險」。

相反,我想要一個腳本來檢查每一秒是否已建立網絡,然後(成功時)繼續運行前面提到的「net use」命令。

如何在Windows批處理腳本中實現此目的?

回答

1

簡單的檢查。持續時間後不會自動退出。爲我所需要的工作。

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

我在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服務器,因此工作站沒有得到永遠在服務器上回答一個問題。

1

您應該使用組策略首選項來映射網絡驅動器,而不是批處理腳本,但是,如果堅持,在腳本中ping服務器不是正確的方法。

相反,你應該部署的組策略設置:

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

這將迫使計算機等待網絡運行啓動/登錄腳本之前就上來了。