皆さんこんにちは!
今日は、会社のWindowsネットワークの問題について書いていきたいと思います。
会社ではWindowsサーバー若しくはNASなどで共有フォルダを作成して、クライアントはネットワークドライブの割当をしているケースが多いかと思います。
今回はこの「ネットワークドライブの割当」で発生する問題について取り上げたいと思います。
ネットワークドライブが切断される
Windows10になってから、再起動時にネットワークドライブが切断されている現象が増えたかと思います。
それはWindowsの高速スタートアップが関係していて、次の様な原因で発生しています。
「起動プロセス中にネットワーク上のサーバーを認識をする前に共有フォルダを探しに行ってしまい、「ネットワークドライブに再接続できませんでした」というエラーメッセージが起動のたびに出てしまう」というのが原因です。
エクスプローラーで開くと、ドライブのアイコンに×印が付いている状態です。
エクスプローラーでクリックすることで再接続されるのですが、デスクトップ等のショートカットからファイルを開こうとすると開けずに、エラーメッセージが出ます。
基本は面倒なだけであまり問題はないのですが、会社だとプログラムから割り当てたドライブに対して処理しているものがあったりします。
私の会社のグループ企業の工場であった例では、あるPCが機械の稼働状況をモニタリングして、サーバーのフォルダへデータを送っているプログラムがあります。
PC起動時に自動的に監視プログラムが立ち上がり実行するようになっていたのですが、ネットワークドライブが切断されていた為、失敗していました。
普段あまり見る事のないデータの場合、いざ必要になった時にデータが取られていないことに気づき問題になってしまいます。
対応策
この問題の簡単な対応として、VBScriptを利用します。
私のサイトを訪れる方はVBAなどを触った経験がある方が多いと思いますのでVBSは簡単に作れるかと思います。
スクリプトファイル(.vbs)を作り、スタートアップに入れるだけでネットワークドライブに接続させることができます。
' 変数宣言
Dim objNetwork
Dim drive
Dim folder
Dim userName
Dim password
' 初期設定
Set objNetwork = CreateObject( "WScript.Network" )
userName = "user"
password = "pass"
folder = "\\192.168.1.1\public"
drive = "Z:"
' ネットワークドライブを設定する
objNetwork.MapNetworkDrive drive, folder, True, userName, password
' 解放
Set objNetwork = Nothing
基本的に接続するのは、上記のスクリプトでOKです。
簡単に解説します。
Set objNetwork = CreateObject( "WScript.Network" )
userName = "user"
password = "pass"
folder = "\\192.168.1.1\public"
drive = "Z:"
肝になるのが【WScript.Network】です。
他は、ネットワークサーバーへログインする情報やドライブの割当を指定しているだけです。
【WScript.Network】オブジェクトは次の様な機能がある、オブジェクトになります。
スクリプトからネットワーク・ドライブやネットワーク・プリンタにアクセスするためのオブジェクトです。
主なメソッドとプロパティには以下のものがあります。
メソッド/プロパティ | 役割 |
---|---|
MapNetworkDrive | ネットワーク・ドライブの接続 |
RemoveNetworkDrive | ネットワーク・ドライブの切断 |
EnumNetworkDrives | ネットワーク・ドライブの列挙 |
AddPrinterConnection/AddWindowsPrinterConnection | ネットワーク・プリンタの接続 |
RemovePrinterConnection | ネットワーク・プリンタの切断 |
EnumPrinterConnections | ネットワーク・プリンタの列挙 |
SetDefaultPrinter | デフォルト・プリンタの設定 |
ComputerName/UserDomain/UserName | スクリプトを実行しているコンピュータとユーザーの情報取得 |
【WScript.Network】はExcelのVBAでも当然使用できます。
色々使い道がありそうですね。
ネットワーク・ドライブやネットワーク・プリンタの利用と制御ができます。
また、コンピュータやドメイン、ユーザーの情報取得ができるので、社内のPC管理・ネットワーク管理をスクリプトで一括で行う際に役立ちます。
' ネットワークドライブを設定する
objNetwork.MapNetworkDrive drive, folder, True, userName, password
上記のコードで実際にネットワークを割り当てます。
後は、使用した変数を空にして終了です。
問題点
実は上記のコードでは既に切断されているとエラーが出てしまいます。
解決は簡単で、接続する前に切断してやれば良いのです。
' 変数宣言
Dim objNetwork
Dim drive
Dim folder
Dim userName
Dim password
' 初期設定
Set objNetwork = CreateObject( "WScript.Network" )
userName = "user"
password = "pass"
folder = "\\192.168.1.1\public"
drive = "Z:"
' ネットワークドライブを切断する
On Error Resume Next
objNetwork.RemoveNetworkDrive strDrive, True, True
On Error Goto 0
' ネットワークドライブを設定する
objNetwork.MapNetworkDrive drive, folder, True, userName, password
' 解放
Set objNetwork = Nothing
ドライブが複数ある場合は上記コードに追記してもらえば、いくつでも追加できます。
まとめ
今回の記事は完全に備忘録になってしまいました。
【WScript.Network】はVBAでも使用でき、今回のケース以外でもプリンター関連の管理や社内PC管理等、幅広く使用できます。
VBSはメモ帳で作成出来るので、是非、スクリプトを作成してみてください。
VBAを使用できる方なら、VBSは抵抗無く使用できると思いますし、業務の効率化に便利なので、覚えてみてください。
最後まで読んでいただきありがとうございました!!