こんにちは。すっかり風邪をひいた安納です。おまけに本日、関東は雪になるようですね…。あぁ心が寒い。
さて、タイトルにいきなりPodCastと書いてしまい、MS社員としていささか不謹慎感を否めませんが、まぁ、それはそれとして..。
みなさんは、PodCastでWindowsに関する情報収集ってされてますか?英語サイトだと多いのですが、日本語ではマイクロソフト自身の情報を含め、あまり見かけないですよね。
そんな中、PodCast を使用してMS系の情報発信をしてくださっている方がいらっしゃいます。
木沢 朋和 さん - WoodStreamのデジタル生活
http://www.voiceblog.jp/woodstream/
PodCast 登録者数は、なんと約4000人!すごいですね…。
1回あたり15分とはいえ、本業の傍ら情報発信というのは、それは大変なことです。
聴いていただくとわかるのですが、とても肩の力が抜けていて聴きやすいですし、ネタもタイムリーで面白いです。
是非とも購読してみてください!
p.s.
Zune HDをお持ちの方へ..。Zune HDでは日本語サイトのPodCastを購読することができませんが、iTunes で日本語サイトのPodCastを購読すると、Zune HDが勝手に取り込んでくれます。便利ですね。
「Active Directory を使いたいけど、もう別のディレクトリサービスがあるしぃ~」
そんな皆様向けのシリーズ記事第1弾が、Computerworld.jp で公開されました。
OpenLDAP から Active Directory へ移行せよ
http://www.computerworld.jp/topics/mws/172309.html
執筆は、MVPの メディアフォース 澤田さんです。澤田さんの社内での移行事例を基に執筆された記事だそうで、続きが楽しみで仕方ありません。
青春の Windows Server World 無き今、こうした記事が読めるなんて幸せです。
PowerPivot のだいご味の1つは、利用者自身がデータベースに接続して分析を行える点にありますから、利用者に公開したいデータベースにはアクセス権を設定しておかなければなりません
多くのインフラ担当のSEにとって「SQL Server のセキュリティ」というのは鬼門となっており、実は「適当に」設定してあるシステムは少なくありません。
そんな状況で、一般ユーザー権限で EXCEL 2010 ベータ版の PowerPivot を使用し、SQL Serverに接続する場合を考えてみます。

