web-dev-qa-db-ja.com

マップされたネットワークドライブをコマンドラインから再接続できますか?

日常的に、マップされているが切断されているネットワークドライブにアクセスする必要があるWindowsコマンドプロンプトに気づきました。マッピングの解除や再マッピングをせずにこのドライブを再接続するコマンドはまだ見つけていません(これらのコンピューターを所有していないため、パスワード推測ゲームにつながります)。また、スクリプトを作成して、何らかの理由でドライブが切断された場合に毎晩ドライブを再接続できるようにしたいと考えています。

私が現在持っている最速の解決策は:

  1. start. "エクスプローラを開くには、
  2. Alt-D アドレスバーをフォーカスする
  3. 必要なドライブ文字を入力してEnterキーを押し、ドライブの内容が表示されるのを待ちます。
  4. 最後に、エクスプローラーを閉じて、コマンドプロンプトに戻ります。

私はそれがマイナーな不便であることを知っていますが、私はGUIを介して何かを行うのがひどい低速のVNCまたはPCAnywhere接続を介してこれを行うことが多いので、より良い解決策があるかどうか疑問に思っています。

32

たぶんpushd \\server\share

12
wfaulk

会社のネットワークドライブに接続する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"コマンドは大文字と小文字を区別します!

8
Claus Melander

これらのコマンドを含むバッチファイル(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
          )
     )
 )
7
Brian

これはおそらく馬鹿げた質問ですが、「切断された」ドライブが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.
6
wfaulk

「ネットユース」は効果がないとおっしゃっていましたが、こちらがお試しいただけるものです。

Net Use/DELETEオプションを指定してバッチファイルを実行し、既存の/永続的な接続を削除します。次に、/ SAVECREDオプションを指定してNet Useを使用して、最後に成功したログオンで使用したパスワード資格情報を再利用できます。これで問題が解決するかどうかはわかりませんが、調べる価値はあります。

4
Critical Skill

複数の接続で同じ問題が発生し、断続的です。コンピュータを再起動すると、接続が「良好」な場合とそうでない場合があります。会社の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
2
Warren

同様の問題があり、コマンドラインから単純な「dir x:」で再接続を強制できることを発見しました(X:はマップされたが切断されたドライブです)。これはServer 2003システムからXPおよびWin7コンピュータ。

次の2行でバッチファイルwake_network_drives.batを作成しました。

    dir x:
    dir z:

ドライブが切断されていると時々表示されていたために失敗したバックアッププログラムの前に、毎晩実行するようにスケジュールされたタスクを設定します。

1
StanZ

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ディレクティブは、他の回答で述べられている代替案(pushddirExplorerなど)と同様の効果があることを発見しましたが、より軽量なアプローチ。

0
rkagerer

おそらく古い質問かもしれませんが、ネットワーク共有はさまざまな理由でWindowsによって再接続または接続されないことがよくあるため、2017とWindows 10でも関連があります。この問題と実際に実用的で完全に機能するソリューションが存在しないことに基づいて、スケジューラタスクとVBSを含むGithubプロジェクトを作成しました。

スクリプトは完全に構成可能であり、実際のユーザーのニーズに応じて設定できます。

Githubプロジェクトへのパス

0
thex

これらのパスワードをプレーンテキストで一括して保持することに反対がない場合は、削除のスクリプトを作成し、資格情報を含めて再マッピングできます。

Net Use H: /delete
Net Use H: \\server\share /user:domain\user password /persistent:yes

共有を削除しないという要件を満たしていませんが、パスワードを記憶する必要があるという問題の根本を解決します。

0
MDMarra

入力するだけです:

Net Use H: \\server\share

(H:はもちろんドライブ文字です)

「NET /?」と入力しますUSE 'このコマンドが提供するすべてのオプションを表示します。

0
Zoran

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  
0
Charlie C