ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

‘ActiveDirectory’ カテゴリーのアーカイブ

書評:Windows コマンドプロンプト ポケットリファレンス Windows7/Vista/XP/2000/2008 Server対応

コメントする »

IMG_2549_mid_640_480

「究極無比!Windows7のコマンドプロンプトを完全解説!ユーザーからエンジニアまで仕事がすいすい捗る最強リファレンス」と表紙にコメントが書かれているとおり、まさに他に類比なき本である。このようなコンピュータ関係の解説本では、主要なアプリケーション、主要な技術に関して類似の本が何冊も出版されることが一般的だが、この本に関しては最初にして究極の本が出た、という印象である。

Windowsに限らず他のOSでも、今日的な一般用途向けコンピュータはGUIによる操作が行われる。GUIとは「グラフィカル・ユーザー・インターフェース」で画面に表示されるアイコンやメニューをマウスなどのポインティングデバイスで選択しながら操作する方法である。この方法のメリットは、アイコンの絵柄から機能を類推することができ、また文字によって詳細な説明を見ながら操作できるので、覚えることが少なくてすむということである。だから一般ユーザーに支持され普及した。

しかしGUIですべての操作が満足にできるかというとそうではない。およそ世の中のあらゆることがそうだが、いくつかの選択肢があったとき、ある方法が他の方法に比べてすべて勝っている、ということはない。ものごとには利点と欠点が必ずある。GUIの欠点としては、見えているものだけが操作対象になるので、いくつか複数の設定項目が影響する操作では全体が把握しにくいこと、操作が感覚的に陥りやすいのでうっかりクリックミスなどで間違ったときに気が付きにくいこと、そしてコンピュータの設定について必ずしも全ての項目についてGUIが提供されているわけではないことだ。

面白いことに若い人を中心にして、意外にもコマンドによるコンピュータの操作が受け入れられているようだ。コマンドプロンプトでバッチ処理をしている、レジストリの設定を自分でカスタマイズしているなど、「パワーユーザー」と称されるようなユーザーが増えているように感じる。GUIによる操作にあきたらず、コンピュータの性能をフル活用したいという気持ちの表れだろう。そしてもちろん、コマンドプロンプトの恩恵を最大限に活用できるのはシステム管理者である。

IMG_2550_mid_640_480

Windowsコンピュータシステムにおいて最も効果的に管理する方法はActive Directoryによる管理だ。複数のコンピュータを複数のユーザーが入れ替わり立ち代わり使う環境では、Active Directoryによる管理が必須である。このような環境でまだActive Directoryによる管理をしていないところがあるなら、それはずいぶん損をしている。時間と手間と、そして何よりもセキュリティ上のリスクを背負っていると断言する。ドキュメントなど生成したコンテンツの共有、管理も効果的にできないはずだ。情報の正しい共有、管理ができず、あちこちの部課で似たような文書を作り、さらにそれら相互に矛盾をきたしカオス状態となっているはずだ。

Active Directory管理の基本はそれほど難しくない。基本はユーザー管理、ポリシー管理、セキュリティ管理、リソース管理である。リソース管理の主要なものはファイルサーバーのフォルダ管理とプリンタ共有の管理だろう。これらはある一定までGUIでできる。だがGUIだけでは完璧ではない。それにはレジストリに関する知識と、もうひとつはコマンドに関する知識である。

Active Directoryにはコンピュータの設定を変える機能がグループポリシーとして用意されている。しかし標準的に搭載されたグループポリシーによってコンピュータの全ての設定を変えることはできない。コンピュータの設定を自由に変えたいならばグループポリシーの知識を持ち、自分でグループポリシーテンプレートを作る必要がある。グループポリシーテンプレートを自分で作ることができるようになれば完璧だ。

より詳細な機能設定を行い管理するにはログインスクリプトを使う。ログインスクリプトはActive Directoryで管理でき、特定のユーザー、特定のグループに対してログイン時に特定のスクリプトを実行させることができる。このログインスクリプトはコマンドによる記述を行う。ここでこの「Windows コマンドプロンプトポケットリファレンス」の威力が発揮される。この本を読むと、コンピュータの機能をカスタマイズするとき、どのようなコマンドを使えばいいかがわかる。