[データベースインポートウィザード]に SQL Server のサーバー名(ここでは SQL01)を入力して[接続テスト]ボタンをクリックすると、環境によってはエラーが出ると思います。
原因は3つ考えられます。
- SQL Server がインストールされているサーバーの ファイアウォール設定によりポートが閉じられている
→ [セキュリティが強化されたWindows ファイアウォールの設定]を見直してください - SQL Server に接続しようとしているプロトコルが許可されていない
→ SQL Server 構成マネージャーを見直してください。
- ユーザーにSQL Serverにアクセスするための権限が無い
今回は、3つ目の原因である「ユーザーにSQL Serverにアクセスするための権限が無い」場合の対処法について考えてみます。
以前にもご紹介しましたが、SQL Server 2008 自習書シリーズの1つ「セキュリティ」および「ログイン認証とオブジェクト権限」は、SQL Serverのセキュリティに関し、とても詳しくそしてわかりやすく解説してくれています(例によってSQLQualityの松本さんありがとうございます!!!)。
SQL Server 2008 自習書シリーズ http://technet.microsoft.com/ja-jp/sqlserver/dd610200.aspx
これはわかりやすい!!PowerPivot を展開する予定があるなら必読です!
ここでは、ドメインユーザーである junichia に対して Northwind データベースおよび配下のテーブルへの「参照」が可能になるようにアクセス権を設定していきます。
自習書にならい、3つのチェックポイントを意識して設定してみます。
なお、この例で使用している SQL Server のバージョンは、2008 R2 です。
【第1のチェックポイント:SQL Serverへの接続を可能にする】
セキュリティの設定を何もいじっていない状態で、「接続テスト」を行うと、以下のエラーが表示されるはずです。
サーバーに接続できませんでした。理由:ユーザーはログインできませんでした。
この場合は以下の対処を行います。
- SQL Server Management Studio を起動し、[セキュリティ]-[ログイン]を展開
- [ログイン]を右クリックして[New Login] を選択
- [ログイン - 新規作成] 画面で、[ログイン名]にドメインユーザーである「junichia」を、[既定のデータベース]に「NorthwindJ」を指定する
- [OK]をクリック
ここまで完了すると、SQL Serverへの接続が可能になります。PowerPivotの接続画面で再度接続にトライしてみてください。今度はサーバーには接続できるものの、以下のようなエラーが出力されます。
サーバーに接続できませんでした。理由:ユーザーの規定のデータベースは開けません。ログインに失敗しました。
自習書にも記載されているように、「第1のチェック」だけではデータベースに接続することはできないためです。
【第2のチェックポイント:データベースへの接続】
次に、junichia に対して、NorthwindJ データベースへの接続を許可します。
SQL Server Management Studio で、junichia のプロパティを開き、[ユーザーマッピング] を選択してください。
ここで、データベースの一覧から「NorthwindJ」をチェックして[OK]をクリックします。
この状態で、再度「接続テスト」をしてみてください。以下のように正しく接続できるはずです。
しかし、ウィザードを進めて、いざテーブルの一覧を取得しようとすると、以下のようにまたエラーが発生します。これはオブジェクトの操作権限が無いためです。そこで「第3のチェックポイント]に進みます。
No Tables ware found in the data source.
【第3のチェックポイント:オブジェクトの操作権限】
- SQL Server Management Studio の[データベース]ノードを開き、[NorthwindJ] を右クリックして[プロパティ]を選択する
- [データベースのプロパティ]画面で[権限]を選択し、「TECHFIELDERS\junichia」の明示的な権限一覧で「選択」にチェックする。「接続」にはすでにチェックされている。
以上で完了です。
テーブル一覧には、以下のように NorthwindJ データベース内のテーブル一覧が表示され、各テーブルに対して select 文が発行できるため、PowerPivot内へのデータのインポートが可能になります。
今回はデータベース全体に対して「選択」権限を与えましたが、もちろんテーブル単位に設定することも可能です。
今後 PowerPivot を展開して「セルフサービスBI」を社内に展開しようとされている管理者の皆さん。SQL Serverのセキュリティの理解は必須です。
がんばりましょう。私も、苦手なSQL Serverですが、がんばります。
2010年1月29日に以下のセミナーを予定しております。ライブ中継もしますので、遠地の方はインターネット経由でご参加ください。あ、それからLT(ライトニングトーク)も募集中です(締切過ぎてますが、なんとかします)!
| 会場:マイクロソフト株式会社 新宿本社 5F セミナールーム スピーカー:安納 順一 2010 年上半期リリース予定の SQL Server 2008 R2 を使用し、ログの取り込みから分析とレポート作成までの総合的な手順について解説します。PowerPivot を使用したセルフサービス BI もご紹介します。 ※Live Meeting によるライブ中継も行いますので、セミナー会場以外からのご参加も可能です。 ライブ中継へのご登録はこちらから [詳細&登録へ→] |
PowerPivot for EXCEL 2010 とは、EXCEL 2010 上から複数のデータベースに同時に接続してAnalysys機能を使用するもので、EXCEL 2010 のアドインとして提供されています。この機能により、EXCELの限界である100万件以上のデータをEXCEL上に取込み、インメモリで高速に分析することができるようになります。
PowerPivot for EXCEL 2010 を使用するには、事前に以下のコンポーネントをダウンロードしてインストールしておく必要があります。
■クライアントにインストールするコンポーネント
クライアントに上記がインストールされていると、EXCEL 2010 の起動時に PowerPivot アドインが読み込まれます。
ただ、タイトルにあるように、セットアップ環境によっては PowerPivot for EXCEL のアドインが正常にインストールされない場合があります。その場合には手動でのインストールを試みてください。
■アドインを手動でインストールする手順
- EXCEL 2010を起動
- [ファイル]メニューから[オプション]を選択
- [EXCELのオプション]ダイアログボックスの左側のメニューから[アドイン]を選択
- 画面の一番下にある[管理]で[COMアドイン]を選択し、[設定]ボタンをクリック
- COMアドイン画面で[Microsoft.AnalisysServices.Modeler.FieldList.Addin.Integration]を選択し、[OK]
以上でEXCELの起動時に、以下のように表示されてアドインがインストールされるはずです。
インストールが完了すると、以下のようPowerPivotタブが表示されます。
この作業を行っても PowerPivotが見えない場合には、以下の点をチェックしてください。
PowerPivot の最新情報について、以下のサイト(英語)も参考にしてください!
気が付けば1月も半ばになりました。早いですね。
さて、ご好評をいただいております Active Directory TechCenter に、ブロガーズページがオープンしました。
Click!
このページには、Active Directory や、Identity Lifecycle Manager/Forefront Identity Manager に関する投稿をしてくださる方を掲載しております。
現時点で、Microsoft社外の方は2010年1月18日時点で 2名 登録されています。
「自分も!」と掲載を希望される方は こちら から以下の情報をお送りください。
- お名前(ニックネームでも可)
- メールアドレス
- BLOG の URL
- BLOG の名称
- フィードしたいタグ(基本的に ActiveDirecctory / AD / FIM / ILM のいずれかですが、その他希望がございましたらご記入ください)
掲載の順番は、基本的にご連絡をいただいた順となります。
なお、以下の点をご了承いただけると幸いです。
- 定期的な更新(月に1回程度)が無い場合には一時的に掲載を解除させていただくことがあります
- 「クラッキング」や「こきおろし」的な情報である場合には掲載をご遠慮いただくく場合があります
ただし、「辛口」を拒否するものではありません!!
有名ブロガーを目指しましょう!
システムに複数のディレクトリ サービスが存在している場合、皆さんはどのような方法でサービス間の整合性を取りますか?
現在のID同期プロセス
有史以来、管理者を悩ませ続けている ID 管理の負荷。中でも複数システムの ID 同期ほど負荷の高い作業はありません。実はマイクロソフトにも ID 同期を実現するソフトウェアがあることをご存知でしょうか? その名も「Identity Lifecycle Manager (ILM) 2007」です。その後継製品として 2010 年Q1にリリースを予定されているのが、「Forefront Identity Manager (FIM/フィム) 2010」 です。
FIM/ILM がハブとなってIDを同期する
ただし誤解しないでください!
FIM 2010 は単に「ユーザーID を同期」するためだけのものではありません。新たに実装された「ワークフロー機能」「セルフ・グループ管理機能」「セルフ・パスワードリセット 機能」は、Active Directory 単体の運用においても自動化の特効薬となるのです。では、これらの新機能について具体的にお話しましょう
■ コードレス=開発不要 な ワークフロー機能
マイクロソフトのID管理製品にも、やっとワークフローが実装されることになりました。しかしただのワークフローではありません。なんと「コードレス」なのです。FIM 2010 が用意している「部品」を使っていただければ、ワークフローのためのコーディングは必要なく、インフラ担当SEまたはお客様が自らワークフローを実装することができるのです!
たとえば、単純な例ですが、Active Directory に新たにユーザーを作成する場合を考えましょう。
通常は、管理者が人事部からユーザーリストを受け取り、それにしたがってバッチファイル等で作成することになるでしょう。ただし、「ITによる内部統制」という観点で考えれば、ユーザーID 作成にあたって、どのような承認を経たかを示す履歴を管理しておきたいところです。そこで必要になるのがワークフローです。
FIM 2010 では、Active Directory をはじめとするディレクトリサービスに変更を加える際のプロセスを、ワークフローとして定義することができます。その際、コーディングによって実装するのではなく、あらかじめ用意された部品を組み合わせてビジネスロジックを組み上げることができます。操作はブラウザから行います。
※RC版の画面例
※RC版の画面例
もちろん、「一切のワークフローの開発をコードレスで」ということではありません。少なくとも、簡単なワークフローを新たに実装する場合や、既に開発が完了しているワークフローの一部のプロセスをちょっとだけ変更する、といった場合に十分使っていただけます(使いこむと、GUIだけでかなり複雑な処理を実装することができます!)。
承認処理は FIM 2010 のポータル画面から行うことも可能ですし、OUTLOOKから行うこともできます。
RC版の画面です
既に OUTLOOK をお使いの方はご存じの通り、OUTLOOKには「メールの受信者にアンケートを依頼し、回答結果を自動集計する」などのテンプレートが用意されています。
FIM 2010 も OUTLOOK 用のレンプレートを用意しており、各種の承認依頼をメールで受信し、OUTLOOK 上から直接 承認/拒否 を行うことができます。
※RC 版の画面です
まとめ
- Active Directory のユーザー管理に FIM 2010 を活用することで、IDの作成やロック解除、グループ参加等のためのワークフローを作成し、社内プロセスの履歴管理が行える
- FIM 2010 のワークフローは、コードレスで組み上げることができるため実装完了までの時間を短縮できるだけでなく、プロトタイプを容易に作り上げることができる
- OUTLOOK と併用することで、承認処理を電子メールを介して行うことができる
■セルフ グループ管理機能
ここで言うグループとは、Active Directory 上の「セキュリティグループ」または「配布グループ」を指しています。
管理者にとって面倒な作業の1つとして挙げられるのは「グループのメンバーシップ」管理でしょう。グループのメンバーシップを変更する代表的なシチュエーションとして、以下が挙げられます。
- 人事異動による一括変更
- 部門内ファイルサーバーのアクセス権の変更
- メーリングリストのメンバーシップの変更
- アプリケーションの利用権限の変更
前出のワークフローを使用すれば、人事異動によってActive Directoryに登録されている部署名が変更された場合、自動的に旧グループのメンバーシップを削除し、新しい部門のグループに所属するようなプロセスを組み上げることができます。承認処理を「自動承認」に設定しておけば、人事異動に伴う承認を自動化することもできます。
しかし、ここでいう「セルフ・グループ管理」とは、人事異動のような定例イベント以外でのグループ管理、すなわち上記4つのシチュエーションのうち後者3つを指しています。
部門内ファイルサーバーのアクセス権を変更したり、メーリングリストのメンバーシップを変更する、そしてアプリケーションサーバーへの利用権限を与える..といった作業は、サミダレ式に発生します。そのため、忙しいシステム管理者だけでなく、設定を依頼した当人にもストレスが加わりがちです。そこで使えるのが「セルフ・グループ管理機能」です。
たとえば部門内ファイルサーバーにアクセス権を与える場合のプロセスを考えてみましょう。およそ以下のような流れになるはずです。
- 利用者が利用申請をする(紙に書く or メール)
- ファイルサーバーのオーナー(内部統制上の承認者)が承認する
- 管理者がファイルサーバーにアクセス権を与える(グループに申請者のIDを加える)
これ、無駄だと思いませんか?特に3番目の処理。オーナーが承認したら、即座にメンバーシップに加えられたほうが、管理者の負荷も低くなりますし、申請者の待ち時間も短くなります。
かといって、オーナーがファイルサーバーのアクセス権変更を直接行う…なんてことになったら、あまりITに明るくない「部長」や「課長」といった管理職の方が作業しなければならず、そのたびに「詳しい人」が呼ばれて作業する…なんてことになりかねません。
そんな負荷を軽減してくれるのが、前出のワークフローです。
たとえば、ワークフローにより、以下のようなプロセスが実現できます。
- 利用者は OUTLOOK を使用してグループへの参加依頼をする
※RC版の画面です - 参加依頼はグループのオーナー(=ファイルサーバーのオーナー)にメールされる
- オーナーは OUTLOOK を使用して「承認/拒否」する
いかがでしょう?誰にも「面倒な作業」や「テクニカルなスキルを必要とする作業」が要求されないことがわかりますし、管理者にも全く負荷がかかっていません。
ここでは OUTLOOK を使用していますが、OUTLOOKが無い場合でもFIM 2010のポータル画面から申請/承認することができます。
同じように、メーリングリストのメンバーを配布グループによって管理している場合や、App-V(マイクロソフトの仮想アプリケーション配信サーバー)といったアプリケーションサーバーの利用権限も同様に行えます。
ちなみに、このような機能は既にマイクロソフト社内にも導入されており、「AutoGroup」という名称で愛用されています。
まとめ
- セルフグループ管理機能により、管理者の作業が軽減されるだけでなく、利用者のニーズに対して柔軟にかつ迅速に対応することができる
- メンバーシップの変更に関するプロセスは FIM 2010 のワークフローを通過するため、アクセス権限付与等の履歴も残される
■セルフ・パスワードリセット 機能
これについては説明の必要はないかもしれません。俗にいう「秘密の質問」機能です。
これまで、Active Directoryに登録したユーザーのパスワードを忘れてしまった場合には、システム管理者にリセットを依頼する必要がありました。この作業は、管理者にとってストレスとなるだけでなく、利用者にとっても「業務が使えない!」「ログオンできない!」といったストレスになります。学校ならば、少数の学生がログオンできないために、授業を停止して情報センターにリセットを依頼する…なんてことが起きていたのではないでしょうか。
このようなストレスをすこしでも緩和するために用意されたのが、パスワードのセルフリセット機能です。
FIM 2010とともに提供されるエージェントを事前にインストール(グループポリシーを使用して配布することも可能)しておくと、利用者がはじめてログオンしたときに「秘密の質問」に答えるよう、特別な画面が表示されます。
「秘密の質問」は FIM 2010 のワークフローによって制御されており、「どのような質問をするか」「いくつ質問するか」「いくつ回答しなければならないか」等の項目が管理されています。
秘密の質問に対する回答を保存しておき、Windowsのログオン画面で「パスワードのリセット」をクリックすると、秘密の質問が表示されます。
秘密の質問は、用意されている質問からランダムに表示することも可能ですし、決まった質問を表示することもできます。もちろん回答しなければならない質問数を指定することもできます。
質問に正しく回答できれば、新しいパスワードを設定する画面が表示されるので、自分自身でパスワードをリセットすることができます。
まとめ
- パスワードのセルフリセット機能により、パスワードを忘却した利用者が自らパスワードのリセットを行うことができる
- FIM 2010の同期機能と併用すれば、他のディレクトリサービスへの同期も自動的に行われる
いかがでしょう。Active Directory 単体の運用であっても、FIM 2010 を使用することで、より高度な、より柔軟な、より迅速な運用ができそうな気がしませんか?是非とも OUTLOOK と併用いただき、面倒な承認/申請処理の負荷を軽減してください!
ここでご紹介したいずれの機能も、単に「負荷を軽減する」「コストを削減する」ことだけを目的としているわけではありません。FIM 2010 によって、Active Directoryによるセキュリティに守られた状態を維持しつつ「IT利用者のビジネス活動を停滞させない」柔軟な仕組みを作り上げることができるのです。
FIM 2010 を含む Forefront ブランド製品共通の合言葉は、Business Ready Security(ビジネスで使えるセキュリティ)です。セキュリティにより、管理者にも利用者にも、そして経営層にもメリットのある IT を目指していきましょう!
マイクロソフトのセキュリティ製品群 – Forefront http://www.microsoft.com/japan/forefront/default.mspx

