2

ユーザーが Active Directory ドメインのワークステーションにログインするたびに実行される logon.bat スクリプトがあります。

このスクリプトは、次のようなコマンドでいくつかのネットワーク ドライブをマップします。

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 をクリックすると消えます。それでも、net-use コマンドを実行する前に、logon.bat スクリプトでネットワークが確立されていることを確認したいと思います。

グループ ポリシーの設定を変更する必要があるか、犯人ワークステーションの設定を変更する必要がある解決策を見てきました。ただし、現在のバッチ スクリプト内でこれを排他的に解決するソリューションに興味があります (そのスクリプトの外部にスクリプトの依存関係を追加する必要はありません)。

ネット使用コマンドを実行する前に任意の時間待機するように、バッチ スクリプトにタイムアウト (またはスリープ) を入れるだけの他のスクリプト ソリューションを見てきました。これらのソリューションは、「ドライブをマップするよりも少し遅れてマップする」または「ネットワークが確立される前に net-use コマンドを実行する危険性がある」待機定数を提供します。

代わりに、ネットワークが確立されているかどうかを毎秒チェックし、(成功すると) 前述の「net use」コマンドの実行に進むスクリプトが必要です。

Windows バッチ スクリプトでこれをどのように実現しますか?

4

3 に答える 3

5

How to ping a server only once from within a batch file?に関する私の回答 ネットワークドライブに関連付けられたデスクトップショートカットを削除しますか? このタスクに役立つ情報が含まれています。

以下は、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 で応答を得られないことを付け加える必要があります。

于 2014-10-04T19:46:56.273 に答える