コマンドの実行によってレジストリの値を変えることもできる。グループポリシーテンプレートを使うよりもログインスクリプトで実行した方が良い場合もある。この本にはレジストリの値を取得したり変更したりするコマンドについても、もちろん、説明されている。しかも対象OSはWindows 2000からWindows7までと広範囲にわたっている。この本が「究極無比」とうたわれる所以である。

この本の特徴として、序章に「コマンドの基礎知識」、第一章に「Cmd.exeの内部コマンド編」が書かれていることがある。「コマンドの基礎知識」では、コマンドを活用するために前提となる知識が説明されている。コマンドの文法、ファイルシステム、フォルダツリー、パス、ユーザーアカウント制限などについてである。「Cmd.exeの内部構造」ではDIRやCD、MD、COPY、DELなどの内部コマンドの説明がある。これらの知識は長年従事してきたシステム管理者や経験豊富なパワーユーザーにはおおむね理解されていることかもしれないが、これからコマンドの使い方を学ぼうと思う者には必須の知識である。またある程度知っているという者にも改めて知識を確認するという意味で読んでおいた方がいい。この2章で76ページが割かれているが、ここを読むだけでもこの本の値打ちはある。

第6章の「ネットワークコマンド編」もシステム管理者には随喜の章である。とかくネットワーク障害は対策が難しい。いったいどこがどうなってネットワークに不具合がおきているか、なかなかGUIだけではわかりにくい。こんなときコマンドを使ってコンピュータやネットワークの状態を調べることができる。ネットワーク管理者にも必携の書だ。「ネットワークコマンド編」には32のコマンドが解説され、65ページも費やされている。ネットワーク関係のコマンドは豊富なオプションを持つものが多く、そのオプションの解説も詳細でわかりやすい。ネットワーク管理者は中途半端なネットワーク管理の解説本を買うよりも、この本を買った方がいい。

特にこの序章「コマンドの基礎知識」は高等学校の教科「情報」の教員にもお勧めしたい。高等学校の教科「情報」ではGUIとCUIの特徴などを教えなければいけないが、CUIつまりキャラクタベース・ユーザー・インターフェースはコマンドプロンプトのことであり、CUIを授業で扱うときに必ず役に立つ。また実習プランの作成には、この本のリファレンス項目の中から生徒が興味を持ち、効果的な理解につながる課題を選ぶことができるだろう。

IMG_2551_mid_640_480

一般ユーザーでも自分のコンピュータを縦横無尽に使いこなしたいと思っているパワーユーザーや、コンピュータのトラブルに悩まされており解決したいと思っているユーザー、そして何よりもシステム管理者にとって「Windows コマンドプロンプトポケットリファレンス」は座右の書となるはずだ。またWindows8の開発も進んでいるようなので、筆者にはぜひWindows8も対象に含めた改訂版をタイムリーに出してもらいたい。

Windows Server 2008 で Windows XP のUSBリムーバブルストレージの使用を禁止するグループポリシーを実現するためにグループポリシー管理用テンプレートを作り適用する

コメントする »

Active Directoryとグループポリシーはクライアントコンピュータを効果的に管理する強力なツールである。業務コンピュータをWindows ServerとWindowsクライアントで構成する理由の半分はActive Directoryとグループポリシーにあると言っても過言ではないはずだ。

Windows ServerのActive DirectoryとグループポリシーはWindows 2000 ServerからWindows Server 2003、Windows Server 2008と進化してきた。当然ながらWindows XP、Windows Vista、Windows 7と新しいクライアントに対応したグループポリシーが充実したが、残念ながらWindows XPを対象外とするポリシーも増えてきた。

データ漏洩の危険性、あるいはUSBメモリを介して広がるウィルスの蔓延といったセキュリティ上の観点から、クライアントコンピュータのUSB大容量ストレージの使用を禁止したいと多くの管理者は思っているはずだ。Windows Server 2008のグループポリシーでは「リムーバブル記憶領域へのアクセス」に関する多くのポリシーが用意されている。たとえば「リムーバブルディスク:実行アクセス権の拒否」といったものだ。しかしこれらのポリシーの多くはWindows Vista以降が対象である。

