日常的に、マップされているが切断されているネットワークドライブにアクセスする必要があるWindowsコマンドプロンプトに気づきました。マッピングの解除や再マッピングをせずにこのドライブを再接続するコマンドはまだ見つけていません(これらのコンピューターを所有していないため、パスワード推測ゲームにつながります)。また、スクリプトを作成して、何らかの理由でドライブが切断された場合に毎晩ドライブを再接続できるようにしたいと考えています。
私が現在持っている最速の解決策は:
start.
"エクスプローラを開くには、私はそれがマイナーな不便であることを知っていますが、私はGUIを介して何かを行うのがひどい低速のVNCまたはPCAnywhere接続を介してこれを行うことが多いので、より良い解決策があるかどうか疑問に思っています。
たぶんpushd \\server\share
?
会社のネットワークドライブに接続するVPNプログラムを実行する前に、Windows 7を起動する必要があります。したがって、私のネットワークドライブは自動的に再接続せず、Windowsエクスプローラーで開くだけで再接続します。
VPNを起動し、ネットワークドライブを再接続し、常に使用するいくつかのアプリケーションを起動するための小さなバッチファイルを作成しました。
私のバッチファイルには、次のものが含まれています。
REM Connect VPN here...
REM Opens an Explorer window looking at T: forcing a reconnect
Start /min Explorer t:\
timeout 3 /nobreak
REM Kill all Explorer windows beginning with "T_drive" in the title
Taskkill /fi "windowtitle eq T_drive*"
REM Finish starting up here...
exit
Taskkill /fi "windowtitle eq"
コマンドは大文字と小文字を区別します!
これらのコマンドを含むバッチファイル(refreshletters.cmd)を作成する
(これらはバッチファイル内でのみ機能します)
Win7およびXPでテストし、コンソールウィンドウ(コマンドライン)で「切断」および「使用不可」のドライバー文字を更新します。
@echo off
Net Use |FIND ":" > %temp%\used.txt
FOR /F " tokens=1,2,3 delims= " %%i in (%temp%\used.txt) do (
if %%i EQU Unavailable (
Net Use %%j %%k
echo Activated %%j
) ELSE (
if %%i EQU Disconnected (
pushd .
cd /d %%j
dir . %>nul
if NOT exist %%j\. (
Net Use %%j /del /y
Net Use %%j %%k
echo Remapped %%j
) else (
echo Fixed-up %%j
)
popd
) ELSE (
echo Checked %%j
)
)
)
これはおそらく馬鹿げた質問ですが、「切断された」ドライブがH:であると仮定して、ドライブに直接変更しようとしただけですか?
XPSP3で動作します。
C:\>Net Use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
Disconnected H: \\xxxxxx\wfaulk Microsoft Windows Network
OK \\xxxxxxx\business Microsoft Windows Network
The command completed successfully.
C:\>h:
H:\>Net Use
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
OK H: \\xxxxxx\wfaulk Microsoft Windows Network
OK \\xxxxxxx\business Microsoft Windows Network
The command completed successfully.
「ネットユース」は効果がないとおっしゃっていましたが、こちらがお試しいただけるものです。
Net Use/DELETEオプションを指定してバッチファイルを実行し、既存の/永続的な接続を削除します。次に、/ SAVECREDオプションを指定してNet Useを使用して、最後に成功したログオンで使用したパスワード資格情報を再利用できます。これで問題が解決するかどうかはわかりませんが、調べる価値はあります。
複数の接続で同じ問題が発生し、断続的です。コンピュータを再起動すると、接続が「良好」な場合とそうでない場合があります。会社のLANを使用しているので、パスワードの問題はありませんが、問題の別の側面があります。
Ex.batというバッチファイルを作成し、それを(他の多くのものと一緒に)パス内の\ utilディレクトリに保存しました。 「ex h:」と入力すると、Windowsエクスプローラが実行され、h:ドライブに直接移動するように設定されます。ここにバッチファイルがあります:
start Explorer /e,/select,%1
これは、はるかに少ないキーストロークで機能します。または、最初に機能しない場合は、Enterキーを押してh:ルートフォルダーを開き、内容を表示します。または、サブフォルダ「sub」が存在する場所に「ex h:\ sub」と入力します。
この問題は最近、おそらくWindowsの1つが原因でさらに悪化しているようですXPセキュリティパッチ。
もう1つ試すのは、サーバー側です。 Windowsサーバーでは、レジストリキーを変更することで、タイムアウト時にサーバーが接続を切断しないようにすることが想定されています。私はほとんどすべてのサーバーでこれを行います。ファイルは次のとおりです。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"autodisconnect"=dword:ffffffff
同様の問題があり、コマンドラインから単純な「dir x:」で再接続を強制できることを発見しました(X:はマップされたが切断されたドライブです)。これはServer 2003システムからXPおよびWin7コンピュータ。
次の2行でバッチファイルwake_network_drives.batを作成しました。
dir x:
dir z:
ドライブが切断されていると時々表示されていたために失敗したバックアッププログラムの前に、毎晩実行するようにスケジュールされたタスクを設定します。
TL; DRサマリー:Net Use
およびif exist
を使用します
毎晩のバックアップスクリプトの作成中に、関連する問題に遭遇しました。コンピューターがオンになっているかどうか(pingを使用)を確認し、必要に応じてオンにするマジックパケットを送信し( MC-WOL を使用)、Windowsが起動するのを待ってから、 SMB共有し、それが存在するのを待ちます。
ここでの他の答えは素晴らしいですが、マップされたドライブ文字が飛び出したり存在したりしたり、ユーザーが操作しているものを切断したり、エクスプローラーウィンドウを点滅させたりしたくありませんでした。つまり、目標はゼロのユーザーの注意散漫でした。
ここにあなたに役立つかもしれないコードのチャンクがあります:
set TARGET_IP=192.168.1.3
set TARGET_PATH=\\%TARGET_IP%\d$\backups
set ATTEMPTS=0
:LOOP
REM Give up eventually
if %ATTEMPTS% GEQ 200 goto NOJOY
REM Wait for IP connectivity to Host, and/or burn up a couple seconds before retry
ping -n 1 -w 2000 %TARGET_IP% | find "TTL" > nul
if errorlevel 1 set /a ATTEMPTS+=1 & goto LOOP
REM See if we're already connected, and try to give it a kick
if exist %TARGET_PATH% goto CONNECTED
REM Try to reconnect
Net Use %TARGET_PATH% > nul
if errorlevel 1 set /a ATTEMPTS+=1 & goto LOOP
:CONNECTED
echo Connected
exit /b
:NOJOY
echo Couldn't connect
必要に応じて、上記のIPアドレスをホスト名(server1
など)に置き換えることができます。
Net Use
は、既存の接続が存在しない場合に必要です。私はいくつかのコーナーケースに遭遇しましたが、それだけでは共有を「ウェイクアップ」するには不十分であるように見えました(たとえば、以前の接続が切断された状態で存在していた場合)。 if exists
ディレクティブは、他の回答で述べられている代替案(pushd
、dir
、Explorer
など)と同様の効果があることを発見しましたが、より軽量なアプローチ。
おそらく古い質問かもしれませんが、ネットワーク共有はさまざまな理由でWindowsによって再接続または接続されないことがよくあるため、2017とWindows 10でも関連があります。この問題と実際に実用的で完全に機能するソリューションが存在しないことに基づいて、スケジューラタスクとVBSを含むGithubプロジェクトを作成しました。
スクリプトは完全に構成可能であり、実際のユーザーのニーズに応じて設定できます。
これらのパスワードをプレーンテキストで一括して保持することに反対がない場合は、削除のスクリプトを作成し、資格情報を含めて再マッピングできます。
Net Use H: /delete
Net Use H: \\server\share /user:domain\user password /persistent:yes
共有を削除しないという要件を満たしていませんが、パスワードを記憶する必要があるという問題の根本を解決します。
入力するだけです:
Net Use H: \\server\share
(H:はもちろんドライブ文字です)
「NET /?」と入力しますUSE 'このコマンドが提供するすべてのオプションを表示します。
StanZからの回答はうまくいきましたが、ドメイン内のユーザーが異なるドライブマッピングを取得するため、ステータスがOKでなくても、マップされたドライブをプログラムで判断できる必要がありました。ここでは、実際のコードの前後にNet Use
を実行するスタンドアロンバージョンとして実行するようにコーディングしました。これにより、結果を確認できますが、1つのFOR
ステートメント(3つの行)をコードに挿入して、必要な結果を取得します。
@ECHO OFF
::
:: revision of answer from StanZ on superuser.com at the following url
:: https://superuser.com/questions/52595/can-a-mapped-network-drive-be-reconnected-from-the-command-line/367910#367910
:: https://superuser.com/a/367910
:: which resulted in my
::
:: DriveStatusOK.bat
:: iCharlieC
::
SETLOCAL ENABLEEXTENSIONS
::
:: you need only copy the one FOR statement (three lines)
:: to use in your own code
:: to force status of mapped network drives to OK
::
:: "tokens=1-2 delims=: " is used in the for statement
:: to output only the drive letter from the output of...
:: Net Use
:: is piped to the first findstr which outputs only lines with drive letters
:: then piped to another findstr to eliminate drives with a status of OK
:: then piped to another findstr to get lines that start with a status
:: -in other words, those lines that the first character is a letter-
:: -this due to the fact that in our domain we have a drive
:: that is mapped to a letter, but never has a status.
:: I do not know the reason for this,
:: but adding that last findstr prevents me from getting an error
:: from trying to execute a dir on a non-existant drive letter.-
:: then dir is executed on each drive letter (after appending ":\" to the letter)
:: and the output redirected to NUL
::
:: run Net Use before as a visual here
Net Use
::
FOR /F "tokens=1-2 delims=: " %%i in (
'Net Use ^| findstr ":" ^| findstr /i /v "^OK" ^| findstr /i "^[A-Z]"'
) do dir "%%j:" > NUL
::
:: run Net Use after "waking" drive(s)
Net Use
::
ENDLOCAL