ログオン時にドライブやプリンタを割り当てる

ここで紹介するlogon.vbsは,共有フォルダをドライブ名に割り当てる作業や,ネットワークプリンタに接続する作業をログイン時に自動的に行うことを主な目的とするスクリプトです。ユーザの所属するグループによってネットワークドライブの割り当てを変更したり,コンピュータによって接続するネットワークプリンタ や通常使うプリンタを変更したりできるようになっています。

  1. グループによるネットワークドライブの割り当てを自動的にできるので,各ユーザに設定作業をしてもらう必要がない。
  2. プリンタの割り当てを自動ですることにより,新しいコンピュータが入ってもいちいちプリンタのインストール作業をする必要がない。また新しいプリ ンタが入った場合でもサーバにプリンタをインストールし設定ファイルに記述を追加するだけでよく,各コンピュータへのインストール作業をする必要がない。

これらの機能でクライアントコンピュータの初期設定や設定変更が格段に楽になります。

logon.vbsの初期のバージョンは機能も少なく動作も簡単なものでした。グループによってネットワークドライブやプリンタの割り当てができる だけのものでした。それが各部署の要望を入れたりしているうちに多くのモディファイを受けてきました。大幅な設定変更が必要だったときに,すでに接続されているネットワークドライブの接続先をうまく変更できなかったために作業工数が増えてしまったことがあり,そのときに特に大きな機能アップを果たしました。現在では,ログイン時にネットワークドライブとプリンタの設定を自動化するスクリプトとして十分な機能を持ったものになっていると思います。

logon.vbsはADSIやWMIなどVBScriptで利用可能なさまざまなオブジェクトの利用方法の格好のサンプルとしても役立ちます。さほどきれいなコードではありませんが,コメントもついていますので,他のスクリプトを書くときの参考にしてください。

マップファイル

logon.vbsは,設定情報を記述したテキストファイル(マップファイルといいます)を解釈して実際の作業を行います。マップファイルのファイ ル名はmapfile.txtです。マップファイルの置き場所はlogon.vbsと同じフォルダですが,ローカルコンピュータの Windowsフォルダに置くこともできます。 logon.vbsは最初にローカルコンピュータの Windowsフォルダにマップファイルがあるかどうかをチェックし,そこにマップファイルがあったらそのファイルの中身を解釈して実行します。 Windowsフォルダにマップファイルがなかったら,logon.vbsと同じフォルダにあるマップファイルを解釈して実行します。

一般的にはlogon.vbsと同じフォルダにあるマップファイルに通常の設定が記述されていてWindowsフォルダにはマップファイルを置かな い運用が普通です。特別な設定が必要なコンピュータの場合や,あるコンピュータを一時的に違う設定にしたいような場合だけWindowsフォルダにマップ ファイルを設置するという利用法になると思います。

マップファイルの書式

マップファイルはタブ区切りのテキストファイルです。1行は5列に区切られそれぞれの列は次のような意味を持ちます。

1列目  対象オブジェクトの種類
2列目  対象とするオブジェクト
3列目  コマンド
4列目  パス名など,コマンドに与えるパラメータ
5列目  オプション パラメータ

1列目~2列目で指定したオブジェクトに対して,3列目のコマンドを実行します。コマンドにパラメータが必要な場合は4列目~5列目にパラメータを指定します。

コマンド行の解釈には次のルールが適用されます。

  1. コマンド行の先頭にある空白は解釈する前に取り除かれます。ただし先頭のタブは取り除かれません。
  2. //(二つの連続したスラッシュ)で始まる行はコメントとして無視されます。
  3. 空行(改行のみからなる行)は無視されます。

対象オブジェクト

対象オブジェクトとは,そのコマンドを実行する条件指定のようなものです。スクリプトを実行しているユーザやコンピュータが所属するグループやコン ピュータ名によってコマンドの実行を制御することができます。1列目にはオブジェクトの種類を指定し,2列目で条件を指定します。

