圧倒的なシェアを誇るハイパーバイザーでありプライベートクラウドのプラットフォーム、VMWare。
圧倒的なシェアを誇るパブリッククラウド プラットフォーム、Amazon AWS。
VMWare も AWS も業界を盛り上げる同志であるとともに、プラットフォームの競合ベンダーでもあります。いうまでもなく。
そして、両社いずれもそれぞれの分野のリーダーです。マイクロソフトはここ数年それを追い続けてきました。
が、そろそろどうでしょうかね。魔導士か戦士か、はたまた旅芸人かの違いはあるにせよ、対等に戦えるステージに立てたなと感じています。
我々のチャーム(注:相手を魅了する呪文、レベルが低いと効きにくい)も、VMWare や AWS を利用中の皆様に効果を与えられるようになったはずです。
そこで、どうでしょう?ちょっとだけ我々のパーティーに加わってみませんか?
といっても現在の環境から移行できることがわからないと、試したくもなりませんね。
ということで、以下のようなコンテンツをご用意しました。
ベースは英語なのですが、ビデオのほうにはきちんと日本語テロップが表示されます。
ダウンロードも可能ですので、是非通勤時間にでも見てください。
ここをご理解いただけると、以下のような移行パスと、移行後の素敵な世界が可能になります。
年末ですね。早いもんです。そりゃートシもとりますし、割と真剣に国の行く末を考えたりもするようになります。
行動原理の90%が食欲で、半ズボンこそが男のたった一つの勲章だって信じていたアノ頃が懐かしいです。
トシをとったといえば、Active Directory もそうです。2000 年に誕生し、いまじゃなんと 14 歳!
コンピューターは人間の 20 倍速くトシをとる(当社比)と言われてますから、人間で言えば 280 歳です!AD280年!
そりゃー進化もしますし、魔法のような機能だって使えるようになります。
ご存知のように、2015 年には新しい Active Directory が登場します。
さらに、クラウドには Azure Active Directory という全く新しいアイデンティティ・プロバイダーなどというキザなアイツが誕生しました。
ちなみに、クラウドは人間の30倍速く歳をとると言われてます。
今、現状を整理しておかないと、もう進化に追いつけなくなります。今が最後のチャンスなのです。
ということで、これまでの歴史を復習するために最適なコンテンツをご紹介しますので、是非除夜の鐘をきく前に一通り復習しておきましょう。
クラウド時代の Active Directory 次の一手シリーズ
http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series1
http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series2
http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series3
http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series4
http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series5
http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series6
上記はいずれも Microsoft Virtual Academy(MVA)にて公開しています。
2015年1月には、MVAメンバー向けに Azure Active Directory に重点を置いた続編を公開する予定ですので、是非いまのうちに上記コンテンツをクリアしておいてください!
2015年3月までには Active Directory の基礎の基礎からステップバイステップで学習するためのコンテンツも公開予定です。
新人アドミンの方にも優しく学習いただけるコンテンツを準備中です。
※ちょっと自分の首を絞めているような気がする。。。。
Active Directory の最新情報をキャッチアップ!
クラウド時代の Active Directory 次の一手シリーズ 第1回~6回 公開中!
第 1 回 Active Directory の位置づけ 第 2 回 Active Directory ドメイン サービスの新しい役割 第 3 回 Active Directory フェデレーション サービスの役割 解説編 第 4 回 Active Directory フェデレーション サービスの役割 構築編 第 5 回 認証のためのプロキシ Web Application Proxy 第 6 回 Microsoft Azure Active Directory とは
Active Directory on IaaS の構築手順書を公開しました。
手順書は以下のキャンペーンに応募していただくと GET できます。なんか面倒でごめんなさい。。。いろいろ大人の事情がありまして。。。。
応募いただくと 240GB Intel SSD なんかも当たるかもしれないので、どうぞよろしくお願いいたします。
http://technet.microsoft.com/ja-jp/windowsserver/dn715816
この構築手順書では、以下の環境を作成します。
クラウドサービスとか、可用性セットとか、負荷分散セットとか、Azure なコツがちょっとだけ必要なので、一から勉強するよりかはこの手順書でサクッと評価してもらったほうが手っ取り早いです。
オンプレミスには何も必要ありません。すべて、Microsfot Azure 無償評価版の範囲内で構築できます。
5月29日ー30日、ザ・プリンスパークタワー東京にて de:code(デコード)という”有償”カンファレンスが開催されます。もちろんマイクロソフト主催のカンファレンスです。参加費 \120,000(税抜き)と少しお高いのですが、各セッション1万円以上の価値をご提供しますので、是非ご参加ください。4月28日までのお申込であれば早期割引対象となります。
TechEd @Japan の復活を望む声が多いことは我々も認識しておるのですが、それ以上にマイクロソフトの方向性や今後10年を見据えた最新テクノロジーの解説を望む声も多く寄せられています。TechEd がそのタイトル通り Leaning を主体としたイベントである一方で、de:code は近未来を見据えた内容を盛り込んだカンファレンスであるとご理解ください。
そういう意味では、毎年アメリカで開催される Build Developer Conference に近く、それを日本市場向けにアレンジしたものであると言えます。
タイトルから「完全に開発者向け」という印象が強いことは否めませんが、実はそんなことはありません(と、インフラ担当エバンジェリストの私が密かに保証します)。インフラエンジニアもターゲットとしたセッション構成になっています。ただし!! TechEd のようにお勉強する場では無いのでオペレーターレベルのセッションは皆無です。これは断言できます。インフラエンジニアの中でも、開発案件など広範にわたってインフラを検討する インフラストラクチャー アーキテクト をターゲットとしています。それだけにセッションの難易度は高く設定されています。上司の方が新人 SE さんに「おまえ勉強してこい」という場でないことは確かです。それなりの経験と未来志向を持った方でないと、2日間を無駄にしてしまう可能性があります。私は、このカンファレンスの内容を受け、インフラ アーキテクトのみなさまに今後の IT 設計や提案の方向性を見据えたいただきたいと考えています。
セッションの内容は既に de:code のサイトで公開されていますが、その中でも特にインフラ アーキテクトの方々に見ていただきたいセッションをご紹介します。時間割の都合上、全てを参照できることを保証するものではありませんので、その点はご了承くださいませ。
Windows Server 2012 R2 のあの画面どうだったかな?あの機能ってどこまでできたっけ?
そんなことを思いながらも、「インストールめんどくせー」ってことありますよね。
評価版をダウンロードするのも時間かかるし。
そんな方のために、バーチャルラボが公開されています。
ちょっとわかりずらいところにあるので、以下でナビゲートします。
まずは以下のページに移動。
実を言えば、私も、ちょっとした画面ショットを撮りたいときには愛用していたりします。。。楽なので。。。
System Center を使用すると、オンプレミスのインフラストラクチャーに加えて、Windows Azure に展開したインフラストラクチャーやアプリケーションも管理、監視できます。
以下のコースウェアでは、System Center を使用して Windows Azure を含むハイブリッドクラウド環境を管理することを学習することができます。
System Center と Windows Azure を使用したハイブリッド クラウドへの移行ジャンプ スタートhttp://www.microsoftvirtualacademy.com/training-courses/38d1d8c0-240e-432b-994c-ab34e71088b6#?fbid=pJeqjxv8UId
各モジュールにはテストも用意されていますが、解説が無いので、このBLOGで各問の開設をしたいと思います。
今回は「01 | 監視、管理、および運用」について。System Center の基本的な機能について学習しましょう。
Q) System Center Operations Manager を使用して、クラウドに展開した WEB アプリケーションの可用性とパフォーマンスを監視する必要があります。次のうちどの Operations Manager の機能を使用しますか。
System Center 2012 には新たに APM(Appliation Performance Monitoring)が実装されました。これは以前 AVICode と呼ばれていたもので、マイクロソフトが買収し System Center に組み込んだものです。 APM を使用すると、.NET Framework または JEE(Java Enterprise Edition)で開発されたアプリケーションを監視することができます。 System Center Operations Manager 2012: 簡単に監視機能を拡張するhttp://technet.microsoft.com/ja-jp/magazine/hh825624.aspx Monitoring .NET Applicationshttp://technet.microsoft.com/en-us/library/hh212856.aspx Monitoring Java Applicationshttp://technet.microsoft.com/ja-jp/library/hh212856.aspx もちろん、アプリケーションが Windows Azure に展開されていても監視可能です。
System Center 2012 には新たに APM(Appliation Performance Monitoring)が実装されました。これは以前 AVICode と呼ばれていたもので、マイクロソフトが買収し System Center に組み込んだものです。
APM を使用すると、.NET Framework または JEE(Java Enterprise Edition)で開発されたアプリケーションを監視することができます。
System Center Operations Manager 2012: 簡単に監視機能を拡張するhttp://technet.microsoft.com/ja-jp/magazine/hh825624.aspx
Monitoring .NET Applicationshttp://technet.microsoft.com/en-us/library/hh212856.aspx
Monitoring Java Applicationshttp://technet.microsoft.com/ja-jp/library/hh212856.aspx
もちろん、アプリケーションが Windows Azure に展開されていても監視可能です。
Q) System Center Operations Manager を使用して、クラウド ファブリックを監視する必要があります。次のうちどの Operations Manager の機能を使用しますか。
これは特に迷うことはないと思います。ファブリックを監視するわけですから、物理レイヤ、仮想レイヤを統合的に監視できなければなりません。 よって、4. が正解です。 Oprations Manager には「管理パック」と呼ばれる監視用のアドインが用意されています。 管理パックは製品や機能ごとに用意されており、この問の場合にはOS用の管理パック、物理レイヤを監視するHyper-V管理パック、仮想レイヤを監視するVMM管理パックを使用します。 Fabric Monitoringhttp://technet.microsoft.com/en-us/library/dn249700.aspx もちろん、Windows Azure を監視するための管理パックも用意されています。 System Center Management Pack for Windows Azurehttp://www.microsoft.com/en-us/download/details.aspx?id=38414
これは特に迷うことはないと思います。ファブリックを監視するわけですから、物理レイヤ、仮想レイヤを統合的に監視できなければなりません。
よって、4. が正解です。
Oprations Manager には「管理パック」と呼ばれる監視用のアドインが用意されています。
管理パックは製品や機能ごとに用意されており、この問の場合にはOS用の管理パック、物理レイヤを監視するHyper-V管理パック、仮想レイヤを監視するVMM管理パックを使用します。
Fabric Monitoringhttp://technet.microsoft.com/en-us/library/dn249700.aspx
もちろん、Windows Azure を監視するための管理パックも用意されています。
System Center Management Pack for Windows Azurehttp://www.microsoft.com/en-us/download/details.aspx?id=38414
Q) System Center コンポーネントを使用して、クラウドを監視する必要があります。既定の監視対象は次のうちどれですか (2 つ選択してください)。
この問題はあまり難しく考えないでください。 既定で監視できるのは、クラウド ファブリックとその中に展開されている各サービスの正常性です。 SQL Server や Microsoft Exchange を監視するには、別途管理パックを追加する必要があります。
この問題はあまり難しく考えないでください。
既定で監視できるのは、クラウド ファブリックとその中に展開されている各サービスの正常性です。
SQL Server や Microsoft Exchange を監視するには、別途管理パックを追加する必要があります。
Q)チャージバック レポートを実装する予定です。必要な System Center コンポーネントは次のうちどれですか (2 つ選択してください)。
ここでいうチャージバックとは、クレジットカードの払い戻しプロセスのことではありません。顧客ごとのクラウドリソースの使用状況を計測することを意味しています。 つまり、チャージバックレポートとは、クラウド使用量に関するレポートのことでです。 チャージバック レポートについてhttp://technet.microsoft.com/ja-jp/library/jj614457.aspx チャージバックレポートを作成するための System Center コンポーネントは Service Manager なのですが、各リソースの使用量を計測するために Operations Manager と連携する必要があります。この時に使用するのが、Operations Manager CI コネクタです。CI は Configuration Item のことです。
ここでいうチャージバックとは、クレジットカードの払い戻しプロセスのことではありません。顧客ごとのクラウドリソースの使用状況を計測することを意味しています。
つまり、チャージバックレポートとは、クラウド使用量に関するレポートのことでです。
チャージバック レポートについてhttp://technet.microsoft.com/ja-jp/library/jj614457.aspx
チャージバックレポートを作成するための System Center コンポーネントは Service Manager なのですが、各リソースの使用量を計測するために Operations Manager と連携する必要があります。この時に使用するのが、Operations Manager CI コネクタです。CI は Configuration Item のことです。
Q)チャージバック レポートのインストールモジュールに含まれているコンポーネントは次のうちどれですか (3 つ選択してください)。
Service Manager のチャージバック レポートは、管理パック ファイル、管理パック ファイルをインポートするための Windows PowerShell スクリプト、Microsoft Excel サンプル レポートなど、さまざまなファイルで構成されています。 これは、覚えるしかないですね。。。 チャージバック レポートをインストールする方法http://technet.microsoft.com/ja-jp/library/jj614406.aspx
Service Manager のチャージバック レポートは、管理パック ファイル、管理パック ファイルをインポートするための Windows PowerShell スクリプト、Microsoft Excel サンプル レポートなど、さまざまなファイルで構成されています。 これは、覚えるしかないですね。。。
チャージバック レポートをインストールする方法http://technet.microsoft.com/ja-jp/library/jj614406.aspx
Q) 価格シートを実装する予定です。価格の対象となるプライベート クラウド オブジェクトを見つける手段は次のうちどれですか。
チャージバックレポートを作成するには、各リソースの価格が設定されている必要があります。 その価格のリストを「価格シート」といいます。別名 レートカードとも言います。 もちろん、顧客のSLAによって価格も変わりますから、SLAごとに異なる価格シートを用意することもできます。 答えはもちろん、Operations Manager CI コネクタです。これを使用して、クラウド内のオブジェクトを探索します。チャージバック レポートについてhttp://technet.microsoft.com/ja-jp/library/jj614457.aspx 価格シートを作成または変更する方法http://technet.microsoft.com/ja-jp/library/jj614404.aspx
チャージバックレポートを作成するには、各リソースの価格が設定されている必要があります。
その価格のリストを「価格シート」といいます。別名 レートカードとも言います。
もちろん、顧客のSLAによって価格も変わりますから、SLAごとに異なる価格シートを用意することもできます。
答えはもちろん、Operations Manager CI コネクタです。これを使用して、クラウド内のオブジェクトを探索します。
価格シートを作成または変更する方法http://technet.microsoft.com/ja-jp/library/jj614404.aspx
Q) クラウド オブジェクトと価格シートを関連付ける必要があります。関連付けの前に必要な作業は次のうちどれですか。
これは、実際にオペレーションをしたことないと難しいですが、ちょっと考えるとわかるかもです。 価格シートとは、「こういうオブジェクトはこのくらいの価格」というポリシーです。 実際のクラウドオブジェクトを値付けするには、事前に価格シートが作成されていなければいけないことは、容易に想像がつくと思います。 富士山頂にある自動販売機(クラウドオブジェクト)に、「コーラ 100円」という価格シートと、「コーラ 200円」という価格シートのどちらを適用するか決定するには、事前に「価格シート」が存在しなければならいですよね。 詳細な手順は以下を参照してください。
これは、実際にオペレーションをしたことないと難しいですが、ちょっと考えるとわかるかもです。
価格シートとは、「こういうオブジェクトはこのくらいの価格」というポリシーです。
実際のクラウドオブジェクトを値付けするには、事前に価格シートが作成されていなければいけないことは、容易に想像がつくと思います。
富士山頂にある自動販売機(クラウドオブジェクト)に、「コーラ 100円」という価格シートと、「コーラ 200円」という価格シートのどちらを適用するか決定するには、事前に「価格シート」が存在しなければならいですよね。
詳細な手順は以下を参照してください。
Q) 展開したクラウドの正常性と容量に関するレポートを確認する必要があります。どの System Center コンポーネントを使用しますか。
これは悩むと思うのですが、レポートを確認するのに最適なのは Service Manager です。Operations Manager はダッシュボードで個々のコンポーネントの監視を行ったりレポートを参照することは可能なのですが、「クラウドの正常性」という大きなくくりで全体の正常性をレポートするのであれば、CMDB を持つ Service Manager が最適です。
Q) クラウドの可用性とパフォーマンスに関する値を監視する必要があります。どの System Center コンポーネントを使用しますか。
パフォーマンスに関する具体的な値を監視するのであれば、Operations Manager です。
次回は、「02 | パブリック クラウドへの System Center の接続」について解説します。
テストは以下から受けられます!
Microsoft Virtual Academy - PowerShell 3.0 を使用した高度なツールとスクリプトhttp://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId
さて、今回のタイトルは 「高度な関数」なのですが、「高度」と言われても何のことやら?ですよね。
これ、英語版だと「Advanced Function」と書かれています。 「Advanced」の訳って難しいですよね。個人的にはあえて訳さなくてもよいと思うんですけど。ちなみに「Advanced Windows Firewall」は「セキュリティが強化された Windows Firewall」と訳されていますね。ローカライズチームも苦労しているのだと思います。。。
PowerShell を使用すると、スクリプトだけで関数を定義できることはご存知の通りなのですが、「高度な」とつくからには単に Function ブロックで括る以上の「ナニカ」が無ければなりません。
解説を始める前に、関数とは何かについておさらいしておきましょう。
以下のようなスクリプト hello.ps1 があったとします。Param ブロック内に定義されている $a は引数です。 param($a="Hello!")Write-Output $a これを実行するには、PSコンソールで以下のように入力する必要があります。 このスクリプトを再度呼び出したいときや、別のスクリプトから呼び出したいときにも、同様にスクリプト hello.ps1 ごと呼び出す必要があります。 もちろんそれでもよいのですが、もうすこし使い勝手を良くするには、これを関数化します。 関数化するには、以下のように Function ブロックで括ります。 Function Echo-Something { param($a="Hello!") Write-Output $a } 同じファイル名 hello.ps1 で保存し、以下のように ドット ソース モード(Part3 参照)で実行すれば、スクリプト名を指定することなく、「Echo-Something」という名前で呼び出すことが可能です。 ちなみに、ドット ソース でスクリプトを実行したあと、以下のように Function: ドライブに移動してみてください。Dir コマンドを使用すると、Echo-Somethig 関数が登録されていることが確認できます。 じゃ、Echo-Something 関数を呼び出すために毎回ドット ソース モードでスクリプトを呼び出す必要があるのかといえば、そうではありません。 関数を永続化する方法がいくつかあります。 もっとも簡単なのは、PowerShell のプロファイルスクリプトに 「 . c:\tmp\hello.ps1」を記述しておく方法です。 PowerShell コンソールが起動するたびに実行されるので、毎回 hello.ps1 を実行する手間が省けます。 話が複雑になるので要点だけ書くと、プロファイル用スクリプト(の一つ)は以下の通りです。 C:\Users\<ユーザー名>\Documents\WindowsPowerShell\profile.ps1 プロファイルについては改めて別の投稿で解説します。 (参考)Understanding and Using PowerShell Profileshttp://blogs.technet.com/b/heyscriptingguy/archive/2013/01/04/understanding-and-using-powershell-profiles.aspx
以下のようなスクリプト hello.ps1 があったとします。Param ブロック内に定義されている $a は引数です。
param($a="Hello!")Write-Output $a
これを実行するには、PSコンソールで以下のように入力する必要があります。
このスクリプトを再度呼び出したいときや、別のスクリプトから呼び出したいときにも、同様にスクリプト hello.ps1 ごと呼び出す必要があります。
もちろんそれでもよいのですが、もうすこし使い勝手を良くするには、これを関数化します。
関数化するには、以下のように Function ブロックで括ります。
Function Echo-Something { param($a="Hello!") Write-Output $a }
同じファイル名 hello.ps1 で保存し、以下のように ドット ソース モード(Part3 参照)で実行すれば、スクリプト名を指定することなく、「Echo-Something」という名前で呼び出すことが可能です。
ちなみに、ドット ソース でスクリプトを実行したあと、以下のように Function: ドライブに移動してみてください。Dir コマンドを使用すると、Echo-Somethig 関数が登録されていることが確認できます。
じゃ、Echo-Something 関数を呼び出すために毎回ドット ソース モードでスクリプトを呼び出す必要があるのかといえば、そうではありません。
関数を永続化する方法がいくつかあります。
もっとも簡単なのは、PowerShell のプロファイルスクリプトに 「 . c:\tmp\hello.ps1」を記述しておく方法です。
PowerShell コンソールが起動するたびに実行されるので、毎回 hello.ps1 を実行する手間が省けます。
話が複雑になるので要点だけ書くと、プロファイル用スクリプト(の一つ)は以下の通りです。
C:\Users\<ユーザー名>\Documents\WindowsPowerShell\profile.ps1
プロファイルについては改めて別の投稿で解説します。
(参考)Understanding and Using PowerShell Profileshttp://blogs.technet.com/b/heyscriptingguy/archive/2013/01/04/understanding-and-using-powershell-profiles.aspx
ってことで、関数については理解していただけましたでしょうか?
では、解説をはじめましょう。 あー憂鬱だ。。。
PowerShell コマンドレットの構造はどれですか
Windows PowerShell のコマンドレットの構造にはキマリがあります。それは、かならず「動詞-名詞」という形になっているということです。 コマンドレットの一覧を参照するには Get-Command コマンドレットを使用しますが、これも「動詞ー名詞」という構造になっていることがわかります。 以下はコマンドの例です。コマンドレット名を見ると、およそ何をしたいコマンドなのかが予測できるようになっています。 Function Update-StorageProviderCache Storage Function Write-DtcTransactionsTraceSession MsDtc Function Write-PrinterNfcTag PrintManagement Cmdlet Add-ADCentralAccessPolicyMember ActiveDirectory Cmdlet Add-ADComputerServiceAccount ActiveDirectory Cmdlet Add-ADDomainControllerPasswordReplicationPolicy ActiveDirectory Cmdlet Add-ADFineGrainedPasswordPolicySubject
Windows PowerShell のコマンドレットの構造にはキマリがあります。それは、かならず「動詞-名詞」という形になっているということです。
コマンドレットの一覧を参照するには Get-Command コマンドレットを使用しますが、これも「動詞ー名詞」という構造になっていることがわかります。
以下はコマンドの例です。コマンドレット名を見ると、およそ何をしたいコマンドなのかが予測できるようになっています。
Function Update-StorageProviderCache Storage Function Write-DtcTransactionsTraceSession MsDtc Function Write-PrinterNfcTag PrintManagement Cmdlet Add-ADCentralAccessPolicyMember ActiveDirectory Cmdlet Add-ADComputerServiceAccount ActiveDirectory Cmdlet Add-ADDomainControllerPasswordReplicationPolicy ActiveDirectory Cmdlet Add-ADFineGrainedPasswordPolicySubject
逆に、自分でコマンドレットを作成する場合にもこの規則に沿って命名することをお勧めします。 例えば、「新入社員を人事データベースから抽出する」コマンドを作成するのであれば、その名称は Get-FreshmanFromHRDB とでもすれば、他の方がこのコマンドを呼び出すときにも便利です。
逆に、自分でコマンドレットを作成する場合にもこの規則に沿って命名することをお勧めします。
例えば、「新入社員を人事データベースから抽出する」コマンドを作成するのであれば、その名称は Get-FreshmanFromHRDB とでもすれば、他の方がこのコマンドを呼び出すときにも便利です。
高度な関数の用途はどれですか
「高度な関数」の「高度な」の意味が問われています。 答えは「2.コマンドレットと同様に動作する、再利用可能なスクリプトを作成する」ことです。 スクリプトでコマンドレット(のようなもの)を定義するという意味で、スクリプトコマンドレットと呼ばれることもあります。 では「コマンドレットと同様に」とはどういう意味でしょう? 単に「コンソールからコマンドレットのように呼び出せる」ということではありません。これだけならば、VBSript だって似たようなことができなくもありません。 バイナリで作成されたコマンドレットにはPowerShell特有のオプションが実装されています。 例えば、-confirm オプションがその1つです。 以下の例では Remove-Item コマンドレットを使用して sample フォルダ配下を削除しようとしていますが、-Confirm オプション指定することで、削除の確認メッセージが表示できます。 (参考)about_Functions_CmdletBindingAttributehttp://technet.microsoft.com/en-us/library/hh847872.aspx
「高度な関数」の「高度な」の意味が問われています。
答えは「2.コマンドレットと同様に動作する、再利用可能なスクリプトを作成する」ことです。
スクリプトでコマンドレット(のようなもの)を定義するという意味で、スクリプトコマンドレットと呼ばれることもあります。
では「コマンドレットと同様に」とはどういう意味でしょう?
単に「コンソールからコマンドレットのように呼び出せる」ということではありません。これだけならば、VBSript だって似たようなことができなくもありません。
バイナリで作成されたコマンドレットにはPowerShell特有のオプションが実装されています。
例えば、-confirm オプションがその1つです。
以下の例では Remove-Item コマンドレットを使用して sample フォルダ配下を削除しようとしていますが、-Confirm オプション指定することで、削除の確認メッセージが表示できます。
(参考)about_Functions_CmdletBindingAttributehttp://technet.microsoft.com/en-us/library/hh847872.aspx
ただの関数であれば、このような機能を実装するには関数内に別途スクリプトを記述する必要がありますが、「コマンドレット」と同様に動作させることで、コマンドレットが本来持っている機能を関数にも実装できるのです。じゃ、関数を高度化するにはどうすればよいかについては後述します。
PowerShell ISE でスクリプト テンプレートを簡単に呼び出すキーボード コマンドはどれですか
正直、私はあまり使わないのですが、PowerShell ISE(統合スクリプト環境。要はインテリジェントなエディターです)を使用すると、事前に定義されている構文テンプレートを呼び出すことができます。 そのときに使用するショートカットが Ctrl + J です。Ctrl +J を押すと、以下のような画面が表示されるので、ここから使いたいテンプレートを選択します。 上記の中に「Cmdlet(高度な関数)」「Cmdlet(高度な関数)- 完了」という2つのテンプレートがありますが、これが関数を定義する際のテンプレートです。 「完了」と書かれているのは、おそらく翻訳ミスで「完全」のことだと思われます。。。ほんとすんまそん。。。 つまり、「簡易版テンプレート」と「完全版テンプレート」という意味なのでしょう。実際、中身もそうなっています。 簡易版テンプレートを選択すると、以下のようなスクリプトが展開されます。 <#.Synopsis 短い説明.DESCRIPTION 詳しい説明.EXAMPLE このコマンドレットの使用方法の例.EXAMPLE このコマンドレットの使用方法の別の例#>function Verb-Noun{ [CmdletBinding()] [OutputType([int])] Param ( # パラメーター 1 のヘルプの説明 [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=0)] $Param1, # パラメーター 2 のヘルプの説明 [int] $Param2 ) Begin { } Process { } End { }} スクリプトを単純に Function ブロックで括っても関数化することはできますが、上記を見ると他にも様々なブロックが用意されていることがわかります。 それぞれのブロックについての説明は、後の問題で。
正直、私はあまり使わないのですが、PowerShell ISE(統合スクリプト環境。要はインテリジェントなエディターです)を使用すると、事前に定義されている構文テンプレートを呼び出すことができます。
そのときに使用するショートカットが Ctrl + J です。Ctrl +J を押すと、以下のような画面が表示されるので、ここから使いたいテンプレートを選択します。
上記の中に「Cmdlet(高度な関数)」「Cmdlet(高度な関数)- 完了」という2つのテンプレートがありますが、これが関数を定義する際のテンプレートです。
「完了」と書かれているのは、おそらく翻訳ミスで「完全」のことだと思われます。。。ほんとすんまそん。。。
つまり、「簡易版テンプレート」と「完全版テンプレート」という意味なのでしょう。実際、中身もそうなっています。
簡易版テンプレートを選択すると、以下のようなスクリプトが展開されます。
<#.Synopsis 短い説明.DESCRIPTION 詳しい説明.EXAMPLE このコマンドレットの使用方法の例.EXAMPLE このコマンドレットの使用方法の別の例#>function Verb-Noun{ [CmdletBinding()] [OutputType([int])] Param ( # パラメーター 1 のヘルプの説明 [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=0)] $Param1,
# パラメーター 2 のヘルプの説明 [int] $Param2 )
Begin { } Process { } End { }}
スクリプトを単純に Function ブロックで括っても関数化することはできますが、上記を見ると他にも様々なブロックが用意されていることがわかります。
それぞれのブロックについての説明は、後の問題で。
PowerShell のドキュメントに使用するコメント ブロックを定義するにはどうすればよいですか
前問のテンプレートにも書かれている通り、コメントは <# ~ #> で括ります。 1行だけならば、先頭に # をつけるだけでOKです。
前問のテンプレートにも書かれている通り、コメントは <# ~ #> で括ります。
1行だけならば、先頭に # をつけるだけでOKです。
正誤問題: PowerShell ISE には、関数やスクリプトの作成に推奨されるプラクティスやスタイルに従ったテンプレートが用意されている
既に書きましたね。もちろん○です。
正誤問題: 高度な関数は、C# と .NET Framework を使用してのみ作成できる
これも大丈夫ですよね。×です。 C#やその他の言語を使用すればバイナリーなコマンドレットを作成することができますが、スクリプトだけでもコマンドレットのように扱える「高度な」関数を作成することができます。
これも大丈夫ですよね。×です。
C#やその他の言語を使用すればバイナリーなコマンドレットを作成することができますが、スクリプトだけでもコマンドレットのように扱える「高度な」関数を作成することができます。
関数における CmdletBinding 属性の機能は何ですか
数問前で「高度な関数」とは「コマンドレットのように動作する関数」であると書きましたが、それを実現しているのが関数内に定義する「CmdletBinding」属性です。 この属性が定義されていると、バイナリのコマンドレットが持っているようなオプションを有効化できます。 その一つが -Confirm であることは既に書いた通りです。他にも CmdletBinding によって有効化できる機能がありますので、紹介しておきます。 CmdletBinding 属性のいくつかの機能を有効にした関数例を以下に示します。 function Echo-Something{ [CmdletBinding( ConfirmImpact="High", SupportsShouldProcess=$True, DefaultParameterSetName="Set2" )] Param ( [Parameter(Mandatory=$True,ParameterSetName="Set1")] [string[]]$Param1, [Parameter(Mandatory=$True,Position=1,ParameterSetName="Set2")] [string[]]$Param2, [Parameter(Mandatory=$True,Position=2,ParameterSetName="Set2")] [string[]]$Param3 ) Begin { } Process { if ($PSCmdlet.ShouldProcess("ほげほげ")) { Write-Output "1 $Param1" Write-Output "2 $Param2" Write-Output "3 $Param3" } } End { }} SupportsShouldProcess = $True は -Confirm と -Whatif オプションを有効にするための設定です。 これにより、関数の実行時に以下のように確認メッセージを表示することができます。 DefaultParameterSetName はとても使い勝手の良い機能で、複数の引数パターンのうち既定のパターンをどれにするか指定できます。 Paramブロックの中を見てください。ParameterSetName という属性が定義されていることがわかります。これは、引数がどのパターンに属するのかを示したものです。 今回は DefaultParameterSetName = ”Set2” と指定しているので、引数を何も指定しなければ以下のように パターン Set2 を使うものとして、値を聞いてくれます。 このほか、CmdletBinding を定義するだけで以下の共通オプションが使えるようになります。これらにより、デバッグに便利な Write-Debug コマンドや Write-Verbose コマンドも使えるようになるので、関数を定義するときには CmdletBinding を定義しておくことをお勧めします。 -Verbose -Debug -WarningAction -WarningVariable -ErrorAction -ErrorVariable -OutVariable -OutBuffer (参考)Build Your Own PowerShell Cmdlet: Part 4 of 9http://blogs.technet.com/b/heyscriptingguy/archive/2012/10/02/build-your-own-powershell-cmdlet-part-4-of-9.aspx
数問前で「高度な関数」とは「コマンドレットのように動作する関数」であると書きましたが、それを実現しているのが関数内に定義する「CmdletBinding」属性です。
この属性が定義されていると、バイナリのコマンドレットが持っているようなオプションを有効化できます。
その一つが -Confirm であることは既に書いた通りです。他にも CmdletBinding によって有効化できる機能がありますので、紹介しておきます。
CmdletBinding 属性のいくつかの機能を有効にした関数例を以下に示します。
function Echo-Something{ [CmdletBinding( ConfirmImpact="High", SupportsShouldProcess=$True, DefaultParameterSetName="Set2" )]
Param ( [Parameter(Mandatory=$True,ParameterSetName="Set1")] [string[]]$Param1,
[Parameter(Mandatory=$True,Position=1,ParameterSetName="Set2")] [string[]]$Param2, [Parameter(Mandatory=$True,Position=2,ParameterSetName="Set2")] [string[]]$Param3 )
Begin { } Process { if ($PSCmdlet.ShouldProcess("ほげほげ")) { Write-Output "1 $Param1" Write-Output "2 $Param2" Write-Output "3 $Param3" } } End { }}
SupportsShouldProcess = $True は -Confirm と -Whatif オプションを有効にするための設定です。
これにより、関数の実行時に以下のように確認メッセージを表示することができます。
DefaultParameterSetName はとても使い勝手の良い機能で、複数の引数パターンのうち既定のパターンをどれにするか指定できます。
Paramブロックの中を見てください。ParameterSetName という属性が定義されていることがわかります。これは、引数がどのパターンに属するのかを示したものです。
今回は DefaultParameterSetName = ”Set2” と指定しているので、引数を何も指定しなければ以下のように パターン Set2 を使うものとして、値を聞いてくれます。
このほか、CmdletBinding を定義するだけで以下の共通オプションが使えるようになります。これらにより、デバッグに便利な Write-Debug コマンドや Write-Verbose コマンドも使えるようになるので、関数を定義するときには CmdletBinding を定義しておくことをお勧めします。
-Verbose
-Debug
-WarningAction
-WarningVariable
-ErrorAction
-ErrorVariable
-OutVariable
-OutBuffer
(参考)Build Your Own PowerShell Cmdlet: Part 4 of 9http://blogs.technet.com/b/heyscriptingguy/archive/2012/10/02/build-your-own-powershell-cmdlet-part-4-of-9.aspx
関数における Process ブロックの目的は何ですか
答えは「1. 受け取った値を反復処理するたびに実行する」なのですが、唐突に「反復処理」と言われても意味が分からないですよね。 「反復処理」とは、「受け取った引数の数」だけ実行されるということです。「引数の数」というのは Param ブロックで定義した引数の数ではありません。 Windows PowerShell ではパイプを使って、前のコマンドの結果をオブジェクトとして繰り返し受け取ることができます。 例えば Get-Service というコマンドレットがあります。このコマンドレットの出力結果には、システム上の個々のサービスの情報が格納されています。以下は、Get-Service コマンドレットの出力結果例です。 これを踏まえ、以下のようなコマンドを実行したとします。 Get-Service | Echo-Something これにより、Get-Service の結果が1回ずつ(上の出力結果例の1行ずつ)Echo-Something に引数として渡されます。 結果が Echo-Something に渡されると、そのたびに Process ブロック内の処理が実行されます。 例を示しましょう。以下のような関数を定義したとします。 function Echo-Something{ [CmdletBinding()] Param ( [Parameter( ValueFromPipeline =$true)] $Param1 ) Begin { "----Begin----" } Process { $Param1.Name } End { "----End----" }} Process ブロック内では、引数として渡されたオブジェクトの Name プロパティを表示しています。 以下のようにして、この関数を実行してみます。 結果は一目瞭然ですね。 Begin ブロック内が一番最初に1回だけ実行されます。 その後、パイプラインから渡された結果が繰り返し Process ブロックに渡されて処理されています。 最後に End ブロックが1回だけ実行されて、処理は終了します。
答えは「1. 受け取った値を反復処理するたびに実行する」なのですが、唐突に「反復処理」と言われても意味が分からないですよね。
「反復処理」とは、「受け取った引数の数」だけ実行されるということです。「引数の数」というのは Param ブロックで定義した引数の数ではありません。
Windows PowerShell ではパイプを使って、前のコマンドの結果をオブジェクトとして繰り返し受け取ることができます。
例えば Get-Service というコマンドレットがあります。このコマンドレットの出力結果には、システム上の個々のサービスの情報が格納されています。以下は、Get-Service コマンドレットの出力結果例です。
これを踏まえ、以下のようなコマンドを実行したとします。
Get-Service | Echo-Something
これにより、Get-Service の結果が1回ずつ(上の出力結果例の1行ずつ)Echo-Something に引数として渡されます。
結果が Echo-Something に渡されると、そのたびに Process ブロック内の処理が実行されます。
例を示しましょう。以下のような関数を定義したとします。
function Echo-Something{ [CmdletBinding()] Param ( [Parameter( ValueFromPipeline =$true)] $Param1 )
Begin { "----Begin----" } Process { $Param1.Name } End { "----End----" }}
Process ブロック内では、引数として渡されたオブジェクトの Name プロパティを表示しています。
以下のようにして、この関数を実行してみます。
結果は一目瞭然ですね。
Begin ブロック内が一番最初に1回だけ実行されます。
その後、パイプラインから渡された結果が繰り返し Process ブロックに渡されて処理されています。
最後に End ブロックが1回だけ実行されて、処理は終了します。
関数における Begin ブロックの目的は何ですか
前問の結果から、もうわかりますよね。答えは「2. 変数を初期化する」です。 上の例では何もしていませんが、本当はここで引数の値を確認したり、変数の初期値を設定したりします。
前問の結果から、もうわかりますよね。答えは「2. 変数を初期化する」です。
上の例では何もしていませんが、本当はここで引数の値を確認したり、変数の初期値を設定したりします。
関数における End ブロックの目的は何ですか
これもOKですね。 「3. クリーンアップ タスクを実行する」が正解です。 Begin ブロックで用意した変数を初期化したり、ファイルをクローズするなどの処理はここで行います。
これもOKですね。
「3. クリーンアップ タスクを実行する」が正解です。
Begin ブロックで用意した変数を初期化したり、ファイルをクローズするなどの処理はここで行います。
ーーー
以上で終わりなのですが、ちょっと中途半端なのでパラメタ(引数)の扱いについてもう少し解説しておきたいと思います。
以下のように Echo-Something 関数を定義したとします。
function Echo-Something{ Param ( [Parameter( Mandatory=$True, Position=1, ValueFromPipeline=$true)] [string]$Param1,
[Parameter(Mandatory=$True)] [string]$Param2,
[Switch]$EchoString )
Begin { } Process { If($EchoString){ Write-Output $Param1 Write-Output $Param2 } } End { }}
Parameter 部分に注目してください。
この関数には3つの引数が定義されており、両方とも Mandatory=$True と指定されています。つまり、Param1 と Param2 は必須ということです。
なので、パラメタを指定せずに Echo-Something を実行すると、以下のように入力を求められます。
Position=1 というのは、引数として受け取る順番を意味しています。つまり「1番目の引数は Param1 用である」ということが宣言されています。
一方で、Param2 には Position が設定されていないため、引数は必ず名前付きで指定する必要があります。
つまり以下のように。
[Switch] として定義されている3つ目の引数 $EchoString はとても素敵な機能です。
以下のように、関数のパラメタとして指定された場合には、$EchoString には $True が格納されます。指定されない場合には $False が格納されます。つまり、この値の中身を判断することで、処理の���ン/オフを切り替えられるわけです。
詳しくはまた別の機会に。
(参考)Windows PowerShell: パラメーターを定義するhttp://technet.microsoft.com/ja-jp/magazine/jj554301.aspx
腕に自信のある方は、まずはテストを受けてみてくださいね!
通過できない場合には、こちらの解説講座に戻ってきてください。
今回は PowerShell の「単純なスクリプトと関数」について解説します。
是非とも満点でテストを通過してください!
PowerShell スクリプトを作成する理由は何ですか
うーん、なんか、いろいろ考えすぎてしまいますね。でもここはシンプルに「自動化のため」と考えましょう。 MCPもそうですが、マイクロソフト本社が作成するこの手の問題は「マイクロソフトの意図が理解できているかどうか」を問うものが多いです。「スクリプト」に込められた第一の意図は、やはり「自動化」なんですね。
うーん、なんか、いろいろ考えすぎてしまいますね。でもここはシンプルに「自動化のため」と考えましょう。
MCPもそうですが、マイクロソフト本社が作成するこの手の問題は「マイクロソフトの意図が理解できているかどうか」を問うものが多いです。「スクリプト」に込められた第一の意図は、やはり「自動化」なんですね。
PowerShell スクリプトを作成するには、どのツールを使用しますか
ここは迷わず 3. Windows PowerShell ISE と回答していただきたいところです。4. PowerShell Editor というツールが世の中には存在しないわけではありませんが、ISEが選択してとして挙げられている以上、マイクロソフトはこれを選んで欲しいのです。 ちなみに、Visual Studio 2012 でスクリプトの作成が不可能かといえば、そんなことはありません。.NET Frameork には PowerShell Class が用意されており、これを使えばPowerShell スクリプトを Run Space 上で実行し、結果を Visual Studio で受け取ることもできます。が、スクリプト作成の最適なツールではありません。 もしかすると、PowerToys for Windows PowerShell ISE と勘違いして PowerTools を選んでしまった方がいらっしゃるかもしれません。PowerTools は CodePlex で公開されている Open XML 用のツール群です。 PowerTools for Open XML http://powertools.codeplex.com/
ここは迷わず 3. Windows PowerShell ISE と回答していただきたいところです。4. PowerShell Editor というツールが世の中には存在しないわけではありませんが、ISEが選択してとして挙げられている以上、マイクロソフトはこれを選んで欲しいのです。
ちなみに、Visual Studio 2012 でスクリプトの作成が不可能かといえば、そんなことはありません。.NET Frameork には PowerShell Class が用意されており、これを使えばPowerShell スクリプトを Run Space 上で実行し、結果を Visual Studio で受け取ることもできます。が、スクリプト作成の最適なツールではありません。
もしかすると、PowerToys for Windows PowerShell ISE と勘違いして PowerTools を選んでしまった方がいらっしゃるかもしれません。PowerTools は CodePlex で公開されている Open XML 用のツール群です。
PowerTools for Open XML http://powertools.codeplex.com/
PowerShell スクリプトにはコマンドレットが 1 つ以上含まれている必要がある
Windows PowerShell のスクリプトには必ずしもコマンドレットが含まれている必要はありません。なんなら、DOSのコマンドだけでスクリプトを作成しても問題ありません。
スクリプトのパラメーター化に使用する PowerShell コンポーネントの種類は何ですか
これもわかりずらい問題ですね。。。 そもそも「スクリプトのパラメーター化」って言い回しが難解です。英語版では「Parameterize」と書かれていますので、まぁ、日本語としては間違いではないのですが。。。 何を言いたいかというと、「スクリプトを汎用化する際には、値をハードコードするのではなくパラメタ化したほうがよいわけですが、その際使用するのは何ですか?」という問いです。 答えは「変数」ですが、ちょっと意図が分かりずらいですね。 例えば、以下のようなスクリプトがあったとしましょう。 これだと、値がスクリプトに埋め込まれているので、処理を変更するには毎回スクリプトを編集する必要があります。 これを以下のように「Param」で囲んであげることで、変数をスクリプトのパラメタ(引数)として扱うことができます。 このことを「パラメタ化」と言っているのですね。
これもわかりずらい問題ですね。。。
そもそも「スクリプトのパラメーター化」って言い回しが難解です。英語版では「Parameterize」と書かれていますので、まぁ、日本語としては間違いではないのですが。。。
何を言いたいかというと、「スクリプトを汎用化する際には、値をハードコードするのではなくパラメタ化したほうがよいわけですが、その際使用するのは何ですか?」という問いです。
答えは「変数」ですが、ちょっと意図が分かりずらいですね。
例えば、以下のようなスクリプトがあったとしましょう。
これだと、値がスクリプトに埋め込まれているので、処理を変更するには毎回スクリプトを編集する必要があります。
これを以下のように「Param」で囲んであげることで、変数をスクリプトのパラメタ(引数)として扱うことができます。
このことを「パラメタ化」と言っているのですね。
PowerShell スクリプトに使用するファイル拡張子は何ですか
これについては解説は必要ないですね。4. ps1 が正解です。 .vbs は言うまでもなく VBScript。.cs は C# で書かれたソースコードが保存されるファイルの拡張子です。 .psm1 については知らない方もいらっしゃるかもしれませんが、スクリプトをモジュール化する際に使用する拡張子です。 (参考)Windows PowerShell: スクリプトを簡単に共有できるようになりましたhttp://technet.microsoft.com/ja-jp/magazine/ff625835.aspx
これについては解説は必要ないですね。4. ps1 が正解です。
.vbs は言うまでもなく VBScript。.cs は C# で書かれたソースコードが保存されるファイルの拡張子です。
.psm1 については知らない方もいらっしゃるかもしれませんが、スクリプトをモジュール化する際に使用する拡張子です。
(参考)Windows PowerShell: スクリプトを簡単に共有できるようになりましたhttp://technet.microsoft.com/ja-jp/magazine/ff625835.aspx
パラメーターを受け取るためにスクリプトに追加する必要があるブロックの種類は何ですか
パラメーターとは、ここではスクリプトの引数を意味しています。 スクリプト内で引数を受け取るには、以下のように Param ブロックを使用します。
パラメーターとは、ここではスクリプトの引数を意味しています。
スクリプト内で引数を受け取るには、以下のように Param ブロックを使用します。
Comment ブロックとは、以下のように複数行にわたるコメントを記述する際に使用します。 <# This isablock comment#> Scriptブロック とは、その中に書かれたスクリプトを実行する際に使用するのですが、例えば以下のようにリモートコンピューター上で実行したいコマンドを記載するのに使用します。 Invoke-Command -ComputerName RemotePC -ScriptBlock{ Restart-Computer } Functionブロックは、ある処理を関数化する際に使用します。例えば以下のように使用します。 Function EchoDateTime { Get-Date } EchoDateTime
Comment ブロックとは、以下のように複数行にわたるコメントを記述する際に使用します。
<# This isablock comment#>
Scriptブロック とは、その中に書かれたスクリプトを実行する際に使用するのですが、例えば以下のようにリモートコンピューター上で実行したいコマンドを記載するのに使用します。
Invoke-Command -ComputerName RemotePC -ScriptBlock{ Restart-Computer }
Functionブロックは、ある処理を関数化する際に使用します。例えば以下のように使用します。
Function EchoDateTime {
Get-Date
}
EchoDateTime
PowerShell で関数を定義するには、どのキーワードを使用しますか
前問で書いた通り、関数を定義するには Function を使用します。 While はループを記述する際のキーワードですね。
前問で書いた通り、関数を定義するには Function を使用します。
While はループを記述する際のキーワードですね。
Get-DiskInfo という関数を DiskUtilities.ps1 というスクリプトに追加しました。PowerShell ISE の外部でこの関数をテストするには、どのような手順を実行する必要がありますか (2 つ選択してください)。
まず初めに謝っておきます。 これ、答えが間違えています。。。。ごめんなさい。本社にフィードバックしておきます。 正解は、3,4 ですが、2,4と回答しないと正解になりません。。。ほんとごめんなさい。 気を取り直して解説しておきましょう。 おそらく、以下のようなスクリプトを作成して、DiskUtilities.ps1 というファイル名で保存したのでしょう。「関数を保存した」というところに注目してください。 このスクリプトを ISEの「実行ポタン」ではなくPSコンソールやタスクマネージャー等から起動するにはどうしたらよいか?という問いです。 ここで注意していただきたいのは、保存したスクリプトは「関数」であるということです。 上記のような関数が書かれたスクリプトを単純に実行すると「関数が定義」されるだけで、関数そのものは実行されません。 でもって、定義された関数はスクリプトが終われば消えてしまいます。 つまり、以下のように行っても、関数は実行されないのです。 PS C:\> .\DiskUtilities.ps1 PS C:\> Get-DiskInfo よって、「1.」は不正解です。 じゃ、「2. スクリプトをモジュールとして読み込む」はどうかといえば、一見よさげですが、これも × です。 モジュールとして読み込むには、.psm1 という拡張子で保存し、所定のモジュールフォルダに格納する必要があります。 拡張子 .ps1 で保存したスクリプトファイル内にある関数を呼び出すには、「ドット ソース モード」と呼ばれる手法でスクリプトを実行する必要があります。 具体的には以下のように、先頭にドット スペースを追記します。 PS C:\>. .\DiskUtilities.ps1 ドット 半角スペース ドット\DiskUtilities.ps1 と書かれてます。 これにより、ps1 内の Get-DiskInfo 関数は、同じ PSセッション内であればいつでも呼び出して実行できます。 PowerShellコンソールを閉じてしまうと、PSセッションも消滅するので、関数も使えなくなります。
まず初めに謝っておきます。
これ、答えが間違えています。。。。ごめんなさい。本社にフィードバックしておきます。
正解は、3,4 ですが、2,4と回答しないと正解になりません。。。ほんとごめんなさい。
気を取り直して解説しておきましょう。
おそらく、以下のようなスクリプトを作成して、DiskUtilities.ps1 というファイル名で保存したのでしょう。「関数を保存した」というところに注目してください。
このスクリプトを ISEの「実行ポタン」ではなくPSコンソールやタスクマネージャー等から起動するにはどうしたらよいか?という問いです。
ここで注意していただきたいのは、保存したスクリプトは「関数」であるということです。
上記のような関数が書かれたスクリプトを単純に実行すると「関数が定義」されるだけで、関数そのものは実行されません。
でもって、定義された関数はスクリプトが終われば消えてしまいます。
つまり、以下のように行っても、関数は実行されないのです。
PS C:\> .\DiskUtilities.ps1
PS C:\> Get-DiskInfo
よって、「1.」は不正解です。
じゃ、「2. スクリプトをモジュールとして読み込む」はどうかといえば、一見よさげですが、これも × です。
モジュールとして読み込むには、.psm1 という拡張子で保存し、所定のモジュールフォルダに格納する必要があります。
拡張子 .ps1 で保存したスクリプトファイル内にある関数を呼び出すには、「ドット ソース モード」と呼ばれる手法でスクリプトを実行する必要があります。
具体的には以下のように、先頭にドット スペースを追記します。
PS C:\>. .\DiskUtilities.ps1
ドット 半角スペース ドット\DiskUtilities.ps1 と書かれてます。
これにより、ps1 内の Get-DiskInfo 関数は、同じ PSセッション内であればいつでも呼び出して実行できます。
PowerShellコンソールを閉じてしまうと、PSセッションも消滅するので、関数も使えなくなります。
腕に自信のある方は、まずはテストを受けてみてくださいね!通過できない場合には、こちらの解説講座に戻ってきてください。
第1回 スクリプト入門編
今回は PowerShell のスクリプト言語について。
PowerShell で変数を宣言するには、どの記号を使用しますか
これは比較的簡単ですね。正解は “$” です。文字列の頭に $ をつけることで変数として扱うことができます。 他のスクリプト言語同様、Windows PowerShell でも特殊記号を使用することで文字列に特別な意味を持たせることができます。 !(エクスクラメーション)は 論理否定(-not)の短縮形です。変数が NULL 値かどうかの判定なんかで使います。”NULL 値は論理値的には False” なので、! $null と書けば、True を意味することになります。ちなみに、$null は NULL 値を表現する既定の変数です。 @ を使用するとアレイ値を宣言することができます。 @(1,2,3) とすれば、数値の1,2,3それぞれが入った配列が定義できます。文字列も同様に、@(“a”,”b”,”c”) などとするだけです。 配列と似たものでハッシュテーブルと呼ばれるものもあります。これはキーと値のペアで格納できるものです。 例えば各国の人口をプログラムの中で使いたい場合、事前に以下のように定義しておきます。 $P = @{“Japan” = 127600000 ; “USA” = “313900000” } こうすれば、日本の人口を取り題したいときには $P.Item("Japan") とすればよいわけです。いちいちデータベース等にアクセスする必要がなくなるので、繰り替えし処理が多い場合などは処理を高速化できます。 # はご存知ですよね。これはコメント行を意味します。
これは比較的簡単ですね。正解は “$” です。文字列の頭に $ をつけることで変数として扱うことができます。
他のスクリプト言語同様、Windows PowerShell でも特殊記号を使用することで文字列に特別な意味を持たせることができます。
!(エクスクラメーション)は 論理否定(-not)の短縮形です。変数が NULL 値かどうかの判定なんかで使います。”NULL 値は論理値的には False” なので、! $null と書けば、True を意味することになります。ちなみに、$null は NULL 値を表現する既定の変数です。
@ を使用するとアレイ値を宣言することができます。 @(1,2,3) とすれば、数値の1,2,3それぞれが入った配列が定義できます。文字列も同様に、@(“a”,”b”,”c”) などとするだけです。
配列と似たものでハッシュテーブルと呼ばれるものもあります。これはキーと値のペアで格納できるものです。
例えば各国の人口をプログラムの中で使いたい場合、事前に以下のように定義しておきます。
$P = @{“Japan” = 127600000 ; “USA” = “313900000” }
こうすれば、日本の人口を取り題したいときには $P.Item("Japan") とすればよいわけです。いちいちデータベース等にアクセスする必要がなくなるので、繰り替えし処理が多い場合などは処理を高速化できます。
# はご存知ですよね。これはコメント行を意味します。
文字列内の変数と併用した二重引用符の機能はどれですか
これ、意味が分かりずらいかもしれません。次の問題とも関係するのですが、文字列の中に$で始まる文字列を書いた場合を考えてみてください。例えば、以下のように。 $a = “6” $b = “12345$a” このとき、$b の中に格納されているのは、”123456” です。なぜならば文字列を二重引用符(ダブルクオーテーション)で括っているからです。 つまり、正解は「1. すべての変数を解決する」です。ここでいう「解決」とは、「名前解決」と同じような意味です。変数を置き換えることを意味しています。
これ、意味が分かりずらいかもしれません。次の問題とも関係するのですが、文字列の中に$で始まる文字列を書いた場合を考えてみてください。例えば、以下のように。
$a = “6”
$b = “12345$a”
このとき、$b の中に格納されているのは、”123456” です。なぜならば文字列を二重引用符(ダブルクオーテーション)で括っているからです。
つまり、正解は「1. すべての変数を解決する」です。ここでいう「解決」とは、「名前解決」と同じような意味です。変数を置き換えることを意味しています。
文字列内の変数と併用した単一引用符の機能はどれですか
前問の続きになりますが、以下のように単一引用符(シングルクオーテーション)で文字列をくくった場合を考えてみます。 $a = “6” $b = ’12345$a’
前問の続きになりますが、以下のように単一引用符(シングルクオーテーション)で文字列をくくった場合を考えてみます。
$b = ’12345$a’
この場合、変数は展開されずに、そのまま文字列として扱われます。 よって、正解は「2. 変数が置換されないようにする」です。
この場合、変数は展開されずに、そのまま文字列として扱われます。
よって、正解は「2. 変数が置換されないようにする」です。
文字列内の変数と併用したアクサン グラーブの機能はどれですか
アクサン グラーブって、どれのことかわかりますか?106/109日本語キーボードですと以下がアクサングラーブです。 これはスクリプトの継続行を意味する記号として使われますが、それ以外にも $ の前に付加することで、$ を単なる文字列として扱うことができます。 つまり答えは「4. 個別の変数が置換されないようにする」です。
アクサン グラーブって、どれのことかわかりますか?106/109日本語キーボードですと以下がアクサングラーブです。
これはスクリプトの継続行を意味する記号として使われますが、それ以外にも $ の前に付加することで、$ を単なる文字列として扱うことができます。
つまり答えは「4. 個別の変数が置換されないようにする」です。
PowerShell でオブジェクトに関するプロパティやメソッドを取得する必要があります。どのコマンドレットを使用しますか
これは覚えておきましょう。「4. Get-Member」です。 PowerShell のコマンドレットは高機能なので、その戻り値がどのようなプロパティやメソッドを持っているかを記憶することは不可能ですし、かといっていちいち調べるのも面倒です。 なので出力結果から、どのような値が得られ、どのような処理が可能になるのかを簡単に予測できることは、効率的なスクリプティングにとってとても重要です。 例えば、 Get-Process というコマンドレットを考えてみましょう。 このコマンドレットの結果、プロセス一覧が取れるであろうことは予測できますが、具体的にどのような値が取れるのかを調べるには、以下のように、Get-Process の出力結果を、パイプを介して Get-Memeber に渡します。 知っているととても便利です。
これは覚えておきましょう。「4. Get-Member」です。
PowerShell のコマンドレットは高機能なので、その戻り値がどのようなプロパティやメソッドを持っているかを記憶することは不可能ですし、かといっていちいち調べるのも面倒です。
なので出力結果から、どのような値が得られ、どのような処理が可能になるのかを簡単に予測できることは、効率的なスクリプティングにとってとても重要です。
例えば、 Get-Process というコマンドレットを考えてみましょう。
このコマンドレットの結果、プロセス一覧が取れるであろうことは予測できますが、具体的にどのような値が取れるのかを調べるには、以下のように、Get-Process の出力結果を、パイプを介して Get-Memeber に渡します。
知っているととても便利です。
PowerShell の論理構文は次のうちどの構文ですか (2 つ選択してください)。
「論理構文」って意味わかります?ググっても、もといBingってもそんな言葉出てこないんですけど。。。。 英語版のテストでは「Logical construct」と書いてあるので「論理構文」なのでしょうが、日本だと「条件分岐構文」のほうがしっくりくるでしょうかね。 じゃ、上記の中で条件分岐はどれかといえば 1,2,3,4 になりますが、問題文では「2つ選択」と書かれています。 頭の中に???が並びますよね。 これ、ひっかけ問題です。 PowerShell には、 if .. then .. else はありません!正確に書くと、PowerShell には「Then」は書きません!!だから、1. は × です。 それから、PowerShell には Case 文、Select 文はありません!! これらは Switch 文に吸収されています。 よって正解は 2 と 4 になります。 意外と難しいですねぇ。
「論理構文」って意味わかります?ググっても、もといBingってもそんな言葉出てこないんですけど。。。。
英語版のテストでは「Logical construct」と書いてあるので「論理構文」なのでしょうが、日本だと「条件分岐構文」のほうがしっくりくるでしょうかね。
じゃ、上記の中で条件分岐はどれかといえば 1,2,3,4 になりますが、問題文では「2つ選択」と書かれています。
頭の中に???が並びますよね。
これ、ひっかけ問題です。
PowerShell には、 if .. then .. else はありません!正確に書くと、PowerShell には「Then」は書きません!!だから、1. は × です。
それから、PowerShell には Case 文、Select 文はありません!! これらは Switch 文に吸収されています。
よって正解は 2 と 4 になります。
意外と難しいですねぇ。
PowerShell のループ処理構文は次のうちどの構文ですか (2 つ選択してください)
これは解説の必要はないですね。 2、5 が正解です。
これは解説の必要はないですね。
2、5 が正解です。
PowerShell のオブジェクトを反復処理する一般的な方法は次のうちどの構文ですか (2 つ選択してください)
「オブジェクトの反復処理」というところがミソです。 PowerShell では、Do や While を含め様々なループ処理があります。 "For” だけでも、以下の3種類があります。 For Foreach ForEach-Object コマンドレット この中でオブジェクトに対する反復処理に対応しているのは、Foreach と ForEach-Object コマンドレットの2つです。 例えば、「WUA で始まるサービスの一覧を取得し、それらをすべて停止する」という処理を考えてみると、以下のように書けます。 $S には Get-Service の戻り値がオブジェクトとして格納されています。$S から個々のサービスのインスタンスを取り出して Stop() しています。 てことで正解は 2、5 ですね。
「オブジェクトの反復処理」というところがミソです。
PowerShell では、Do や While を含め様々なループ処理があります。
"For” だけでも、以下の3種類があります。
この中でオブジェクトに対する反復処理に対応しているのは、Foreach と ForEach-Object コマンドレットの2つです。
例えば、「WUA で始まるサービスの一覧を取得し、それらをすべて停止する」という処理を考えてみると、以下のように書けます。
$S には Get-Service の戻り値がオブジェクトとして格納されています。$S から個々のサービスのインスタンスを取り出して Stop() しています。
てことで正解は 2、5 ですね。
ということで、第2回目の講義は終わりです。
テストに通過できなかった方は、上記を踏まえて再度チャレンジしてください!目指せ満点!
次回は 「第3回 単純なスクリプトと関数」編です。
以下に Windows PowerShell 3.0 のオンライントレーニングコースが公開されています。
もちろん日本語です。
是非テストに挑戦していただきたいのですが、テストの解説がどこにも掲載されていないので、今日から9回に分けて解説したいと思います。
PowerShell V3 をサポートしているオペレーティング システムは次のうちどれですか?
Windows PowerShell v3 を利用するには Windows Management Framework 3.0 が必須です。
Windows 8 および Windows Server 2012 以降には標準で組み込まれていますが(Windows 8.1 および Windows Server 2012 R2 には v4 が組み込まれています)、それ以前の OS には以下からダウンロードしてインストールする必要があります。
http://www.microsoft.com/en-us/download/details.aspx?id=34595
Windows Management Framework 3.0 をサポートしている OS は Windows 7 Service Pack 1, Windows Server 2008 R2 SP1, Windows Server 2008 Service Pack 2 となります。
なので、設問中の Windows 7 は、微妙ですがサポート外ということになります。
スクリプトを使用して自動化する作業の種類はどれですか (2 つ選択してください)
これは結構悩ましい設問です。
「1回だけ発生して繰り返されない作業」については、一般的に自動化のメリットは得られずらいので選択肢としては妥当ではありません。
「アドホックな作業」とは、暫定的に行うような作業を意味しており、これも自動化できない作業と考えてよいでしょう。
よって、「管理者にとって一般的な作業」「繰り返し発生する作業」が選択肢としては適切です。
IT 環境における PowerShell の目的は何ですか
これも設問が漠然としていて難しですよね。
従来よりスクリプトの大きな目的は作業の自動化です。スクリプトがあるからといって、GUIの存在が必要なくなるわけではな��し、手動の管理作業が必要なくなるわけではありません。
よって、最適な選択肢は「作業を管理および自動化するツールを提供する」になりますね。
PowerShell 3.0 の実行に必要な .NET Framework のバージョンはどれですか。
間違いやすい問題です。これは、Windows Management Framework 3.0 の動作条件を確認する必要があります。
以下にも記載されているように、.NET Framework 4.0 が必須となっています。
Windows XP でサポートされている PowerShell のバージョンはどれですか
サポート期限が 2014年4月に迫った Windows XP ですが、実は XP でも Windows PowerShell はサポートされていることをご存知の方は意外に少ないです。
実は、Windows Management Framework 2.0(Windows Management Core Package)は Windows XP SP3 用にも提供されており、これをインストーすることで Windows XP SP3 でも Windows PowerShell 2.0 を利用できます。
http://www.microsoft.com/ja-jp/download/details.aspx?id=16818
PowerShell の実行に使用するユーザー コンテキストはどれですか
これ、質問文が悪いですね。 言いたいのは「Windows PowerShell を実行する際に使用すべきユーザーコンテキストはどれですか?」という意味です。 ここでのユーザーコンテキストとは、「ユーザーの実行空間」とでもいえばよいでしょうか。なかなか訳しずらい言葉ですが。 要は、「どのユーザーの権限で Windows PowerShell を実行すべきか?」という問いです。 マイクロソフトにおける Windows PowerShell の位置づけはシステム管理ツールなので、「管理者コンテキスト」がただし答えになります。 Windows PowerShell のコンソールを開くときに「管理者として実行」を選択するようにしてね!というメッセージが込められています。でないと、管理作業がエラーになってしまうので。
これ、質問文が悪いですね。
言いたいのは「Windows PowerShell を実行する際に使用すべきユーザーコンテキストはどれですか?」という意味です。
ここでのユーザーコンテキストとは、「ユーザーの実行空間」とでもいえばよいでしょうか。なかなか訳しずらい言葉ですが。
要は、「どのユーザーの権限で Windows PowerShell を実行すべきか?」という問いです。
マイクロソフトにおける Windows PowerShell の位置づけはシステム管理ツールなので、「管理者コンテキスト」がただし答えになります。
Windows PowerShell のコンソールを開くときに「管理者として実行」を選択するようにしてね!というメッセージが込められています。でないと、管理作業がエラーになってしまうので。
PowerShell を管理者コンテキストで開くとプロンプトに表示されるディレクトリの場所はどれですか
「管理者コンテキスト」というところがミソですね。 実際にコンソールを開いてみれば一目瞭然です。 以下は「管理者として実行」を選択した開いた時のプロンプトです。 「管理者として実行」を選択しないと、現在のユーザーコンテキストで開かれるので、プロンプトは以下のようになります。
「管理者コンテキスト」というところがミソですね。
実際にコンソールを開いてみれば一目瞭然です。
以下は「管理者として実行」を選択した開いた時のプロンプトです。
「管理者として実行」を選択しないと、現在のユーザーコンテキストで開かれるので、プロンプトは以下のようになります。
実行ポリシーを設定するには、どのコマンドレットを使用しますか
これは、これから Windows PowerShell を使用してシステム管理を始めようとする方が覚えておくべき事項の1つです。逆に言えば、これを知らないとシステム管理が先に進みません。 当然、こたえは「Set-ExecutionPolicy」ですね。 PowerShell のコンソールを開いたら、真っ先に以下のコマンドを入力してください。 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned RemoteSigned は、「リモートからダウンロードしてきたスクリプトには署名が必須」という設定です。つまり、インターネット上に転がっているスクリプトをむやみやたらに実行できなくするわけですね。 ちなみに Windows Server 2012 までの規定値は Restricted(制限されている)です。つまり既定では自分で作ったスクリプトも実行できないので、これではあまりにも厳しすぎる。。。。ということで、RemoteSigned を使用するようにしましょう。R2 からは RemoteSigned が規定値になりました。 (参考) Set-ExecutionPolicy コマンドレットの使用 http://technet.microsoft.com/ja-jp/library/ee176961.aspx
これは、これから Windows PowerShell を使用してシステム管理を始めようとする方が覚えておくべき事項の1つです。逆に言えば、これを知らないとシステム管理が先に進みません。
当然、こたえは「Set-ExecutionPolicy」ですね。
PowerShell のコンソールを開いたら、真っ先に以下のコマンドを入力してください。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
RemoteSigned は、「リモートからダウンロードしてきたスクリプトには署名が必須」という設定です。つまり、インターネット上に転がっているスクリプトをむやみやたらに実行できなくするわけですね。
ちなみに Windows Server 2012 までの規定値は Restricted(制限されている)です。つまり既定では自分で作ったスクリプトも実行できないので、これではあまりにも厳しすぎる。。。。ということで、RemoteSigned を使用するようにしましょう。R2 からは RemoteSigned が規定値になりました。
(参考) Set-ExecutionPolicy コマンドレットの使用 http://technet.microsoft.com/ja-jp/library/ee176961.aspx
PowerShell リモート処理の機能はどれですか
これは簡単だと思うのですが、どうでしょう。 「リモートデスクトップ」と書かれている選択肢は明らかに間違いです。リモートデスクトップはリモートデスクトップですからね。全く別の機能です。 答えは当然「リモート システムに対して対話的にまたはスクリプトで PowerShell を使用する機能」です。 Windows PowerShell を使用すると、スクリプトを使用してリモートのコンピューターを管理できます。これを「リモーティング」を言います。 リモーティング機能は、大きく分けて3種類の使い方があります。 各コマンドレットの -ComputerName パラメタを使用する Invoke-Command -ComputerName を使用する Enter-PSSession ーComputerName を使用して、SSHのようにリモートコンピューターにサインインする 多くのコマンドレットでは -ComputerName をサポートしていますが、中にはサポートしていないものもあります。場合によっては、リモートコンピューターのDOSコマンドを実行したいことがあるかもしれません。 そのときは Invoke-Command を使ってください。Invoke-Command を使用すれば任意のコマンドやスクリプトを相手のコンピューター上で実行することができます。 対話的に相手のコンピューターに入り込みたい場合には、Enter-PSSession -ComputerName を使用します。
これは簡単だと思うのですが、どうでしょう。
「リモートデスクトップ」と書かれている選択肢は明らかに間違いです。リモートデスクトップはリモートデスクトップですからね。全く別の機能です。
答えは当然「リモート システムに対して対話的にまたはスクリプトで PowerShell を使用する機能」です。
Windows PowerShell を使用すると、スクリプトを使用してリモートのコンピューターを管理できます。これを「リモーティング」を言います。
リモーティング機能は、大きく分けて3種類の使い方があります。
多くのコマンドレットでは -ComputerName をサポートしていますが、中にはサポートしていないものもあります。場合によっては、リモートコンピューターのDOSコマンドを実行したいことがあるかもしれません。
そのときは Invoke-Command を使ってください。Invoke-Command を使用すれば任意のコマンドやスクリプトを相手のコンピューター上で実行することができます。
対話的に相手のコンピューターに入り込みたい場合には、Enter-PSSession -ComputerName を使用します。
Windows Server 2012 の既定の実行ポリシーは何ですか
これ、問題または答えが間違えています。 本当は、「Windows Server 2012 R2 の既定の実行ポリシーは何ですか?」でないといけません。もしくは、答えが 「Restricted」 でないとつじつまが合いません。 前述したように、Windows Server 2012 R2 の規定値は RemoteSigned です。 もしこのままの問いだとすると、「Resricted」が答えになるので、満点が取れなくなってしまいます。満点が欲しい方は「RemoteSinged」で答えてください~。 http://technet.microsoft.com/en-us/library/hh847748.aspx
これ、問題または答えが間違えています。
本当は、「Windows Server 2012 R2 の既定の実行ポリシーは何ですか?」でないといけません。もしくは、答えが 「Restricted」 でないとつじつまが合いません。
前述したように、Windows Server 2012 R2 の規定値は RemoteSigned です。
もしこのままの問いだとすると、「Resricted」が答えになるので、満点が取れなくなってしまいます。満点が欲しい方は「RemoteSinged」で答えてください~。
http://technet.microsoft.com/en-us/library/hh847748.aspx
本日の講義はここまで。
次回は、Part2 PowerShell のスクリプト言語 編 です。
当キャンペーンは終了してしまいましたが、こちらからダウンロードできます!
http://technet.microsoft.com/ja-jp/windowsserver/jj649374.aspx
すっかり定番となった管理ツール「グループポリシー」ですが、日本語版の全設定項目リファレンスが無いってのがタマに瑕でした。
英語版はリリースされてるんですけどね。。。(参考)http://www.microsoft.com/en-us/download/details.aspx?id=25250
そこで、いま Windows Server 2012 R2 評価版ダウンロードに登録してくださったみなさま全員に、日本語版 グループポリシー設定リファレンスガイドをプレゼント中です。
※評価版ダウンロードは以下からどうぞ。 http://technet.microsoft.com/ja-jp/windowsserver/jj649374.aspx
ご覧ください。しっかりと日本語化されています!ヘルプも完璧です。
実はこれ、"翻訳したんじゃないんです"。とある PowerShell プロフェッショナルな方にお願いして、スクリプトを作ってもらったんです。詳しくは後日。。。
さらに、評価版ダウンロード登録後にキャンペーンに応募してくださると、以下の書籍も抽選でプレゼント。
期間は1か月と短いのですが、この機会をお見逃しなく~
この投稿は PowerShell Advent Calendar 2013 に参加しています。
※投稿遅れてごめんなさい!!!!
Windows PowerShell を使用すれば、Windows Server 上にインストールするサービスの構成も自動化することができます。
ただ、その中でちょっと面倒なのが DHCP サーバーです。
サーバーマネージャーで DHCPサーバーをインストールし、DHCPマネージャーで構成するには、以下の手順が必要です。
これらをWindows PowerShell に置き換えると以下のようになります。
以上で設定は完了なのですが、Windows PowerShell から構成を行った場合、ちょっとした問題が出ることがあります。それが、以下です。
そうなのです。こいつが消えてくれないことがあるのです。害はありませんが、ちょっと鬱陶しいですね。。。
そこで、対応が完了しているフラグがどうしても消えない場合には、以下のようなコマンドを最後に実行しましょう。
Set-ItemProperty –Path registry::HKLM\SOFTWARE\Microsoft\ServerManager\Roles\12 –Name ConfigurationState –Value 2
「HKLM\SOFTWARE\Microsoft\ServerManager\Roles」配下には、サーバーにインストールされている役割が列挙されており、その直下の数字が各役割の管理番号になっているようです。つまり、「12」というのはDHCP サーバーを示しています。ConfigurationState = 2 が「構成完了」を意味しています。
Windows Server 2012 R2 に新しく実装された機能の1つに Web Application Proxy があります。
非常に地味~な名称のため、正直なところあまり目立たないのですけどね。
Web Application Proxy とは何かといえば、ぶっちゃけ、リバースプロキシーです。
リバースプロキシーなんて古くからあるテクノロジーですから、中には「何を今さら !?」と思われる方もいらっしゃるかもしれません。マイクロソフトもその昔 MS PROXY という製品を販売していましたし、その後継製品として現在は超高機能な Forefront UAG(Unified Access Gateway)を持っています。
なのに、なぜ今さら Web Application Proxy なのかといえば、これがマイクロソフトの「デバイス&サービス戦略」においてとても重要な位置を占めているからです。
Windows Server 2012 R2 に実装されている Web Application Proxy の最大の特徴とは何かといえば、
AD FS による事前認可機能
これにつきます。
さまざまなリバースプロキシー製品が Active Directory ドメインサービスに「認証依頼」を飛ばすことができますが、Web Application Proxy は AD FS に「認可依頼」を飛ばすことができます。
Web Applicaiton Proxy と AD FS の連携による認可処理は、社内へのアクセスに先立って行われるため「事前認可」と呼んでいます。
この機能により、ユーザーがインターネットから社内リソースアクセスする前に、「ユーザー認証」するだけでなく AD FS から発行されたクレームを使用して「認可」することができるのです。
ここでちょっとだけ整理しておきましょう。
「認可」では、ユーザーが持っている属性を使ってアクセス可否を判定することができるため、きめの細かな制御が可能です。
ユーザー属性は通常 Active Directory に格納されていますが、AD FS は標準で SQL Server に格納された情報を検索できるため、例えば人事データベースが SQL Server で構築されていれば、それらの情報も判定基準として利用できるということです。
アクセス制御のための複雑なビジネスロジックを大量のセキュリティグループによって実現することは、とても大変ですし面倒です。
しかし、ユーザー属性をアクセス制御の判定基準に利用できれば、今まで以上に要望実現への距離を短縮することができます。
「え?それだけ?なんかピンとこないな。」
そう思われた方も多いでしょう。
当然、話はこれだけでは終わりません。
Windows Server 2012 R2 には新たに「DRS:Device Registration Service(デバイス登録サービス)」という機能が実装されました。
これはその名の通り、ユーザーのデバイス(PCやタブレット)を Active Directory に登録するためのサービスです。
これはドメイン参加とは違いますので気を付けてください。
ドメインに参加した PC は、AD ドメインによる「デバイス認証」がサポートされることに加え、「ドメインのポリシーを強制適用」したり「管理者がリモートから管理」することができます。
しかし、DRS によってドメインに登録されたデバイスは、ADドメインによって「デバイス認証」のみが行われます。
デバイスを登録したからといって、ドメインのポリシーが適用されたり、管理者がリモートから入り込むということはできません。
では、なんのためのデバイス登録なのか。。。
実は、DRS は AD FS と連携して動作しています。
ということは、デバイスが AD ドメインで認証の結果、デバイスのクレーム(デバイスの属性)が発行されます。
ちなみに、デバイスを登録する処理のことを、Windows 8.1 では Workplace Join と呼んでいます。
「デバイスのクレームが発行される」と聞いて、先の Web Application Proxy の AD FS 連携と結び付けられた方はすばらしいです。
デバイスクレームが発行されるということは、Web Application Proxy を通過する際に ユーザーに対する認可に加えてデバイスに対する認可も行えるということです。
つまり、ユーザーが正しく認可されても、デバイスが認可されなければ社内にアクセスすることができません。
従来、これと同じことを行うためには、サードパーティ製品を導入する必要がありました。
しかも、個人デバイスは Active Directory に登録されていないため、別途管理DBを用意してメンテナンスしなければなりませんでした。
でも、今後新しく構築する際にはその必要はありません。
Workpalce Join を使用すれば、ユーザーは自分自身で社内 AD にデバイス登録が行えます。
しかも、何か特別なアプリケーションやドライバーをインストールする必要はなく、OS 標準機能で行えてしまうのです。
必要な証明書は、Workplace Join したときに自動的にインストールされます。
もちろん、誰でも彼でもデバイス登録ができてしまうことは危険ですので、DRS に登録要求ができるユーザーやユーザーグループを制限することもできます。
その辺のアクセス制御は AD FS を使用してきめ細かに行えます。
いかがでしょう?
ちょっと評価してみたくなりましたよね?
ただ、構築のために求められるスキルは、かなり難易度が高いです。
なので、手順書を用意しました。
手順書を入手していただくには、まずは Windows Server 2012 R2 評価版ダウンロードを行ってください。
http://technet.microsoft.com/ja-jp/evalcenter/dn205286.aspx
評価版ダウンロードを開始してからすこしすると、「ダウンロードありがとう」的なメールが送られてきます。
※すでに評価版をお持ちの方はダウンロードを途中で止めてしまっても大丈夫です
そのメールの中に、手順書へのリンクが書かれています。
ぜひ Windows Server 2012 R2 評価版を使用して、手順を実施してみてください。
感動していただけるはずです。
一歩先の Active Directory の使い方によっていただければ幸いです。
多くの方が Windows PowerShell をお使いのことと思います。
PowerShell にはさまざまな「奥義」が存在しますが、「バックグラウンドジョブ」も奥義の一つです。これは究極奥義である「ワークフロージョブ」へとつながる大切な概念です。
まずは以下をご覧ください。
Get-Service -ComputerName Server01
何をやっているかは一目瞭然ですよね。
リモートコンピューター Server01 上のサービス一覧を取得しています。
通常 Get-Service は直ぐに結果を得られるので問題ないのですが、結果取得までに10分とか20分を要する場合にはコンソールを占有されてしまうことを回避するため、「バックグラウンドジョブ」と呼ばれる方法を使用します。
つまり、コマンドを投げっぱなしにしておいて(非同期実行)、あとから結果を取りに行く...という方法です。
バックグラウンドジョブを作成するには2つの方法があります。
いずれを使用しても得られる結果は同じですが、コマンドレットによっては -AsJob をサポートしていない場合もあり、その場合には Start-Job の引数にコマンドレットを指定します。
例えば、Get-Service の場合には -AsJob パラメタをサポートしていないため、バックグラウンドジョブ化するには以下のように書きます。
Start-Job -ScriptBlock { Get-Service -ComputerName Server01 }
さて、ここまでは一般ピープルでも知っていることです。
エキスパートな方はここからが重要なのです。
さっそくですが、以下の2つの違いわかりますか?いずれも上の記述を書き換えたもので、同じ結果が得られます。
$S = New-PSSession -ComputerName Server01 Invoke-Command -Session $S -ScriptBlock { Get-Service } -AsJob
$S = New-PSSession -ComputerName Server01 Invoke-Command -Session $S -ScriptBlock {Start-Job -ScriptBlock { Get-Service } }
1 行目の 「$S = New-PSSession -ComputerName Server01 」はおわかりですよね。リモートコンピューター Server01 と PS セッションを張ってます。図にすると以下のような感じです。
問題は2行目です。同じことをやってそうなのですが、微妙に書き方が異なっています。-AsJob と Start-Job に何か秘密が隠れているようではあります。
Invoke-Command を使用すると、リモートコンピューター上でコマンドレットを実行することができます。今回の例では、事前に作成した Server01 とのセッションを使い、Server01 上で Get-Service を実行しています。
-AsJob を指定することで Invoke-Command 自体がバックグラウンドジョブ化され、リモートでのコマンド実行を待ち合せることなく、バックグラウンドで非同期に実行することができます。 結果は Invoke-Command を実行したローカルホストに保存されます(ここ重要!)。 図にすると以下のような感じです。
-AsJob を指定することで Invoke-Command 自体がバックグラウンドジョブ化され、リモートでのコマンド実行を待ち合せることなく、バックグラウンドで非同期に実行することができます。
結果は Invoke-Command を実行したローカルホストに保存されます(ここ重要!)。
図にすると以下のような感じです。
一方、-AsJob ではなく、ScriptBlock 内で Start-Job を実行した場合はどうなるでしょう。 Start-Job は Server01 上で実行されるため、バックグラウンドジョブ化されるのは Server01 上の Get-Service コマンドです。 では、結果はどこに保存されるかといえば、ジョブが実行された Server01 上です。 図にすると以下のようになります。 当然、結果を取りに行くときは、以下のように Server01 に対して Receive-Job する必要があります。 Invoke-Command -Session $S -ScriptBlock { Receive-Job <jobid> }
一方、-AsJob ではなく、ScriptBlock 内で Start-Job を実行した場合はどうなるでしょう。
Start-Job は Server01 上で実行されるため、バックグラウンドジョブ化されるのは Server01 上の Get-Service コマンドです。
では、結果はどこに保存されるかといえば、ジョブが実行された Server01 上です。
図にすると以下のようになります。
当然、結果を取りに行くときは、以下のように Server01 に対して Receive-Job する必要があります。
Invoke-Command -Session $S -ScriptBlock { Receive-Job <jobid> }
両者の違いを正しく理解しておくことはとても重要です。
例えば、「長く時間を要するバックグラウンドジョブを実行して、あとで結果を受け取ろう」と考えたとしましょう。
もし Invoke-Command -AsJob を使用してローカルコンピューター上に結果を保存するようにした場合、ローカルコンピューターはジョブが終わるまでネットワークから切り離すこともシャットダウンすることもできません。ネットワークから切り離されたり、シャットダウンした瞬間にジョブは消滅します。
しかし、後者( Invoke-Command {Start-Job })で実行すれば、ジョブはリモートで実行され、結果もリモートに保存されます。
ジョブを投げたあとはDisconnect-PSSession でセッションをいったん切断し、あとから Connect-PSSession でもとのセッションに再接続することができます。
(参考) 【Management】PowerShell V3.0 で向上したリモーティング機能 その1 http://blogs.technet.com/b/junichia/archive/2012/03/24/3488392.aspx 【Management】PowerShell V3.0 で向上したリモーティング機能 その2 http://blogs.technet.com/b/junichia/archive/2012/03/26/3488520.aspx
(参考)
【Management】PowerShell V3.0 で向上したリモーティング機能 その1 http://blogs.technet.com/b/junichia/archive/2012/03/24/3488392.aspx
【Management】PowerShell V3.0 で向上したリモーティング機能 その2 http://blogs.technet.com/b/junichia/archive/2012/03/26/3488520.aspx
「ジョブの実行場所が、結果の保存場所である」
.....ということをくれぐれも忘れないでください。
Linux/UNIX 系の方にはおなじみの Tail コマンドですが、これと同じことを Windows でできないものかとよく尋ねられます。
MVP のあおきさんが書かれているように、CodePlex で LogExpert というツールが公開されていますので、すでにこちらをお使いの方も多いことでしょう。
http://d.hatena.ne.jp/aoki1210/20120218/p1 ※この記事の存在は石坂さんから教えていただきました。石坂さん、ありがとうございます!そしてあおきさん、ありがとうございます!
http://d.hatena.ne.jp/aoki1210/20120218/p1
※この記事の存在は石坂さんから教えていただきました。石坂さん、ありがとうございます!そしてあおきさん、ありがとうございます!
では、本当に Windows 標準ではできないのかといえば、実はそんなことはありません。
Windows PowerShell に用意されている Get-Content コマンドレットを使用すれば同じような処理が可能です。
例えば以下のように書きます。
Get-Content .\FinaName.log -wait -tail 0
-wait は新しい行が追加されるまで待ち合せることを意味しています。
注意していただきたいのは、その後の -tail です。このパラメタは Windows PowerShell 3.0 からサポートされたものです。
以前は Get-Content .\FinaName.log -wait などとやると、テキストファイルをいったん全部読み込んでから -wait 処理が始まるため、巨大なファイルを扱う場合には待ち時間が異常に長いという問題がありました。
しかし、-tail パラメタのサポートにより、「最後の○行だけ読み込む」という指定ができるようになったのです。もちろん、 -tail 0 は「0行読み込む」という意味なので、何も読み込まずにいきなり -wait 処理が始まります。
試しに、何か巨大なテキストファイルを用意してみてください。
手元にない方は、郵便局が用意している郵便番号データ(CSV ファイル)なんかがよいかもしれません。
http://www.post.japanpost.jp/zipcode/dl/oogaki.html
巨大な csv ファイルを用意したら Windows PowerShell のコンソール上で以下のコマンドを実行してみましょう(郵便番号データを使用しています)。
Get-Content .\KEN_ALL.CSV -wait
上記の通り、すべてのデータを読み込んだ後で wait がはじまります。私のマシンで実行すると、wait が始まるまで実に2分半!これじゃやってられません。
そこで、次に以下のように指定してみてください。-tail 0 がミソです。
Get-Content .\KEN_ALL.CSV -wait -tail 0
言わずもがなですが、いきなり wait してくれます。
Get-Content には、他にもいろいろな使い方がありますので、ぜひ末永くご愛顧ください。便利ですよ!
さて、ここでこんな要望も出てくるはず。
「Get-Content なんて長くて打ってられん! tail と入力したいのだ!」
はい、もっともです。以下のコマンドを実行してみてください。
Set-Alias tail Get-Content
これで、Get-Content に tail というエイリアスが設定されました。今後は tail と入力すれば Get-Content と同じように使用できます。
が、ここで難点も。。。Set-Alias コマンドは現在のコンソール上でのみ有効なのです。つまり、一度コンソールを閉じると Set-Alias した内容が消えてしまいます。
そこで、PowerShell セッションが起動するたびに、上記コマンドが実行されるようにしましょう。
Windows PowerShell にはユーザーごとにプロファイルが用意されており、ここにコマンドを記述しておくとコンソールが開くたびに実行してくれます。
ログオンスクリプトみたいなものです。
試しに、以下のコマンドを実行してプロファイルをメモ帳で開いてみてください。
notepad $profile
おそらく、「ファイルが存在しません。新規に作成しますか?」と表示されるはずです。
もし以前作成したプロファイルが存在していたとしても、特に気にせず、以下のようにコマンドを実行してください。
Add-Content $profile "Set-Alias tail get-content" -Force
これにより、$profile が存在しない場合には新規に作成して “Set-Alias tail Get-Content” を追記してくれます。
すでに $Profile が存在する場合には、ファイルの最後の行に “Set-Alias tail Get-Content” を追記してくれます。
これで、次回からは PowerShell コンソールを起動した直後から tail コマンドが使用できます。
なお、通常の PowerShell コンソールと、PowerShell ISE とではプロファイルのパスが異なります。
そのため、ISE側だけで設定してもコンソール側には反映されませんので注意してください。
ISE とコンソールの両方で Alias 登録を行ってください。
待ちに待ったリファレンスがやっとリリースされました。
Group Policy Settings Reference for Windows and Windows Server http://www.microsoft.com/en-us/download/details.aspx?id=25250
英語版なのですが、新項目は50個程度のようで、半分以上が IE11 関係ですね。
ついでに、Azure上で運営されている、Group Policy Search(こちらも英語版ですが。。)も Windows 8.1/Windows Server 2012 R2 のデータで更新されています。
http://gpsearch.azurewebsites.net/
さて、このリファレンスの日本語版なのですが。。。現時点では予定が見えておりません。
が、頑張って調整してみます。
たったいまこんなことがありました。
Windows Server 2012 R2 上にインストールされている Active Directory Federation Service が「開始中」のまま起動できないのです。30分ほど待ってみましたが、まったく状況は変わりません。もちろん、AD FS に依存している Device Registration Service も起動していません。
AD FS の構成情報が格納されている Windows Internal Database は正しく起動しているようなので、Directory Service の問題かと考えイベントログを調べました。
すると、以下の警告ログが大量に見つかりました。
Event ID 2947 グループ管理サービス アカウントのパスワードを取得できませんでした。
Event ID 2947
グループ管理サービス アカウントのパスワードを取得できませんでした。
「グループ管理サービス アカウント(gMSA:Group Managed Service Account)」とは、Windows Server 2012 でリニューアルされたサービスアカウント機能です。手元の環境では AD FS のサービスアカウントとして gMSA を設定してあるのですが、どうやらそのパスワードを取得できないことにより、AD FS が起動できない模様です。
ここですこしだけ gMSA について解説しておきます。ご存知ない方は読んでおいてください。
Winodws Server 2008 以前、サービスに使用する「サービスアカウント」は、ユーザーアカウントと同様に作成する必要がありました。ユーザーアカウントと同様の扱いなので、安全上の配慮からパスワードの変更を行った時には、サービスのアカウント設定画面でパスワードも再設定する必要がありました。
もちろん、Builtin のローカル システム アカウント等を使用することで、パスワードリセットの手間を省くことも可能ではあります。
しかし、サービスが多様化するに従い、サービスアカウントに必要な権限も多様化しました。それ以上に、強い特権を持っている Builtin ローカル システム等を使用することは、システム全体の安全性を脅かすことにもなります。
そこで、Windows Server 2008 R2(Windows 7も含む)では「管理サービスアカウント(MSA:Managed Service Account)」というアカウントがサポートされました。
MSA を使用すると、サービスに独自のアカウントを作成して、必要な権限を与えることが可能です。また、パスワードが自動管理されるため、一度作成して以降は手動でパスワードを変更する必要がありません。
ただ、これですべてが解決されたわけではありませんでした。
MSA には以下の制限があったのです。 複数のコンピューターで共有できない MSAは、作成したら「特定のコンピューターにアカウントをインストールする」という作業が必要で、一度インストールされたアカウントは他のコンピューターにインストールすることができないのです。この制限は結構残念で、例えばクラスター化されたノード上のサービス間で共有したり、複数の IIS サービスで共有するといったことができませんでした。もちろん、AD FS をファーム構成にした場合にも同様です。 MSAはアプリケーションレベルでサポートされる ちょっと意味が分かりずらいと思いますが、OS が MSA をサポートしているからといって、その上で動作するアプリケーションも MSA をサポートするわけではないということです。事実、Exchange の一部の機能や SQL Server では MSA をサポートしていませんでした。 タスクスケジューラーで使用できない これも結構残念です。 Windows Server 2012 でサポートされた「グループ管理サービスアカウント(gMSA)」では、以下の通り"ある程度"制限が解除されています。 複数のコンピューターで共有できる フェールオーバークラスターのサービスアカウントとして使用することはできませんが、クラスター化されたノード上のサービス間で共有することは可能です。 タスクスケジューラーで使用できる
MSA には以下の制限があったのです。
Windows Server 2012 でサポートされた「グループ管理サービスアカウント(gMSA)」では、以下の通り"ある程度"制限が解除されています。
アプリケーションでのサポートについては、実は従来通りの制限があります。どのアプリケーションが gMSA をサポートしているかは、その都度調べる必要があります。ちなみに、AD FSでは問題ありません。
話を戻しましょう。
冒頭に示したエラーを解消する方法を探したのですが、「これ!」というものが見つかりませんでした。
そこで、試しに gMSA のパスワードをリセットしてみることにしました。
まずは、PowerShell コンソールから以下のコマンドレットを使用して gMSA の情報を出力します。
PS C:\Windows\system32> Get-ADServiceAccount -Filter * DistinguishedName : CN=FsGmsa,CN=Managed Service Accounts,DC=itcampjp,DC=com Enabled : True Name : FsGmsa ObjectClass : msDS-GroupManagedServiceAccount ObjectGUID : 86e6d9df-1621-48ab-b915-fe11aa58fa75 SamAccountName : FsGmsa$ SID : S-1-5-21-1369388327-1626757837-1784127236-1126 UserPrincipalName :
PS C:\Windows\system32> Get-ADServiceAccount -Filter *
DistinguishedName : CN=FsGmsa,CN=Managed Service Accounts,DC=itcampjp,DC=com Enabled : True Name : FsGmsa ObjectClass : msDS-GroupManagedServiceAccount ObjectGUID : 86e6d9df-1621-48ab-b915-fe11aa58fa75 SamAccountName : FsGmsa$ SID : S-1-5-21-1369388327-1626757837-1784127236-1126 UserPrincipalName :
gMSA の sAMAccountName を見てください。アカウント名の後ろに 「$」がついていることに注意してください。
次に、以下のコマンドレットで、gMSA のパスワードをリセットします。
PS C:\Windows\system32> Reset-ADServiceAccountPassword fsgmsa$
私の手元の環境では、リセットが完了するまでに 30 秒程度要しました。なので、なかなか終わらなくても安心してください。
リセット完了後、イベントログに以下のメッセージが表示されたらしめたものです。
イベントID 2946 発信者がグループ管理サービス アカウントのパスワードを正常に取得しました。
イベントID 2946
発信者がグループ管理サービス アカウントのパスワードを正常に取得しました。
AD FS も正常に起動することができました。
なぜ gMSA のパスワードが取得できない状態になってしまったのかは、現時点では判明しておりません。
この環境が仮想環境で、2週間程 起動していなかったことが影響している可能性があります。
gMSA のパスワードは、既定では 30日で自動更新されるのですが、それが影響しているようでもありません。この点は継続して調べてみたいと思います。
「いまでしょ」なんで言いませんよ。二倍返しされても、お・も・て・な・しされても言いません。
あぁー、大好きな Vedett を毎日飲んでも尿酸値が1ミリも上がらない強靭な内臓が欲しいものです。Buffaro さんあたりが作ってくれないでしょうか。15 万円までなら出してもよいと思っています。
あ、あと、もう1つ。どうしても欲しいものがありました。
MCP の合格証 です。
なんで欲しいかというと、私の MCP 合格証って、今は会長となってしまった Bill Gates の署名が入っているのです。で、先日現CEO Steve Ballmer が近い将来の引退を発表したため、急いで MCP に合格しないと彼の署名入り合格証を一生入手できないことに気付いたのです。これはまずいことになりました。
最後に MCP を受験したのは何年前だったか。。。はるか遠い昔のことです。
さて、MCP といえば翔泳社刊の「MCP 教科書シリーズ」通称「赤本」です。
今でも、書店に行けば赤本シリーズの前で、どこから挑戦すべきか悩み立ち尽くすエンジニアの方々がいらっしゃいます。私も経験あります。本当は「Windows Vista」の赤本を買おうと書店に赴いたもの��、赤本の棚を囲む数名の「好敵手」の前で、つい見栄(なのか?)を張って「ORACLE Master」を手に取ってしまう。。。なつかしいな。
そんな話はさておき。
問題は「赤本」を買ったからといって、合格が約束されたわけではないということ。
MCP にも学習のポイントってものがあります。忙しい仕事の合間を縫って受験するわけですから、できるだけ効率的に知識レベルを向上させたい。そう思うのが人情ってものです。それに結構高いですしね、赤本(翔泳社さん、ごめんなさい)。
そんな前向きな皆さんに朗報です!
MCP Windows Server2012編(試験番号:70-410)
または
MCP教科書 SQL Server 2012(試験番号:70-462)
を購入された方で、既定のフォームからお申込みされた先着100名の方を、当該赤本を教材とした MCP 対策セミナーにご招待します!
10月 5日 開催 Windows Server 2012 編
10月20日開催 SQL Server 2012 編
Steve Ballmer の署名入り合格証を手に入れましょう!
あまり知られていませんが、Microsoft Virtual Academy というサイトがあります。
オンラインのトレーニングサイトで、マイクロソフトがワールドワイドで展開しています。各コースを通過するとポイントが付与され、これによって世界ランキングに参加することができます。
ちなみに私は、現在国内週間ランキングトップです。2位のTakaiさん、3位の松本さん、ごめんなさい。
そんな MVA でWindosws Server 2012 や Hyper-V などさまざまなコンテンツが公開済みですが、新しく Office 365 コースが公開されました。
Office 365 の概要 - Produced by Office 365 コミュニティ(81 ポイント) http://www.microsoftvirtualacademy.com/training-courses/office-365-overview-jp#fbid=dpPu9t3JyHy
Office 365 Small Business の管理 - Produced by Office 365 コミュニティ(115ポイント) http://www.microsoftvirtualacademy.com/training-courses/office-365-small-business-management-jp#fbid=dpPu9t3JyHy
いずれも初級者用に作成してあり、いきなりテストを受講することもできます。ある程度馴れている方であれば、5分もあれば上記全コースを通過できるでしょう。馴れていない方も3分程度のビデオを見ていただければ、容易に必要な知識を得られます。
これらのコースは Facebook の Office 365 コミュニティの方々によって作成されました。
現在もメンバーによってテスト作成が進められています。
今後、続々と Office 365 コースが公開される予定ですので、楽しみにしていてください!
以前、以下の投稿をしました。
【BYOD】デバイス認証ができるようになった WS 2012 R2 ADFS -テスト手順書公開 http://blogs.technet.com/b/junichia/archive/2013/08/29/3593415.aspx
上記の手順書にそってセットアップしていただければ、新しい Widows Server 2012 R2 と Windows 8.1 によるデバイス認証(Workplace Join)の環境を構築することができます。
とはいえ、実際に動いてるところを見てからだなぁ~と思われる方も多いはず。
そこで、2013年9月18日(水) ANAクラウンプラザホテル 大阪で開催される ID&IT Management Conference 2013 にてWorkplace Join の実演を行います。
なかなか大阪で実施する機会が無いので、ぜひ上記イベントにご参加ください。
イベント自体は、タイトル通り、Identity Technologies に特化したもので、MSテクノロジー以外にも興味深いセッション満載です!
みなさまのご来場をお待ちしております~
既にご存知の方も多いと思いますが、Windows Server 2012 R2 に実装されている Active Directory Federation Service では、デバイス認証/認可が行えるようになりました。
でも Active Diretory に精通している方は、こう思うはずです。
「あれ?ドメイン参加するってことが、そもそもデバイス認証だよね?」
するどい!!おっしゃるとおりです。
実は、新しいデバイス認証機能は、ドメインに参加していないデバイスを対象にできるのです。
この機能を Workplace Join と言います。
Windows Server 2012 R2 の AD FS と、Windows 8.1 または iOS の組み合わせで実現可能な機能です。
Workplace Join を使用すると、ドメインに参加していないデバイス(Win8.1/iOS)を Active Directory に登録し、ドメイン内のリソースにアクセスする際にデバイスで認証することができます。つまり、登録されていないデバイスからのアクセスを拒否できるわけです。
Web Application Proxy(旧称 AD FS Proxy)と併用すれば、社外からのアクセスにも利用することができるため、BYOD シナリオの幅が広がります。
Workplace Join および Web Application Proxy をテストするには、
にある程度精通している必要があり、未経験の方にはshou難しいと思われます。
そこで、これらのテスト環境を Hyper-V 仮想マシン上で構築するための手順書を作成しました。
手順書を入手するには、以下のサイトから Windows Server 2012 R2 プレビュー版ダウンロード にユーザー登録してください。
ユーザー登録が完了すると、ダウンロードが始まると同時に、登録の際に使用した Microsoft アカウント(Windows Live ID)に以下のようなメールが届きます。黄色く塗りつぶしたところをクリックしていただくと、当該ドキュメントをダウンロードできます。
ぜひチャレンジしてください!
AD FS の基本的な勉強にも最適です。
マイクロソフトのオンライントレーニングサイト Microsoft Virtual Academy に公開されました。
公開されたのは以下の4コースです。
ふるって受講してください!!
Windows Server 2012 R2 Preview の提供が始まっていますが、みなさんもうお使いですか?
「インストールするマシンが無くてだめだよ~」という方も決して少なくないと思いますが、そんな皆さんに朗報です。
Windows Azure 評価版を使用すれば、30日間(または 17000円 に達するまで)無償で使用することができます。
手順は簡単です。
以下のページから「Windows Server 2012 R2 Datacenter Preview on Windows Azure」を選択して、評価版にサインアップしてください!
http://technet.microsoft.com/ja-jp/evalcenter/dn205286
なお、無償評価版は1つの Microsoft アカウントあたり1回だけですのでご注意ください。
久しぶりに Windows Update をスクリプトから実行しようかなぁと思って PowerShell のコマンドレットを探していたら、標準では提供されていないんですねぇ。全く気づいておりませんでした。
となると、VBScript のように Microsoft.Update.Session を呼び出すしかないものかと思っていると、なんと便利なモジュールが提供されていました。
Windows Update PowerShell Module http://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc
さっそく使ってみましょう。
まずはダウンロードして ZIP ファイルを開いてみてください。PSWindowsUpdate フォルダが格納されているはずです。この中にこのモジュールを構成するスクリプト群が格納されています。
これらのファイルは「インターネットゾーンからダウンロードしたファイル」なので、必ず「ブロックの解除」を実行しておきましょう。でないと実行できません。
ブロック解除が完了したら、PSWindowsUpdate フォルダを、PowerShell のモジュール用フォルダに保存します。
モジュール用フォルダの場所を確認するには、以下のように PowerShell コンソールから環境変数 PSModulePath を確認します。
PS C:\windows\system32> $env:PSModulePath C:\Users\junichia\Documents\WindowsPowerShell\Modules;C:\windows\system32\WindowsPowerSh ell\v1.0\Modules\;C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\
(参考)Windows PowerShell: Windows PowerShell のカスタム ツールをパッケージ化して配布する
ここでは3つのパスが指定されています。
以下のパスはユーザーの個人的なモジュールパスで、今回はモジュールを追加するのでこの配下に PSWindowsUpdate フォルダを移動してください。なお、既定ではこのパスは存在しないので、自分で作ってください。
以下のパスはシステムモジュール用のパスです。
以下は Windows Azure 用コマンドレットをインストールしたときに作成されたパスでしょう。既定では存在しませんので、無くても不安にならないでください。
PSWindowsUpdate フォルダを移動したら、コンソールから Import しましょう。
ブロック解除が行われていれば、特にエラーは出力されないはずです。
次に、コマンドレットの一覧を見てみましょう。以下の用の出力されたら問題ありません。
CommandType Name ModuleName ----------- ---- ---------- Function Add-WUOfflineSync pswindowsupdate Function Get-WUHistory pswindowsupdate Function Get-WUInstall pswindowsupdate Function Get-WUInstallerStatus pswindowsupdate Function Get-WUList pswindowsupdate Function Get-WURebootStatus pswindowsupdate Function Get-WUServiceManager pswindowsupdate Function Get-WUUninstall pswindowsupdate Function Hide-WUUpdate pswindowsupdate Function Remove-WUOfflineSync pswindowsupdate Function Test-ElevatedShell pswindowsupdate
それぞれのコマンドレットの用途は、なんとなーくわかりますよね。
具体的な使い方は次の投稿で。
ちょっと面倒な連載が続いたので、今回は遊びます。
「マイクロソフトが大好きで、自ら MS 人事マニアであると自負されている方」向けに問題です。
この方は誰でしょう?
わかりました?
↓
答えは、Steve Guggenheimer(スティーブ グッゲンハイマー)です。
え?それは誰かって?群馬県とは関係ありません。
私が所属している部門が「日本マイクロソフト株式会社 デベロッパー&プラットフォーム エバンジェリズム」なのですが、その親玉である Microsoft Corporation Developer & Platform Evangelism の親分です。我々から見れば、とーっても偉い人なわけです。はい。
でもって、我々エバンジェリストの最上級をあらわす、Chief Evangelist でもあります。
世界中のさまざまなカンファレンスのキーノートに登壇しているので、ご覧になったことがある方も多いかもしれませんし、6月の BUILD に参加される方は、そこでお目にかかることになるでしょう。
そんな彼が日本にやってきて、登壇する日があります。
それも、BUILD はかなり高価なカンファレンスですが、これは無償です。
Chief Evangelist のべしゃりってやつを聴いてやろうじゃないか!という方、是非とも以下のイベントにご参加ください!
6/3(mon) 13:00 ~ Microsoft Innovation Meetup! @秋葉原 です。