Group_Policy_USB_003

<Fig.1 : グループポリシー管理エディターでの「リムーバブル領域へのアクセス」グループポリシー>

Group_Policy_USB_005

<Fig.2 : 「リムーバブルディスク:読み取りアクセス権の拒否」ポリシーはWindows Vista以降が対象>

ではWindows Server 2008のグループポリシーでWindows XPのUSBリムーバブルディスクの使用禁止を管理できないのかといえば、そうではない。従来からの方法として、グループポリシー管理テンプレートを作って適用する方法がある。

そもそもWindowsクライアントコンピュータの挙動は、Windows XP以降は「レジストリ」によって基本的に一元管理されることとなった。したがってレジストリを書き換えることで、Windowsコンピュータの挙動を管理することができる。グループポリシーとは、サーバー側で一括してクライアントコンピュータのレジストリを管理することだ、と言い換えてもいい。グループポリシー管理テンプレートは、クライアントコンピュータのレジストリとグループポリシーを結びつけカスタマイズするものである。

まずWindows XPのレジストリからみて、USBリムーバブルディスクの使用を禁止するにはどうすればよいか。これは多くの技術資料がWebでも手に入り、コンピューターに USB 記憶装置がインストールされている場合は、次のレジストリ キーにある Start 値を 4 に設定するとよい。この値を4にすると、ユーザーがコンピューターに USB 記憶装置を接続しても、その記憶装置は動作しなくなる。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor

では実際にレジストリの値がどうなっているか見てみよう。レジストリの値を見るには、クライアントコンピュータに管理者権限のあるアカウントでログオンし、「ファイル名を指定して実行」でRegeditコマンドによりレジストリエディタを実行する。

USB_Regedit_001

<Fig 3 : クライアントPCでRegeditを実行しレジストリの値を確認する>

このように「USBStor」の「Start」値が「3」になっていることがわかる。

ではこの値を4に変えることができるグループポリシー管理テンプレートを作ってみよう。グループポリシー管理テンプレートはテキストファイルなので「メモ帳」などで作ることができる。メモ帳で次のようなファイルを作り、適当な名前で保存する。保存は拡張子.admとする。

—————————————————————-

CLASS MACHINE
CATEGORY !!categorytext
CATEGORY !!subcategorytext

POLICY !!policytext
KEYNAME "SYSTEM\CurrentControlSet\Services\USBSTOR"
EXPLAIN !!explaintext
PART !!label DROPDOWNLIST REQUIRED
VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 3 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
END CATEGORY
END CATEGORY

[strings]
categorytext="管理テンプレートによるポリシー"
subcategorytext="リムーバブルドライブの使用制限"
policytext="USBリムーバブルドライブの使用禁止"
explaintext="usbstor.sysドライバーを無効にしてUSBリムーバブルドライブを使用できないようにします"
label="USBリムーバブルドライブの使用禁止"
Enabled="有効(使用禁止)"
Disabled="無効(使用可)"

—————————————————————-

このグループポリシーテンプレートはMicrosoftの英文の技術資料「Using Administrative Template Files with Registry-Based Group Policy Subscribe regpolicy」を見て書いたものだが、記述方法を少し説明すると、まず「CLASS MACHINE」でポリシーの対象がMACHINEポリシーであることを指定する。そしてCATEGORY – END CATEGORYでカテゴリを指定する。この例では2階層のカテゴリを指定している。POLICY – END POLICYでポリシーの名前、対照レジストリ値、説明文などを決める。さらにPARTとITEMLISTでレジストリ値を設定できるようにする。最後の[strings]以降は、説明文など文字列のエイリアスを記述するところだ。