ユーザー ID の変更履歴を収集する方法
「あるユーザー ID の属性を間違えて変更してしまった!」なんてこと、ありませんか?
Windows Server 2008 からサポートされた「ある種の監査ログ」には、ユーザー ID の変更履歴がしっかりと記載されています。今回は簡単な PowerShell スクリプトを使用して、監査ログに蓄積された ID の変更履歴を取り出す方法をご紹介します。
なお、これからご紹介するスクリプトを使用するには、以下の準備が必要です。
- PowerShell を有効にする
- ディレクトリ サービスの監査を有効にする
- Active Directory オブジェクトの監査設定を変更する
【準備】
1.PowerShell を有効にする
管理者権限で PowerShell コンソールを起動し、以下のコマンドを入力して PowerShell スクリプトを使えるようにしてください。
Set-ExecutionPolicy RemoteSigned
2.ディレクトリサービスの監査を有効にする
ユーザーIDの変更を追跡するには、Active Directory の監査のうち、「ディレクトリサービスの監査」を有効にする必要があります。有効にする手順は以下の通りです。
「サーバーマネージャー」を起動し、[機能] - [グループポリシーの管理] - [フォレスト] - [ドメイン] - [<ドメイン名>] - [Domain Controllers] を開く。
[Default Domain Controllers Policy] を右クリックして[編集]を選択する。
[Default Domain Controllers Policy] - [コンピューターの構成] - [ポリシー] - [Windows の設定] - [セキュリティの設定] - [ローカル ポリシー] から [監査ポリシー]を選択する。
右ペインのポリシー一覧で、「ディレクトリサービスのアクセス監査] の [成功] を有効にする
再起動する
3.Active Directory オブジェクトの監査設定を変更する
監査ログを取得するには、変更を追跡するオブジェクトの監査を有効にする必要があります。
ここでは、Users 配下のユーザー全体を監査するものとします。
[管理ツール] - [ADSI エディター] を起動する。
[ADSI エディター] を右クリックして [接続] を選択する。
[既定の名前付けコンテキストを選択する] がチェックされていることを確認して、[OK]をクリック。
[CN=Users] を右クリックして [プロパティ] を選択。
[セキュリティ] タブを選択し、[詳細設定] をクリックして [監査] タブを開く。
[追加] をクリックして [Everyone] に対して [すべてのプロパティの書き込み] の [成功] をチェックする。このとき、監査の設定はUsers配下のすべてのユーザーに対して適用するため、「このオブジェクトとすべての子オブジェクト」が選択されていることを確認してください。
以上で準備完了です。
試しに、Users 配下の適当なユーザーの属性を変更してみてください。

