目次
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: を自動設定する方法を紹介します。この記事が同じようなニーズを持つ方々に少しでも役立てば幸いです。
(注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)という仕組みが実装されています。
本記事ではWindowsスクリプトホストを呼び出すためのスクリプト言語 VBScript を利用してこのWindowsスクリプトホスト内にあらかじめ準備されたWshNetwork オブジェクトのメソッド
- EnumNetworkDrives
- MapNetworkDrive
- RemoveNetworkDrive
を呼び出し
- ネットワークドライブ名 Z: を新規設定
- 現在利用中のネットワークドライブを確認
- 現在利用中のネットワークドライブを設定解除
する方法を紹介します。
WshNetwork オブジェクト
WshNetwork オブジェクトは Windowsスクリプトホスト 内に準備されたネットワークドライブの接続やリモートプリンタの接続に使用するオブジェクトです。
WshNetwork オブジェクトは WScript.Network というプログラム識別子でオブジェクトを生成して使います。このオブジェクトのメソッドには以下のようなものがあります。
メソッド | 説明 |
---|---|
MapNetworkDrive | ネットワークドライブを割り当てます。 |
EnumNetworkDrives | ネットワークドライブの割り当て一覧を取得します。 |
RemoveNetworkDrive | ネットワークドライブの割り当てを解除します。 |
以下にその概略を紹介します。
MapNetworkDrive メソッド
-
- 説明 : ネットワークドライブを割り当てます。
- 書式 : object.MapNetworkDrive ドライブ名,共有名
-
- 引数 :
引数 | 内容 |
---|---|
ドライブ名 | ネットワークドライブに割り当てるローカルドライブ名を指定します。 |
共有名 | 共有フォルダの共有名を指定します。 |
-
- 戻り値 : 戻り値はありません。
EnumNetworkDrives メソッド
-
- 説明 : ネットワークドライブの割り当て一覧を取得します。
- 書式 : object.EnumNetworkDrives
- 戻り値: ネットウークドライブの割り当て一覧を WshCollection オブジェクトとして戻します。WshCollecton オブジェクトはコレクションなので、それぞれの要素を参照するにはインデックスを指定して参照します。コレクションの要素は、 ドライブ名、共有名の順になっています。たとえば、
Zドライブ \\192.168.xx.14\disk(注5)
のように割り当てられているとき、WshCollecton オブジェクトのインデックスと内容は次のようになります。
インデックス | 内容 | コレクション要素タイプ |
---|---|---|
0 | Z: | ドライブ名 |
1 | \\192.168.xx.14\disk | 共有名 |
RemoveNetworkDrive メソッド
-
- 説明 : ネットワークドライブの割り当てを解除します。
- 書式 : object.RemoveNetworkDrive ドライブ名または共有名,[強制切断フラグ],[プロファイルの更新フラグ]
- 引数 : RemoveNetworkDrive オブジェクトの引数と内容は次のようになります。
引数 | 内容 | 設定値 | 設定値の意味 |
---|---|---|---|
ドライブ名または共有名 | 割り当てを解除したいドライブ名または共有名を指定します。 どちらを指定してもかまいません。 |
||
強制切断フラグ | 共有リソースの使用中でも強制的に切断するかどうかを指定します。 |
True(0以外の値) False(0) |
強制的に切断する 強制的に切断しない |
プロファイルの更新フラグ | ユーザープロファイルを更新するかどうか指定します。 |
True(0以外の値) False(0) |
更新する 更新しない |
-
- 戻り値 : 戻り値はありません。
ネットワークドライブを制御する VBScript コーディング例
ネットワークドライブを新規登録する
- それら物理ドライブとの名前の競合の可能性を下げる
- 複数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
利用中のネットワークドライブを登録解除する
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
配下に格納した状態で、コマンドラインから
- show_network_drive.vbs
- disconnect_network_drive.vbs
- show_network_drive.vbs
- connect_network_drive.vbs
- show_network_drive.vbs
の順に起動したする様子を紹介します。
この状態で Windows のエクスプローラで PC 配下を参照すると Z: がネットワークドライブ設定されていることがわかります(注6)。
(注7) DLNA(Digital Living Network Alliance) : テレビやレコーダーといったAV家電をはじめ、PCおよびスマホ/タブレット端末など、機器やメーカーを問わず、LANを通じて、映像・音楽・写真をやりとりできるようにするための規約
ここに %USERPROFILE% は Windows であらかじめ定義されている環境変数で Windows 10 搭載 PCを使っている利用者のデフォルトのフォルダパスを表しています。この環境変数については必要に応じて以下の記事を参照下さい。
バッチファイルでVBScriptを起動する
- disconnect_network_drive.vbs
- connect_network_drive.vbs
@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 を自動的に実行するためにこのショートカットをスタートアップフォルダーに追加します。具体的には
- %USERPROFILE%\Tools\bat 配下に格納した connect_network_drive.bat のショートカットを作成。
- このショートカットの場所を開いた状態で、[Windows ロゴ] キー + R キーを押し、「shell:startup」と入力して [OK] を選択。これにより、[スタートアップ] フォルダーが開きます。
- ファイルの場所から connect_network_drive.bat のショートカットをコピーして、[スタートアップ] フォルダーに貼り付けます。
以上で、作成した connect_network_drive.bat を自動起動する登録は終わりです。登録したPCを再起動してネットワークドライブ Z: が正常に登録されるか確認します。
Windows 10 で共有ネットワークドライブの絶対パス名を確認する
一方、会社内でシステム管理部門が組織的に構築した複数のネットワーク共有フォルダをネットワークドライブに割り当てて利用されている方も多いかと思います。
そしてこれらを利用して別の方とデータ共有する際に Outlook や Teams といったコミュニケーションツール上でネットワークドライブ上のデータのフルパスを記述することになりますが
Exploler のアドレスリスト部分で以下のように
右クリック > アドレスをテキストとしてコピー(O)
でファイルの格納されている共有ネットワークドライブの絶対パス名を取得すると
結果には個人のPC利用環境に依存するネットワークドライブ名が出てくるため、これを共有ネットワークドライブの絶対パス名を調べて書き直すと言うちょっとした手間をかけなければならず面倒ですね。
メールにネットワークドライブの絶対パス名を記載する事がたまにあり
— しらかば堂@VBAer (@shirakabado) October 6, 2022
面倒くさいなぁ😅
と思っていたのですが
Google先生に教えてもらったら
コマンドプロントで
> net use
というコマンドを入力すれば簡単にフルパスが入手出来ることがわかり
ちょっと嬉しい~🥳🥳
このコマンドをコマンドプロンプトで実行すると例えば以下のようにこのネットワークドライブの
ローカル名 z:
の後に
リモート名 \\192.168.xxx.14\disk1
といった文字列が表示されるので、この文字列を Outlook や Teams といったコミュニケーションツールに貼り付ける共有ネットワークドライブの絶対パス名に差し替えれば、社内のチーム内で良好なコミュニケーション、効率化が図れるというわけです。
この記事が皆様のお役に立てれば幸いです。