【Windows環境設定】VBScript とバッチファイルを利用しNASをネットワークドライブに組み込む

【Windows環境設定】VBScript とバッチファイルを利用しNASをネットワークドライブに組み込む

VBScript とバッチファイルを利用しNASをネットワークドライブに組み込む

先日 【製品紹介】ミニデスクトップPC/HTPC、インテルi7-10710U を搭載したファンレスコンピューター、32G DDR4 | 1T SSD、4K対応、デュアルモニター、VESA、WiFi、Win10 Pro でご紹介したように自宅 LAN内にミニPC(注1) を導入しました。

このミニPCのSSDは1TB ありますが

  • データのバックアップ先の確保
  • 他のWindows 10 搭載 PC、Android スマホとのデータ連携の利便性確保
  • このミニPCに今後整備予定のアプリケーションで利用可能なネットワークドライブ名の確保

を目的としてこのミニPCに既設のNAS(注2)へのネットワークドライブ設定をしました。

本記事では、Windows の VBScript、バッチファイル(注3)、起動時自動実行の仕組を利用して、このミニPCの起動時にNASへのネットワークドライブ Z: を自動設定する方法を紹介します。この記事が同じようなニーズを持つ方々に少しでも役立てば幸いです。

 

(注1)  ミニデスクトップPC/HTPC MSE10710U04 、インテルi7-10710U を搭載したファンレスコンピューター、32G DDR4 | 1T SSD、4K対応、デュアルモニター、VESA、WiFi、Win10 Pro

(注2) NAS(Network Attached Storage): I-O DATA DTCP-IP対応ハイビジョンレコーディングハードディスク「RECBOX」 4TB HVL-AAS4

(注3)バッチファイルとは、Windows環境で実行できるコマンド列を記述したテキストファイルのことです。バッチファイルの詳細については【Windows業務効率化】バッチファイルを使って業務を効率化する方法 を参照してください。

 

解決できること

Windows の VBScript、バッチシステムを利用してこのミニPCの起動時にNASへのネットワークドライブ Z: を自動設定する方法がわかります。

読んでほしい方

Windows 10 搭載 PCの起動時にNASへの 任意のネットワークドライブ名を自動設定したい方。

Windowsスクリプトホストの WshNetwork オブジェクト

Windows には Windowsスクリプトホスト(注4)という仕組みが実装されています。

(注4) Windows スクリプトホストは Windowsでシステム情報を取得したり、ファイルのコピーや移動を自動化することを可能とするスクリプト実行環境で、VBScript (Visual Basic Script) や JScript(Java Script) といったスクリプト言語を使用して Windows スクリプトホストに対して指示することができます。ここでは Microsoft Office に使用されているVBA(Visual Basic for Application)と親和性の高い VBScript を使用したスクリプト記述について紹介します。

本記事ではWindowsスクリプトホストを呼び出すためのスクリプト言語 VBScript を利用してこのWindowsスクリプトホスト内にあらかじめ準備されたWshNetwork オブジェクトのメソッド

  • EnumNetworkDrives
  • MapNetworkDrive
  • RemoveNetworkDrive

を呼び出し

  • ネットワークドライブ名 Z: を新規設定
  • 現在利用中のネットワークドライブを確認
  • 現在利用中のネットワークドライブを設定解除

する方法を紹介します。

WshNetwork オブジェクト

WshNetwork オブジェクトは Windowsスクリプトホスト 内に準備されたネットワークドライブの接続やリモートプリンタの接続に使用するオブジェクトです。

WshNetwork オブジェクトは WScript.Network というプログラム識別子でオブジェクトを生成して使います。このオブジェクトのメソッドには以下のようなものがあります。

メソッド 説明
MapNetworkDrive ネットワークドライブを割り当てます。
EnumNetworkDrives ネットワークドライブの割り当て一覧を取得します。
RemoveNetworkDrive ネットワークドライブの割り当てを解除します。

以下にその概略を紹介します。

MapNetworkDrive メソッド

    • 説明 :  ネットワークドライブを割り当てます。
    • 書式 :   object.MapNetworkDrive ドライブ名,共有名

  • object: WshNetwork オブジェクトを指定します。

    • 引数 : 
引数 内容
ドライブ名 ネットワークドライブに割り当てるローカルドライブ名を指定します。
共有名 共有フォルダの共有名を指定します。
    • 戻り値 :  戻り値はありません。