セキュリティイベントログに、イベントID 5136 が以下のように報告されているはずです。既存の値を書き換えた場合には、「値が削除されました」と「値が追加されました」という2つのイベントが発生します。これにより、変更前と変更後の値を把握することができます。からっぽの属性に値を設定した場合には、「値が追加されました」のみが出力されます。

【変更を追跡するスクリプト】
出力されたイベントID 5136 を追跡するためのスクリプトは以下の通りです。以下のスクリプトを拡張子 .ps1 で保存してください。たったこれだけのスクリプトで、属性の履歴を追跡することができます。
| $UserID = $Args[0] $ev = Get-EventLog -LogName "Security" -Message "*$UserID*" | Where-Object {$_.EventID -eq 5136} $ev | ForEach-Object -process{ $timeGenerated = $_.TimeGenerated.ToString() $n = ($_.message).Split("`n") $strUserID = ($n[13].Trim()).Split(":") $strProperty = ($n[18].Trim()).Split(":") $strValue = ($n[20].Trim()).Split(":") $strOperationID = ($n[23].Trim()).Split(":") $strOperation = Switch ($strOperationID[1].Trim()) {"%%14674" {"追加"} "%%14675" {"削除"} default {"不明"}} $outString = $timeGenerated + "," + ($strUserID[1].Trim()).Replace(",","\") + "," + $strProperty[1].Trim() + "," + $strValue[1].Trim() + "," + $strOperation.Trim() $outString } |
スクリプトの書式は以下の通りです。
※スクリプトを EventID5136.ps1 という名前で保存したものとします。
.\EventID5136.ps1 [ユーザーID]
[ユーザーID]には、追跡したいユーザーのユーザーIDをを指定してください。指定しなければ、すべての 5136 イベントを出力しますが、その場合はユーザー属性の変更履歴以外のイベントも出力されます。
実行すると以下のように出力されます。
出力行は以下の形式で保存されています。
[イベントの発生日時],[変更されたユーザーのDN],[変更された属性],[値],[操作の種類]
出力ファイルはCSVファイルに保存することを想定し、DNの区切り文字を「\」に変換していますので注意して下さい。
今回ご紹介したスクリプトは高機能ではありませんが、「うっかりやってしまったとき」に大変便利です。ぜひとも皆様でカスタマイズしてよりよいものにしてください。
※Windows 2000の販売開始日は2000年2月18日です…失礼いたしました
@IT で連載されている 「Windows Server 2008 R2 の真価」ですが、今月は安納の番ということで、以下の2本の記事が公開されました。
■Windows Server 2008 R2 進化したActive Directory
http://www.atmarkit.co.jp/fwin2k/winsv2008r2/06adr2/adr2_01.html
■Windows Server 2008 R2 強化されたGroup・Policy 機能
http://www.atmarkit.co.jp/fwin2k/winsv2008r2/07gpr2/gpr2_01.html
また、TechNet Flash Newsletter でもお知らせしたとおりですが、Active Directory専用の技術サイト(TechCenter)が公開されました。
■Active Directory TechCenter
http://technet.microsoft.com/ja-jp/activedirectory/default.aspx
さらに、2010年上半期にリリース予定の Forefront Identity Lifecycle Manager(FIM)2010 の技術サイトも公開されてています。
■Forefront Identity Manager(FIM) TechCenter (旧称 ILM)
http://technet.microsoft.com/ja-jp/ilm/default.aspx
そんなわけで、ざわつき始めたActive Directory周辺ですが、それもそのはず 2010年2月末、Active Directory は10歳を迎えます。
Active Directory が完成した日を誕生日とするか、世間にリリースされた日を誕生日とするか議論が分かれるところですが、Evangelism Groupでは、利用者が手に取って使える状態になった、2000年2月1828日 を誕生日とさせていただくことにしました(いろいろご意見はあるでしょうが…)。つまり2010年2月1828日は10歳の誕生日!であると。
※すみません…誕生日は2000年2月18日の間違いでした…失礼いたしました
この10歳の誕生日に向けて、Evangelism Gruop 内ではいくつかのプロジェクトが動いており、誕生日を盛り上げるための施策を検討中です。
詳しい情報は追ってお伝えしますので、お楽しみに!
※TechNet Library に SQL Server 2008 R2 のオンラインドキュメント(日本語)が掲載されていることに気づきましたので追記しておきます…
2010年 の SQL Server 2008 R2 のリリースもせまってきましたが、いかがお過ごしでしょうか。
SQL Server 2008 R2 に関する最新リソース情報をお送りします。
■Tech Fielders セミナー
2010年1月15日 開発者向け
開発者の為のデータ処理入門セミナー ~アプリケーションの実装とSQL Serverの活用と~
スピーカー 小高・安納
2010年1月29日 インフラ担当SE向け
BI を用いたログ管理(取込みから分析まで)~SQL Server 2008 R2 編
スピーカー 安納
■デモビデオ
第1回 SQL Server Bloggers Meeting ビデオ(全8本)
http://blogs.technet.com/junichia/pages/3298745.aspx
上のサイトに、Bloggers Meetingのビデオをまとめてありますので、ご覧になってみてください。特に、第6回以降のデモンストレーションはお勧めです。
デモンストレーションをご覧になったら、是非とも以下の自習書で試してみてください!
■R2用自習書
早くも Windows Server 2008 R2 の自習書がリリースされています。こちらからCTP版をダウンロードし、新しい機能を試してみましょう!
上記のほか、近日中に SQL Azure、MDS(Master Data Services)に関する自習書もリリース予定です。
ちなみに、自習書を執筆してくださっているのはおなじみ SQL Server MVP でもある SQL Quality の松本夫妻です。松本さん、ありがとうございます!!
■BLOG
SQL Server プロダクトマネージャーチーム
http://blogs.technet.com/sqlpm-j/
■SQL Server 2008 R2 製品サイト
http://www.microsoft.com/japan/sqlserver/2008/r2/prodinfo/default.mspx
■SQL Server 2008 R2 TechCenter
まだありません…ちなみに、SQL Server 共通の TechCenter は以下の通りです。
SQL Server TechCenter (7.0/2000/2005/2008)
http://technet.microsoft.com/ja-jp/sqlserver/default.aspx
※2010年01月12日追記
SQL Server 2008 R2 オンラインブック(日本語)
http://technet.microsoft.com/ja-jp/library/bb418433(SQL.10).aspx
そんな社交辞令が嫌いなみなさんにお勧めのサイトがあります。
ただ、ロード時間っていうんですか?入場手続きがちょこっと時間かかるんです。
なので、以下をクリックしたら、少しの間ほっぽっといてください(「ほっぽっとく」って標準語ですよね?)。
入場すると、こんな素敵なお話を見たり聴いたりすることができます。
これだけあれば、正月にレンタルビデオは必要ないですね。
【Windows Server 2008 R2 系】
製品概要 - Windows Server 2008 R2 進化したサーバー プラットフォーム (解説) 製品概要 - Windows Server 2008 R2 機能強化ポイント (解説 & デモ) 製品概要 - System Center によるサーバー・クライアント運用管理 (解説 & デモ) セミナー - System Center がWindows Server 2008 R2 と Windows 7 に必要なわけ セミナー - 実例 2008 R2 標準機能活用によるサーバー仮想化、セキュリティ対策のポイント セミナー - Windows Server 2008 R2 の Active Directory でセキュリティ強化 セミナー - Hyper-V 2.0 導入におけるプランニング & マイグレーション実施手法 セミナー - 働き方を "カエル" NTTデータの Windows Server 2008 R2 ソリューション セミナー - 物理環境から仮想化環境の統合管理ソリューション System Center Essentials セミナー - 最新のネットワーク セキュリティ製品 "Forefront Edge Security" のご紹介 セミナー - ここまできた! 仮想化最前線 - Hyper-V 2.0 の実力を検証する - セミナー - Dynamic IT を実現する Hyper-V 2.0 の全貌 セミナー - クラウド型スパム・ウイルス対策によるメール システムの保護: Forefront Online Protection for Exchange Server セミナー - 企業が信頼して活用できる日本ユニシスの次世代 iDC 基盤 セミナー - Hyper-V 2.0 を使用した企業の仮想化 IT 基盤を考える セミナー - マイクロソフト製品だけで出来るシンプルかつ高機能な仮想化インフラ セミナー - 最新の Web サーバー IIS 7.5 の実力を一刀両断 セミナー - Windows Server 2008 R2 で実装する Active Directory とファイル サーバー セミナー - Active Directory マイグレーション: ドメインの統合と整理 セミナー - System Center Operations Manager 2007 R2 による異種環境の監視 セミナー - System Center 製品による PC 管理の標準化 セミナー - System Center Service Manager 2010 概要 セミナー - 管理製品のサービス化と完全自動化に向けた Dynamic IT 戦略 事例 - 三井物産株式会社 Windows Server 2008 R2 Hyper-V 採用のメリット 事例 - 株式会社インターネット イニシアチブ Windows Server 2008 R2 採用理由 【Exchange 2010】
製品概要 - Exchange Server 2010 柔軟性と信頼性 (解説 & デモ) 製品概要 - Exchange Server 2010 場所を問わないアクセス (解説 & デモ) 製品概要 - Exchange Server 2010 保護 & コンプライアンス (解説 & デモ) セミナー - 最新のメッセージング環境 Exchange Server 2010 事例 - ユニファイド コミュニケーションを使った Microsoft 社員の新しい働き方 事例 - 味の素株式会社 Exchange Server 2010 早期導入評価 【Windows 7】
製品概要 - Windows 7 概要 (解説) 製品概要 - Windows 7 基本強化ポイント Part 1 (解説 & デモ) 製品概要 - Windows 7 基本強化ポイント Part 2 (解説 & デモ) 製品概要 - Windows 7 企業での利用メリット (解説 & デモ) セミナー - Windows 7 Enterprise と仮想化技術で実現する「デスクトップの最適化」 事例 - NTTデータ Windows 7 ソリューション サービス エンドース コメント 事例 - OBC Windows 7 対応ソフトウェア エンドース コメント 事例 - ソースネクスト Windows 7 対応ソフトウェア エンドース コメント イメージ映像 - Windows 7 メイキング イメージ映像 - Windows 7 (1) イメージ映像 - Windows 7 (2)
突然ですが2009年12月14日付のBINGトップ画像。た、たまりませんな…。「もきゅー」とか言ってますよ。
さて、Microsoft Agentについては、このBLOGで何度か扱いました。
覚えてますか? Microsoft Agent ...
http://blogs.technet.com/junichia/archive/2007/10/12/microsoft-agent.aspx
Windows 7では Microsoft Agent のサポートが無くなり、とてもがっかりな気分で毎日を過ごしていました。ところが、なんてことでしょう。以下のKBによれば、修正プログラムで旧来のアプリケーションを救済することができるようです。
Microsoft Agent 対応のプログラムが Windows 7 で動作しない(機械翻訳)
http://support.microsoft.com/kb/969168
ただし、本文にも書かれている通り、この修正モジュールはこれまで使用していたMicrosoft Agent対応のアプリケーションを救済するためのものであり、決してWindows 7上で動作するMicrosoft Agent対応のアプリケーションを開発するためのものではありません。
それを心に留めつつ、せっかくなので PowerShell からの COM 呼び出しを覚えがてら遊んでみましょう。手元に遊び用のWindows 7を用意してください。VHD Bootで作るとよいですね。
【準備1】MS Agentのインストール
※脅すわけではありませんが、くれぐれも動作がおかしくなっても困らないマシンで試してください!
まずは以下のページ中段にある「Microsoft Agent Core Component」をダウンロードしてインストールしてください。
http://www.microsoft.com/PRODUCTS/msagent/main.aspx
ただし、インストール終了のメッセージは表示されず、以下の画面が表示されますので、「このプログラムは正しくインストールされました」を選択してください。
この状態でMicrosoft Agentを起動しようとすると、以下ように「80040154」エラーが表示されてしまいます。これは、MS Agent がWindows7に対応していないためです。
【準備2】Win7用 MS Agent コアコンポーネントを上書きインストール
以下をクリックして画面の上にある「修正プログラムのダウンロード」から修正モジュールを要求してください。メールでリンクが返ってきますので、ダウンロードしてインストールしましょう。64ビット用の32ビット用が用意されているので注意してください。
この修正モジュールにより、モジュール類がWindows 7対応のものに置き換わります。この修正モジュールだけインストールしたのでは、必要なレジストリエントリ等が書き込まれませんので注意してください。かならず【準備1】が必要です。
修正モジュールのインストールが完了したら、Windows PowerShell のコンソールを起動し、以下のコマンドを入力してみてください。
PS C:\> $objAgent = new-object -com Agent.Control.2 PS C:\> |
エラーを含め、何もメッセージが出なければインストールは正常に完了しています。
【さっそく実験】
さっそく使ってみましょう。ここで、「あれ?キャラクターデータはインストールしないの?」と思った方は、Microsoft Agent に慣れている方です。でも大丈夫です。修正モジュールには魔法使いの「Merlin」が標準で入っています。
PowerShellコンソールを起動し、可能ならば「スピーカーも有効に」しておいてください。
以下を 1行ずつ PowerShell コンソールにコピペしてみてください。
$objAgent = new-object -com Agent.Control $objAgent.Connected = 1 [void]$objAgent.Characters.Load("Merlin","C:\windows\msagent\chars\merlin.acs") $objMerlin = $objAgent.Characters.Character("Merlin") [void]$objMerlin.Show() |
最後の行(Show())を実行した際に、画面左上にMerlinが「ぼわっ」と表示されれば成功です。
上記のスクリプトを VBScriptに置き換えると以下のようになります。簡単ですね。CreateObject は「new-object」、戻り値が無い処理には[void]を使うといったことを理解できれば、ひとまずなんてことはありません。
| Set objAgent = CreateObject("Agent.Control") objAgent.Connected = TRUE objAgent.Characters.Load "Merlin", "C:\Windows\MSAgent\chars\Merlin.acs" Set objMerlin = objAgent.Characters.Character("Merlin") objMerlin.Show |
VBScript と比較して PowerShell のよいところは、1行ずつ実行した結果が見られることです。これは、Microsoft Agent のようなアニメーションを操作するアプリの場合にはとても便利です。VBScriptじゃ専用のエディタを使ってブレークポイントを設定しないと出来なかったですし、スクリプトの実行中に処理を追加したり変更してやり直すなんてことはできませんでした。
以下、1行ずつ実行してみましょう。
#Merlinに「Hello」としゃべらせる [void]$objMerlin.Speak("Hello!") |
スピーカーを有効にしておけば本当にしゃべります
#画面上を座標100,100に移動させる [void]$objMerlin.MoveTo(100,100) |
#水晶を使って探し物の動作をさせる [void]$objMerlin.Play("Search") |
#Merlinに永遠に書き物をさせる [void]$objMerlin.Play("Writing") #書き物からの復帰 [void]$objMerlin.Stop() |
#Merlinを画面上から消す [void]$objMerlin.Hide() |
どうでしょう?PowerShellって便利ですよね。VBScriptのころは面倒だった1つ1つの動作確認が簡単にできます。
以下のページにはMerlinで使えるアニメーションリストが掲載されていますので参考にしてください。
Merlinのアニメーションリスト
http://msdn.microsoft.com/en-us/library/ms695930(VS.85).aspx
Merlin以外のキャラクターをインストールするには、以下からダウンロードしてください。http://www.microsoft.com/PRODUCTS/msagent/main.aspx
その他の各キャラクターのアニメーションリスト
http://msdn.microsoft.com/en-us/library/ms695821(VS.85).aspx
※2009年12月8日 追記 動画公開(第1弾) http://blogs.technet.com/junichia/pages/3298745.aspx
※2009年12月7日 追記 Publickey 様
12月4日、新宿オフィスにてMSとしては異色のイベント「SQL Server ブロガーズミーティング」を開催いたしました。
Click!
SQL Server チームのプロダクトマネージャー である、斎藤と北川がプレス向け発表をそのままに、
- SQL Server 2008 R2 の新機能
- SQL Azure との関係性
について熱く語りました。
参加者は15名程度と、小規模なイベントではありましたが、質問したくてたまらない方々による質問攻撃に、斎藤/北川が懸命に答えている様子は、普段の大規模なセミナーでは見られない光景でした。
当日の模様は YouTube TechNet Flash Channel にて公開予定ですので、残念ながら参加できなかった方はいま少しお待ちください。
なお、当日の発表内容は参加者の方々がさっそくBLOGでまとめてくださっていますので、以下をご覧ください。
※2009年12月4日 13時時点で発見できた投稿です
※俺も書いたのだ!という方がいらっしゃいましたらご連絡くださいませ
■熱く語るPM北川(左)と斎藤(右)

■プレス向け屏風の前で、顔出しOKな方々による記念写真。

ヒトはパンのみに生きるに非ず…とか言うようですが、わたしは PowerShell のみに生きてもよいとさえ思っています。もうたまりません。いま、可愛いヤツ ランキングをつけたら、間違いなく Windows PowerShell が1位です。2番目が 赤ちょうちん の頃の秋吉久美子。3番目に偕楽園の梅娘と写真を撮ってくれと泣いてせがんだ5歳の頃の自分です。
アクセス権の一覧を作りたいけど、うまい方法が無くて困っている方はいらっしゃいませんか?これまで、CACLSコマンドとかを使ってきて、うーんどうも…じゃVBSで作るか!と思い立ったものの、以外に難しくて断念したり…(VBSを使う方法は知っておく価値アリなので、時間のあるときに解説しようかとも思っています)。
いい方法があるんです。Windows PowerShell の Get-ACL コマンドレットです。
このコマンドレット1つで、ファイルシステムも、レジストリも、はてはActive Directory のオブジェクトに関してもアクセス権を参照することができるのです!現場のSEさんにとって、これほど便利なコマンドがいままであったでしょうか?いや無いです。
■ファイルシステム編
まずはPowerShell のコンソールを開いてください。
以下は、C:\ に設定されているアクセス権を取得しています。
| PS C:\> Get-ACL c:\ | Out-GridView |
出力結果は以下の通りです。パイプ(|)を通して、Out-GridView に結果を渡しています。
うーん。見やすい…。ちなみに、おなじみCACLSコマンドを使用した結果は以下の通りです。
| PS C:\> cacls C:\ | Out-GridView |
うむむ、いまいちですよね。やっぱり、Get-ACL の結果のほうが美しいです。
では、Get-ACLの結果を CSVファイルに保存するにはどうするかといえば、以下のようにします。ちょっと長いですが、1行で書けてしまいます。
| PS C:\> Get-Acl C:\ |Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, Owner, AccessToString |Export-Csv C:\tmp\accesslist.csv |
CSVファイルに保存するには、Export-CSV コマンドレットを使うのが簡単です。ここでは、C:\tmp\accesslist.txt というファイルに保存しています。
さて、難しいのは、「Get-ACL」と「Export-CSV」の間にあるSelect-Object ですよね。ためしに、Get-ACL の結果をそのまま Export-CSVを使って保存してみてください。Path、Owner、AccessToString以外のプロパティも保存されてしまうことがわかります。今欲しいのは、ひとまず3つの属性だけなので、Select-Object を使用して、Get-ACLの出力結果から必要な3つの属性だけを抜き出しています。
もう1点、以下のコマンドで、Path の値を見てください。
| PS C:\> Get-Acl C:\ |Select-Object path Path ---- Microsoft.PowerShell.Core\FileSystem::C:\ |
Path の値として「Microsoft.PowerShell.Core\FileSystem::C:\」という文字列が格納されていることに気づくと思います。これはPowerShell内での絶対パスの表現方法です。例えば、レジストリの場合には、Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\ 、Active Directory ならば、ActiveDirectory:://RootDSE/CN=Schema,CN=Configuration,DC=contoso,DC=com といった具合です。
Microsoft.PowerShell.Core\FileSystem:: が入っているからと言って意味不明なものでもありませんが、管理上、ちょっと気持ち悪いですね。
そこで、このPowerShell上の絶対パスを、ファイルシステムやレジストリ、Active Directory 内の相対的なパスに変換したいと考えるわけですが、この時に使用するのが Convert-Path コマンドレットです。ためしに、以下のように入力してみてください。結果として、ファイルシステムプロバイダー内の相対パスである C:\ が結果として得られます。
| PS C:\> Convert-Path( (Get-ACL C:\).Path ) C:\ |
で、残った問題は @{Label="Path";Expression={Convert-Path $_.Path}} が何を意味しているかですよね?
なぜ単純に、Select-Object {Convert-Path $_.Path}, Owner, AccessToString と書かないのか?ためしに書いてみると、以下のような結果になります。
| PS C:\> Get-Acl C:\ |Select-Object {Convert-Path $_.Path}, Owner, AccessToString Convert-Path $_.Path Owner AccessToString -------------------- ----- -------------- C:\ NT SERVICE\TrustedInstaller NT AUTHORITY\Authenticated... |
何がダメなのかわかりますか?そうです。ラベル名として Path が欲しいのに、Convert-Path $_.Pathとなってしまうのです。せっかくCSVに保存するのですから、きれいにしておきたいですね。そこで、@{ }の登場です。@{ } は、Key-Value 型の配列を表現しています。
わかりずらいので、図にしてみました。以下をご覧ください。Get-ACL の戻り値は、以下の図に書かれた表のように、LabelとExpressionの対で格納されています。
つまり、@{Label="Path";Expression={Convert-Path $_.Path}} は、Label の値が「Path」の列のExpressionの値を「Convert-Path $_.Path 」という値に置き換える..ということを意味しています。
これで疑問解決ですね。
安心して、以下を実行してください。
PS C:\> Get-Acl C:\ |Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, Owner, AccessToString |Export-Csv C:\tmp\accesslist.csv
保存された accesslist.csv ファイルをEXCEL等で開くと、以下のように見えるはずです。
| Path | Owner | AccessToString |
| C:\ | NT SERVICE\TrustedInstaller | NT AUTHORITY\Authenticated Users Allow AppendData NT AUTHORITY\Authenticated Users Allow -536805376 NT AUTHORITY\SYSTEM Allow FullControl NT AUTHORITY\SYSTEM Allow 268435456 BUILTIN\Administrators Allow 268435456 BUILTIN\Administrators Allow FullControl BUILTIN\Users Allow ReadAndExecute, Synchronize |
この表の中で、アクセス権が数値で書かれているものがあります。これらは、特殊なアクセス権を表現しています。
- -536805376:サブフォルダーとファイルに対する特殊なアクセス権
- 268435456 :サブフォルダとファイルに対するフルコントロール
これら数値は、特殊なアクセス権の組み合わせによって変わります。
複数のファイルやフォルダのアクセス権を取得する際にはワイルドカードを使用することもできます。
また、指定したフォルダ配下を全てなめてアクセス権を取得するには、Get-ChildItem を使用して、以下のように書きます。複数行にまたがっていますが、改行なしの1行です。
| PS C:\tmp> Get-ChildItem -Recurse |Get-Acl | Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, Owner, AccessToString |Export-Csv C:\tmp\accesslist.csv |
長くなってしまったので、レジストリとActive Directoryについては次回で。
すぐに試してみた方は、PowerShellのコンソールで、「CD HKLM:」または「CD AD:」と入力してから Get-ACLしてみてください。感動すると思います。
とうとう12月ですね。2点ほど告知をさせてください。今週、以下のイベントを開催予定です。年の瀬が近いせいか、いつもよりもお申し込みの方が少ない印象です。よろしければいらしてください。
- 12月3日 SQL Server ブロガーズミーティング 18:30-19:30
SQL Sever 北川により新しいSQL Server 2008 R2+SQL Azureに関する説明会です。
技術セミナーではありませんが、プレス向け発表と同様の内容を実施いたします。皆様にはプレスになったつもりでご参加ください! - 12月5日 Tech Fielders の集い 2009/冬 10:00 – 19:00
恒例の集い企画です。今回は「情報発信のススメ」と題し、ITを心から楽しんでいる方々による「情報発信のコツ」をお聞きします。休日開催ですので、懇親会も派手にやりますよ~
さて、11月30日に開催したPowerShellセミナーにご参加くださったみなさま、ありがとうございました。月末のクソ忙しい時期に開催してしまってすみません…ライブ中継も行いましたので、遠方の方もご覧いただけたかと思います。
当日、私が使用した資料をSlideShareにアップしてあります。
あえて Server Core という言葉を使っておりますが、中身はServer Core以外でも使える手法ばかりです。特に、Active Directory のPowerShell Module はいいですねぇ。
面白い情報満載ですので、是非ご覧ください。
2009年11月21日(土)は、MVP 瀬尾(せお)さんのコミュニティである、
技術ひろば.net
http://hiroba-tech.net/tabid/106/Default.aspx
にて、「PowerShell で操作するActive Dirctory」のセッションを持たせていただきました。
Active Directory を意識してくださる開発者が少ないという現状を、なんとか変えたいという想いで登壇させていただいたものです。
私の前を担当された武田さんが「CLR Profilerの使い方」という、私にとっては???な内容でしたが、参加された方々からの矢継ぎ早の質問を見るにつけ、恐ろしいほどのアウェイ感に襲われながらの登壇でした。
当日使用した資料は以下に掲載しておりますので、よろしければご覧ください。
PowerShell の基本的な使い方から、Active Directory の触り方についてサンプルを交えて触れているので、スクリプトに興味のあるインフラ担当SEさんにも役に立てると思います。
※以下は SlideShare へのリンクです。