KEYNAMEで対象のレジストリキーを記述し、VALUENAMEでStart値を指定、キーの値はNAME !!Disabled VALUE NUMERIC 3 DEFAULTでデフォルトで値3によって「無効」つまり制限がなくUSBリムーバブルドライブが使用できる、NAME !!Enabled VALUE NUMERIC 4で「有効」つまりUSBリムーバブルドライブの使用が禁止されることになる。「有効」、「無効」という言葉は、「使用を禁止する」というポリシーに対する言葉である。

ちなみにこの技術資料の例では、テキスト部分を[strings]に書き出す書式になっているが、これは直接文字を""で囲って記述してもいい。たとえば次のようにだ。

—————————————————————-

CLASS MACHINE
CATEGORY "管理テンプレートによるポリシー"
CATEGORY "リムーバブルドライブの使用制限"

POLICY "USBリムーバブルドライブの使用禁止"
KEYNAME "SYSTEM\CurrentControlSet\Services\USBSTOR"
EXPLAIN "ドライバーを無効にして使用できないようにします"
PART "USBリムーバブルドライブの使用禁止" DROPDOWNLIST REQUIRED
VALUENAME "Start"
ITEMLIST
NAME "無効(使用可)" VALUE NUMERIC 3 DEFAULT
NAME "有効(使用禁止)" VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
END CATEGORY
END CATEGORY

—————————————————————-

このグループポリシー管理テンプレートを読み込むには、適当な新しいグループポリシーを作り、「管理用テンプレート」をポイントして右クリック「テンプレートの追加と削除」を行う。

GroupPolicyTemplate_004_edit

<Fig.4 : グループポリシーテンプレートの追加と削除>

GroupPolicyTemplate_006_edit

<Fig.5 : グループポリシー管理テンプレートのファイルを開く>

GroupPolicyTemplate_011_edit

<Fig.6 : グループポリシー管理テンプレートを追加した>

GroupPolicyTemplate_012

<Fig.6 : グループポリシー管理エディターで「従来の管理用テンプレート」が表示された>

作成したグループポリシー管理テンプレートを読み込むと、上図のように「管理用テンプレート」の下に「従来の管理用テンプレート」の項目が表示される。この中に作成したポリシーが記述されている。フォルダを展開すると次のようになっているはずだ。

GroupPolicyTemplate_013

<Fig.7 : グループポリシー管理エディタで「従来の管理用テンプレート」項目を展開した>

「従来の管理用テンプレート」-「管理用テンプレートによるポリシー」-「リムーバブルドライブの使用制限」のカテゴリは、インポートした管理用テンプレートに記述した項目である。そしてその中に「USBリムーバブルドライブの使用禁止」ポリシーができていることがわかる。このポリシーを開くと、次のようになる。作成したグループポリシー管理テンプレートの記述したテキストと、このグループポリシー管理エディター上の表示を比べるとよいだろう。

GroupPolicyTemplate_016

<Fig.8 : グループポリシー管理テンプレートの追加によってできて「USBリムーバブルドライブの使用禁止」ポリシー>

「無効(使用可)」となっているオプションを「有効(使用禁止)」にして「適用」しよう。

GroupPolicyTemplate_017

<Fig.9 : 「USBリムーバブルドライブの使用禁止」ポリシーを「有効(使用禁止)」にした>

対象のWindows XPクライアントコンピュータをこのグループポリシーを設定したOUに入れ、グループポリシーを強制的に適用してみよう。グループポリシーの強制的な適用は、コマンドラインでgpupdate /forceコマンドを実行する。

USB_Regedit_002

<Fig.10 : Windows XPクライアントのコマンドラインでgpupdate /forceを実行した>

そしてレジストリエディタregeditで「表示」-「最新の情報に更新」でレジストリの値を確認する。

USB_Regedit_003_edit

<Fig.11 : レジストリエディタで表示を最新の情報に更新する>

USB_Regedit_004

<Fig.12 : レジストリStart値が3から4に変わった>

レジストリの値が3から4に変わったことが確認できた。