EnumNetworkDrives メソッド

    • 説明 :  ネットワークドライブの割り当て一覧を取得します。
    • 書式 :  object.EnumNetworkDrives
    • 戻り値:  ネットウークドライブの割り当て一覧を WshCollection オブジェクトとして戻します。WshCollecton オブジェクトはコレクションなので、それぞれの要素を参照するにはインデックスを指定して参照します。コレクションの要素は、 ドライブ名、共有名の順になっています。たとえば、

    Zドライブ \\192.168.xx.14\disk(注5)

のように割り当てられているとき、WshCollecton オブジェクトのインデックスと内容は次のようになります。

インデックス 内容 コレクション要素タイプ
0 Z: ドライブ名
1 \\192.168.xx.14\disk 共有名

(注5) 192.168.xx.14 には実際のアドレスを入れます。   

RemoveNetworkDrive メソッド

    • 説明 :  ネットワークドライブの割り当てを解除します。
    • 書式 :  object.RemoveNetworkDrive ドライブ名または共有名,[強制切断フラグ],[プロファイルの更新フラグ]
    • 引数 :  RemoveNetworkDrive オブジェクトの引数と内容は次のようになります。
引数 内容 設定値 設定値の意味
ドライブ名または共有名 割り当てを解除したいドライブ名または共有名を指定します。
どちらを指定してもかまいません。
   
強制切断フラグ 共有リソースの使用中でも強制的に切断するかどうかを指定します。

True(0以外の値) False(0)

強制的に切断する 強制的に切断しない

プロファイルの更新フラグ  ユーザープロファイルを更新するかどうか指定します。

True(0以外の値) False(0)

更新する 更新しない

    • 戻り値 :  戻り値はありません。

ネットワークドライブを制御する VBScript コーディング例

ネットワークドライブを新規登録する

以下にネットワークドライブを新規登録するための VBScript のコーディング例と、そこで使用しているオブジェクトの概要を合わせて紹介します。
 
この、NAS は設置の際に 192.168.xx.14 (注4) という IPアドレスを割り振っています。また、自宅の環境に複数ある Windows 10 搭載 PC の物理ドライブは通常 C:D:、というように割り振られるので
  • それら物理ドライブとの名前の競合の可能性を下げる
  • 複数Windows 10 搭載 PC間で共通に利用可能とする

という意味で Z: をドライブ名として指定しています。

Option Explicit

Dim objWshNetwork
Dim objShellApps

'WshNetwork オブジェクトの生成
Set objWshNetwork = CreateObject( "WScript.Network" )
Set objShellApps = CreateObject( "Shell.Application" )

objWshNetwork.MapNetworkDrive "Z:", "\\192.168.xx.14\disk1"

With objShellApps.NameSpace( "Z:" ) 
  .Items().Item().Name = "HVL-EC3091 [NAS]"
End With

Set objShellApps = Nothing
Set objWshNetwork = Nothing

WScript.Quit(0)

現在利用中のネットワークドライブを確認する

以下に現在利用中のネットワークドライブを確認するための VBScript のコーディング例と、そこで使用しているオブジェクトの概要を合わせて紹介します。

Option Explicit

Dim objWshNetwork
Dim objWshCollection

Dim index

'WshNetwork オブジェクトの生成
Set objWshNetwork = WScript.CreateObject("WScript.Network")

'ネットワークドライブの列挙
Set objWshCollection = objWshNetwork.EnumNetworkDrives

If objWshCollection.Count <2  Then
 WScript.Echo "現在ネットワークドライブは割り当てられていません"
Else

For index = 0 to objWshCollection.Count - 1 Step 2
  ' ネットワークドライブ表示
 WScript.Echo objWshCollection(index),"->",objWshCollection(index+1)
Next

End If

利用中のネットワークドライブを登録解除する

以下に現在利用中のネットワークドライブの登録を解除するための VBScript のコーディング例と、そこで使用しているオブジェクトの概要を合わせて紹介します。

Option Explicit
On Error Resume Next

 ' 変数宣言
Dim objWshNetwork
Dim objWshCollection
Dim index

' オブジェクトの生成
Set objWshNetwork = WScript.CreateObject("WScript.Network")

'ネットワークドライブの列挙
Set objWshCollection = objWshNetwork.EnumNetworkDrives

' ネットワークドライブ数だけ処理実施
For index = 0 to objWshCollection.Count - 1 Step 2
  ' ネットワークドライブ切断処理
  objWshNetwork.RemoveNetworkDrive objWshCollection.Item(index), true, true
Next

Set objWshCollection = Nothing
Set objWshNetwork = Nothing

WScript.Quit(0)

VBScriptの実行例