1列目 2列目 対象オブジェクトの種類
all *を指定 全て。これが指定された行のコマンドは必ず実行されます。条件は存在しないので2列目の内容は無視されますが,記述ミスを防ぐために2列目には*を入れることを推奨します。
user ユーザ名 ユーザ。ログインしたユーザ名。ユーザ名の末尾に*を付けることで前方一致での指定が可能です。ユーザ名が一致した場合にコマンドは実行されます。
group グループ名 グループ。ログインしたユーザが所属するグループ。ユーザがそのグループに所属している場合にコマンドは実行されます。
pc コンピュータ名 コンピュータ。コンピュータ名の末尾に*を付けることで前方一致での指定が可能です。コンピュータ名が一致した場合にコマンドは実行されます。
ip IPアドレス範囲 IP アドレス。2列目には 10.20.30.0/255.255.255.0の形式で,ネットワークアドレスとサブネットマスクを指定することでIPアドレスの範囲を指定できま す。単一のIPアドレスを指定する場合はサブネットマスクを省略できます。詳しくはIPアドレス指定時の動作を参照してください。

コマンド

3列目 4列目/5列目 動作
alert 4列目:表示するメッセージをセットします。 ポップアップメッセージを表示します。条件指定のテストなどに利用します。
 
exec 4列目:実行するコマンドをセットします。 外部コマンドを実行します。
exit 4列目以降のパラメータは必要ありません。 処理を終了します(以降のマップファイルを評価しません)。 includeコマンドでインクルードされたマップファイル中でexitコマンドに遭遇するとそのファイルの解釈を終了して呼び出し元のマップファイルに戻ります。
prn 4列目:共有プリンタのUNCパスを指定します。
5列目:forceを指定すると強制的に再接続します。delete を指定すると割り当てを解除します。詳しくはネットワークプリンタ接続時の動作を参照してください。
ネットワークプリンタに接続します。
 
defprn 4列目:共有プリンタのUNCパスを指定します。 通常使うプリンタを指定します。
 
include 4列目:マップファイル名。 別のマップファイルをインクルードします。このコマンドを使って大きな条件毎にマップファイルを分割することができます。詳しくはマップファイルの分割を参照してください。
 
log 4列目:onを指定すると以降の成功ログを記録します。offを指定すると以降の成功ログを記録しません。 成功ログの記録モードを設定します。この機能は主に動作確認に用います。詳しくはイベントログの記録を参照してください。
<ドライブ名>: 4列目:共有フォルダのUNCパスを指定します。
5列目:deleteを指定するとそのドライブの割り当てを解除します。
共有フォルダをネットワークドライブに割り当てます。詳しくはネットワークドライブの割り当て時の動作を参照してください。

記述例

all   
*      
prn     \\sv1\LaserPrinter1

無条件で共有プリンタの\\sv1\LaserPrinter1に接続します。

group kaikei  Z:     \\sv1\kaikei

ユーザがkaikeiグループに所属する場合に共有フォルダ\\sv1\ kaikei をZ:ドライブに割り当てます。

pc    jimu*   defprn  \\sv1\JimuPrinter

コンピュータ名がjimuで始まる場合に\\sv1\JimuPrinterを通常使うプリンタとします。

IPアドレス指定時の動作

IPアドレスによる振り分けは,コンピュータのIPアドレスを取り出すのにやや時間がかかるので,処理速度に影響を与えます。

ip    10.20.30.0/255.255.255.0       defprn  \\sv1\KaikeiPrinter

IPアドレスが10.20.30.1~10.20.30.254の範囲内の時に, \\sv1\KaikeiPrinterを通常使うプリンタとします。

ip    10.20.30.40     defprn \\sv1\KaikeiPrinter

IPアドレスが10.20.30.40の時に,\\sv1\ KaikeiPrinterを通常使うプリンタとします。サブネットマスクを省略するときは上記のように/(スラッシュ)も記述しないようにします。

IPアドレスによる振り分けには,そのコンピュータに搭載されているアダプタのうち最初にリストアップされたIPアドレスを根拠にします。よって複 数のNICを持つ場合や,仮想的なネットワークアダプタを持つような場合には,正しい IPアドレスが取り出されるかどうか不確実な部分があります。そういう状況でないコンピュータしか対象にしない場合などに用途を限定して使ってください。

ネットワークプリンタ接続時の動作

Windowsの「プリンタとFAX」の画面からネットワークプリンタに接続した場合は,コンピュータの電源を切っても,その接続の定義は残るよう になっていて,次回起動時もそのプリンタを使用することができます。起動する度に毎回プリンタへの接続をする必要はありません。