このように、グループポリシー管理用テンプレートを自作し、追加することで任意のレジストリ値をグループポリシーによって管理することができる。したがってクライアントコンピュータのどのレジストリ値をどう変えるとよいかがわかれば、Active Directoryによって一元管理することができる。このレジストリとグループポリシーの関係は、Windows XPだけでなくWindopws VistaやWindows 7でも同様である。グループポリシー管理テンプレートを自作し、グループポリシーをカスタマイズしてうまくクライアントコンピュータを管理しよう。

もしこのやり方でうまくいかない場合は、Active Directoryの構成が間違っていないか、あるいはグループポリシーの作り方が間違っていないか確認しよう。グループポリシーは階層構造に適用されるので、より上位で別のポリシーが効いていれば適用されない場合がある。自分の作ったグループポリシー管理用テンプレートの挙動を確認するためには、既存のポリシー追加するのではなく、まずは新しいポリシーを作って試すことを奨める。

システム管理者のための考察 – Active Directoryユーザー一括作成はVBS、VBScriptでやろう

コメントする »

Active Directoryを使うと、たいへん合理的にシステム全体を管理、運用することができる。Active Directoryの技術は、システム全体をMicrosoft Windows Systemで統合する最も大きな理由であるといえる。ファイルサーバー、プリンタなどシステムリソースへのアクセス管理、Webアクセス管理、監査、データベースのアクセス権など、ユーザー管理を一元化し権限を統合的にしかもわかりやすく簡単に扱えることは極めて大きなメリットである。

ユーザー管理においては、一般の企業であっても一定以上の従業員規模では、画面を操作するGUI環境で手作業でやっていては追いつかないだろう。ましてや私が勤める学校のようなところでは、毎年数百名規模の新入生のユーザー登録を行わなければならない。このとき、なんらかの名簿リストを用いて一括でユーザー作成をしたい。

いまでもそうだが、Active Directoryのユーザー作成を一括で行うことについてWebで検索をすると、CSVDE.EXEやLDIFDE.EXE、DSADD.EXEなどのコマンドを使う方法や、Windows 2000 Server時代のリソースキットによるADDUSERS.EXEを使う方法などが上位にあらわれる。しかしこれらの手法はユーザー作成に関して限定的な古い手法である。もちろんこれらの手法はActive Directoryに関する情報があまりない時代に極めて有用な情報であって、だからこそいまだにWeb検索で上位にヒットするのだが、Active Directoryのユーザー一括作成について今後はPower Shellに取って代わられると思うが、現時点で最も有効な方法はVBScript略してVBSを使う方法だと思う。VBScriptあるいはVBSは、Windows Script Host略してWSHとも言われるスクリプト実行環境で実行される、テキストファイルに記述したスクリプトを実行するものである。この手法はWindows 2000 ServerからWindows Server 2008 R2まで共通して使える手法である。

VBSはテキストファイルに記述する。サンプルとして次のようなスクリプトをテキストファイルに記述してみよう。少し長いがメモ帳で一行で記述する。

————————————————————————————–