以下に、Z: がネットワークドライブ設定されている状態で、紹介した VBScript を %USERPROFILE%\Tools\vbs 
配下に格納した状態で、コマンドラインから

  1. show_network_drive.vbs
  2. disconnect_network_drive.vbs
  3. show_network_drive.vbs
  4. connect_network_drive.vbs
  5. show_network_drive.vbs

の順に起動したする様子を紹介します。

VBScript NAS 接続状態表示 切断 接続

 

この状態で Windows のエクスプローラで PC 配下を参照すると Z: がネットワークドライブ設定されていることがわかります(注6)

【Windows環境設定】VBScript とバッチファイルを利用しNASをネットワークドライブに組み込む

 

(注6)  このエクスプローラ表示の中に現れている DBR-W1008hvl-ec3091 [DiXM Media Server] は DLNA(注7)対応のメディアサーバーとしての「東芝ブルーレイ DBR-W1008」「 I-O DATA 「 HVL-AAS4」です。

 

(注7) DLNA(Digital Living Network Alliance) : テレビやレコーダーといったAV家電をはじめ、PCおよびスマホ/タブレット端末など、機器やメーカーを問わず、LANを通じて、映像・音楽・写真をやりとりできるようにするための規約

ここに %USERPROFILE% は Windows であらかじめ定義されている環境変数で Windows 10 搭載 PCを使っている利用者のデフォルトのフォルダパスを表しています。この環境変数については必要に応じて以下の記事を参照下さい。

【Windows業務効率化】バッチファイルの基本テクニックを知ろう

 

バッチファイルでVBScriptを起動する

ここでは今まで紹介してきたスクリプトのうち
 
  • disconnect_network_drive.vbs
  • connect_network_drive.vbs
を使って実際にネットワークドライブ Z: を設定するるバッチファイル  connect_network_drive.bat を紹介します。
 
この connect_network_drive.bat %USERPROFILE%\Tools\bat 配下に格納し Windows の エクスプローラから、マウスでダブルクリックして起動します。
 
バッチファイルの内部で VBScript を呼び出すときは cscript を使って呼び出します。

@echo off
cscript %USERPROFILE%\Tools\vbs\disconnect_network_drive.vbs
cscript %USERPROFILE%\Tools\vbs\connect_network_drive.vbs

Windows 10 の起動時にバッチファイルを自動実行する

最後に Windows 10 の起動時に connect_network_drive.bat を自動的に実行するためにこのショートカットをスタートアップフォルダーに追加します。具体的には

  1. %USERPROFILE%\Tools\bat 配下に格納した connect_network_drive.bat のショートカットを作成。
  2. このショートカットの場所を開いた状態で、[Windows ロゴ] キー + R キーを押し、「shell:startup」と入力して [OK] を選択。これにより、[スタートアップ] フォルダーが開きます。
  3. ファイルの場所から connect_network_drive.bat のショートカットをコピーして、[スタートアップ] フォルダーに貼り付けます。

以上で、作成した connect_network_drive.bat  を自動起動する登録は終わりです。登録したPCを再起動してネットワークドライブ Z: が正常に登録されるか確認します。

 

Windows 10 で共有ネットワークドライブの絶対パス名を確認する

一方、会社内でシステム管理部門が組織的に構築した複数のネットワーク共有フォルダをネットワークドライブに割り当てて利用されている方も多いかと思います。

そしてこれらを利用して別の方とデータ共有する際に Outlook や Teams といったコミュニケーションツール上でネットワークドライブ上のデータのフルパスを記述することになりますが

Exploler のアドレスリスト部分で以下のように

右クリック > アドレスをテキストとしてコピー(O)

でファイルの格納されている共有ネットワークドライブの絶対パス名を取得すると

【Windows環境設定】VBScript とバッチファイルを利用しNASをネットワークドライブに組み込む

 

結果には個人のPC利用環境に依存するネットワークドライブ名が出てくるため、これを共有ネットワークドライブの絶対パス名を調べて書き直すと言うちょっとした手間をかけなければならず面倒ですね。

このコマンドをコマンドプロンプトで実行すると例えば以下のようにこのネットワークドライブの

ローカル名 z:

の後に

リモート名 \\192.168.xxx.14\disk1

といった文字列が表示されるので、この文字列を Outlook や Teams といったコミュニケーションツールに貼り付ける共有ネットワークドライブの絶対パス名に差し替えれば、社内のチーム内で良好なコミュニケーション、効率化が図れるというわけです。

【Windows環境設定】VBScript とバッチファイルを利用しNASをネットワークドライブに組み込む

 

この記事が皆様のお役に立てれば幸いです。

【特集】自動化ツールをバッチファイルで統合し 作業をワンクリックで終わらせよう