logon.vbsを使って接続が定義されている場合も同様に動作します。prn コマンドでプリンタへの接続を処理する場合は,ローカルですでに接続されている共有プリンタである場合は再度プリンタ接続することはしません。通常はこの動作で必要な結果が得られます。しかしプリンタの構成変更時などで何らかの理由で接続済みのプリンタにも再度接続動作をさせたい場合は5列目にforce と記述します。そうすることで接続済みのプリンタであっても再度接続します。

古いプリンタを廃棄した場合や,プリントサーバを別のものにした場合など,すでに接続されているネットワークプリンタを削除する必要がある場合 は,5列目にdeleteオプションを記述します。すると次のログインの時にそのプリンタは削除されます。deleteオプションを記述した行はしばらく の間運用して,対象となるほぼすべてのコンピュータがログオンした時期が過ぎたら,マップファイルから消してしまっていいでしょう。

ネットワークドライブの割り当て時の動作

このコマンドの場合だけはコマンドではなくドライブ名を記述します。ドライブ名は英数字1文字+:(コロン)です。プリンタと同じように一度接続さ れたネットワークドライブの割り当ては,ログオン時に再接続されます。 logon.vbsでは,ネットワークドライブ接続のコマンドがあった場合は次のような動作をします。

  1. 指定されたドライブ名にすでに割り当てられているネットワークパスがない場合は,割り当てを実行します。
  2. 指定されたドライブ名にすでに割り当てられているネットワークパスがあり,それが指定されたパスと異なる場合は,以前の割り当てを解除してから,新しいパスを割り当てます。
  3. 指定されたドライブ名にすでに割り当てられているネットワークパスがあり,それが指定されたパスと一致する場合は,なにもする必要がないのでなにもしません。

すでに接続されているネットワークドライブを切断するだけの場合には,5列目に deleteオプションを記述します。deleteオプションを記述した行はしばらくの間運用して,対象となるほぼすべてのコンピュータがログオンした時 期が過ぎたら,マップファイルから消してしまっていいでしょう。

イベントログの記録

logon.vbsは,スクリプト実行中にエラーが発生するとイベントログにメッセージを記録します。logon.vbsの動作がおかしい場合はク ライアントのイベントログを見てエラーが記録されていないかどうか確認します。基本的にエラーが記録されるというのは動作が不正である言うことですので, 原因を探りマップファイルや場合によってはlogon.vbsを修正する必要があります。

それとは別にマップファイルの記述やlogon.vbs自体の動作確認をする時に,成功したログも記録したいことがあります。成功ログを記録するようにするには,マップファイルの先頭付近に次の行を記述します。

pc     <ComputerName>  log     on

<ComputerName>の部分は,動作確認を行うコンピュータ名を記述します。上記のように記述すると1行解釈して実行する毎に成功した場合でもログがイベントログに残るようになります。イベントビューワでログの内容を参照して動作確認に役立てます。

マップファイルの分割

includeコマンドを記述すると,別のマップファイルを解釈して実行します。読み込んだマップファイルの処理が終了すると,元のマップファイルの次の行から実行が再開されます。

マップファイル名は,絶対パスまたはスクリプトファイルが置かれているフォルダからの相対パスで指定できます。

group  kaikei  include mapsub/kaikei.txt

上記の例では,kaikeiグループに所属しているユーザの場合は,mapsub フォルダにあるkaikei.txtをマップファイルとして解釈して実行します。この場合は相対パスが指定されていますので,logon.vbsが置かれ ているフォルダにmapsubフォルダがあって,その中にkaikei.txtがなければなりません。

マップファイルをincludeして分割する利点はいくつかあります。

  1. マップファイルの記述を短くできます。複雑で長くなったマップファイルを分割して簡潔なマップファイルの組み合わせにできます。
  2. 動作速度を向上させます。logon.vbsはexitコマンドに出会わない限りマップファイルを最後まで読んで処理を実行します。マップファイルを分割することで不必要な行を最初から読み込ませないように工夫することで処理速度を向上させることができます。
  3. 複 雑な条件による動作を可能にします。マップファイルでは1列目と2列目で指定した条件の場合に3列目以降のコマンドが実行される仕様です が,○○かつ △△というような条件指定はできません。このような場合には○○の場合にマップファイルをincludeするように記述し,△△の部分はマップファイルに 書くことによって実現できます。

ダウンロード

logon.vbsのダウンロードはこちら

トラックバック


URL から "-MoIyadayo" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。
添付サイズ
logon.vbs15.23 KB