Set objOU = GetObject(“LDAP://OU=生徒,dc=kyoiku,dc=local”) :Set objUser = objOU.Create(“user”, “cn=0000000 VBSでユーザー作成”) : objUser.Put “sAMAccountName”, “0000000″ : objUser.SetInfo:objUser.Put “sn”,”snは姓”: objUser.Put “givenName”,”givenNameは名”: objUser.Put “displayName”,”displayNameまたはDNは表示名”: objUser.Put “initials”,”initia”: objUser.Put “description”,”descriptionは説明”: objUser.Put “userPrincipalName”,”userPrincipalNameはログオン名”: objUser.setPassword “kofu&1234″ : objUser.AccountDisabled = FALSE: objUser.SetInfo

————————————————————————————–

実際にメモ帳に記述したところは次のとおりだ。

vsbでユーザー作成_メモ帳

<Fig.1 メモ帳で作ったActive Directoryにユーザーを生成するVBScript>

メモ帳でこのテキストファイルを保存すると、拡張子.txtのファイルが生成するが、この拡張子を.vbsに変更するとサーバー上でVBScriptとして実行できるようになる。実行すると「kyoiku.local」というドメインの「生徒」というOUにユーザーアカウントが生成する。実際にできたユーザーは次のようになっている。

vsbでユーザー作成001

<Fig.2 VBScriptで生成したユーザーのプロパティ「全般」>

vsbでユーザー作成003

<Fig.3 VBScriptで生成したユーザーのプロパティ「アカウント」>

VBScriptの設定項目と生成したユーザーアカウントのプロパティを比べると、設定したい項目についてVBScriptでどう記述すればよいかががわかるはずだ。

これをみると、サーバーにログオンし、管理ツールのGUI環境でやっていると意識しないが、ActiveDirectoryではユーザー情報に関して類似の異なる複数の項目が管理されていることがわかるだろう。「cn」、「sAMAccountName」、「sn」、「givenName」、「displayName」、「initials」、「description」、「userPrincipalName」などだ。

では、大量のユーザー情報からどうやってこのVBScriptを生成するかだが、それにはいろいろな方法がある。たとえばエクセルなどで生成したいユーザーの基本情報、つまりログオンIDや初期パスワード、氏名、などをリストにしておき、セルの結合でスクリプトを生成することができるだろう。もちろんアクセスデータベースを使ってもいいし、SQL Serverで生成してもいい。生成した文字列をテキスト形式でエクスポートし、拡張子を.vbs変えて実行すればよいのだ。

ただデータベースから文字列をエクスポートするとき、文字を「”」で囲んでしまうような処理を自動的にやってしまうアプリケーションもあるので注意が必要だ。その場合でも「メモ帳」の文字置換機能を使って不必要な記号を削除して実行すればよい。

投稿者: Yoshio Matsumoto

2011年9月8日 6:30 PM

Windows Serverにおける管理のためのバッチ処理の手法についてまとめる

コメントする »

4月になって勤務する学校のシステムを再構築することになった。そこで問題になったのは、一括で大量にユーザー作成する方法だ。俺が勤務する学校には常勤の教職員が100名以上、生徒が1100名以上いる。つまり1200のユーザーアカウントを作成する必要がある。

インターネットでWindows ServerのActiveDirecrtoryにユーザーを一括作成する方法を検索すると、主として3つの方法が見つかる。ひとつはAddusersユーティリティーを使う方法、もうひとつはWSH環境でVBScriptを使う方法、そして最後はWindows PowerShellを使う方法だ。

addusers.exeはコマンドライン上で実行するユーティリティープログラムで、「Windows NT 4.0 Resource Kit、Supplement 3」や「Windows 2000 Serverリソースキット」に含まれている。このツールを使うにはリソースキットを買わなければならない。俺もWindows 2000 Serverを管理していたときは、このaddusers.exeを使ってユーザー登録していた。このツールは当時の管理者にとって、たいへんありがたいツールであり重宝されていたので、今でもインターネットでユーザー一括作成の方法を調べると、たくさんの情報が得られる。だがこのツールで登録できるActiveDirectoryの情報には制約がある。全ての情報を登録することができないのだ。

Microsoftは1998年にWindows 98でWindows Script Host、略してWSHを提供した。WSHでは言語としてVBScriptとJScriptが利用でき、これらの言語を使ってスクリプトを書くことができる。コマンドラインに比べて強力な機能を発揮でき、VBScriptはVisualBasicに近い構文を利用できるのでスクリプトを作成しやすい利点がある。インターネットにはWSHを利用したスクリプトの情報もたくさんある。

Windows PowerShellは2006年にマイクロソフトが提供したWindowsにおける本格的なシェル環境である。スクリプト言語はオブジェクト指向に基づいて設計されており、。NET Framework 2.0を基盤としている。Windows PowerShellはWindows XP、Windows Server 2003、Windows Vista、Windows 7などで利用でき、Windows Server 2008では標準で含まれている。

サーバー管理の仕事ではユーザー作成など一括処理を自動的に行いたい場面が多い。これらバッチ処理は今後Windows PowerShellを使って行うことになるだろう。

投稿者: Yoshio Matsumoto

2010年4月29日 11:31 AM

カテゴリー: ActiveDirectory

フォロー

Get every new post delivered to your Inbox.