フィールドSEあがりの安納です - Site Home - TechNet Blogs

フィールドSEあがりの安納です

Microsoft Evangelist -- Junichi Anno

フィールドSEあがりの安納です

  • VMWare / Amazon AWS から HyperV / Azure への移行について解説

    圧倒的なシェアを誇るハイパーバイザーでありプライベートクラウドのプラットフォーム、VMWare。

    圧倒的なシェアを誇るパブリッククラウド プラットフォーム、Amazon AWS。

    VMWare も AWS も業界を盛り上げる同志であるとともに、プラットフォームの競合ベンダーでもあります。いうまでもなく。

    そして、両社いずれもそれぞれの分野のリーダーです。マイクロソフトはここ数年それを追い続けてきました。

    が、そろそろどうでしょうかね。魔導士か戦士か、はたまた旅芸人かの違いはあるにせよ、対等に戦えるステージに立てたなと感じています。

    我々のチャーム(注:相手を魅了する呪文、レベルが低いと効きにくい)も、VMWare や AWS を利用中の皆様に効果を与えられるようになったはずです。

    そこで、どうでしょう?ちょっとだけ我々のパーティーに加わってみませんか?

    といっても現在の環境から移行できることがわからないと、試したくもなりませんね。

    ということで、以下のようなコンテンツをご用意しました。

    ベースは英語なのですが、ビデオのほうにはきちんと日本語テロップが表示されます。

    ダウンロードも可能ですので、是非通勤時間にでも見てください。

     

     

    ここをご理解いただけると、以下のような移行パスと、移行後の素敵な世界が可能になります。

    clip_image001

  • 2014年の Active Directory 利用シナリオを総復習しておきましょう!

    年末ですね。早いもんです。そりゃートシもとりますし、割と真剣に国の行く末を考えたりもするようになります。

    行動原理の90%が食欲で、半ズボンこそが男のたった一つの勲章だって信じていたアノ頃が懐かしいです。

    トシをとったといえば、Active Directory もそうです。2000 年に誕生し、いまじゃなんと 14 歳!

    コンピューターは人間の 20 倍速くトシをとる(当社比)と言われてますから、人間で言えば 280 歳です!AD280年!

    そりゃー進化もしますし、魔法のような機能だって使えるようになります。

    ご存知のように、2015 年には新しい Active Directory が登場します。

    さらに、クラウドには Azure Active Directory という全く新しいアイデンティティ・プロバイダーなどというキザなアイツが誕生しました。

    ちなみに、クラウドは人間の30倍速く歳をとると言われてます。

    今、現状を整理しておかないと、もう進化に追いつけなくなります。今が最後のチャンスなのです。

    ということで、これまでの歴史を復習するために最適なコンテンツをご紹介しますので、是非除夜の鐘をきく前に一通り復習しておきましょう。

     

    クラウド時代の Active Directory 次の一手シリーズ

    • 第 1 回 Active Directory の位置づけ
    http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series1
    • 第 2 回 Active Directory ドメイン サービスの新しい役割
    http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series2
    • 第 3 回 Active Directory フェデレーション サービスの役割 解説編
    http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series3
    • 第 4 回 Active Directory フェデレーション サービスの役割 構築編
    http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series4
    • 第 5 回 認証のためのプロキシ Web Application Proxy
    http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series5
    • 第 6 回 Microsoft Azure Active Directory とは
    http://www.microsoftvirtualacademy.com/training-courses/cloud-activedirectory-onlineseminar-series6

    上記はいずれも Microsoft Virtual Academy(MVA)にて公開しています。

    2015年1月には、MVAメンバー向けに Azure Active Directory に重点を置いた続編を公開する予定ですので、是非いまのうちに上記コンテンツをクリアしておいてください!

    2015年3月までには Active Directory の基礎の基礎からステップバイステップで学習するためのコンテンツも公開予定です。

    新人アドミンの方にも優しく学習いただけるコンテンツを準備中です。

    ※ちょっと自分の首を絞めているような気がする。。。。

  • 【IaaS】 Active Directory on IaaS の構築手順書を公開しました

    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

    image

    この構築手順書では、以下の環境を作成します。

    クラウドサービスとか、可用性セットとか、負荷分散セットとか、Azure なコツがちょっとだけ必要なので、一から勉強するよりかはこの手順書でサクッと評価してもらったほうが手っ取り早いです。

    オンプレミスには何も必要ありません。すべて、Microsfot Azure 無償評価版の範囲内で構築できます。

  • 【de:code】インフラストラクチャー アーキテクト向けのセッション 11選+アルファ

    5月29日ー30日、ザ・プリンスパークタワー東京にて de:code(デコード)という”有償”カンファレンスが開催されます。もちろんマイクロソフト主催のカンファレンスです。参加費 \120,000(税抜き)と少しお高いのですが、各セッション1万円以上の価値をご提供しますので、是非ご参加ください。4月28日までのお申込であれば早期割引対象となります。

    image

    TechEd @Japan の復活を望む声が多いことは我々も認識しておるのですが、それ以上にマイクロソフトの方向性や今後10年を見据えた最新テクノロジーの解説を望む声も多く寄せられています。TechEd がそのタイトル通り Leaning を主体としたイベントである一方で、de:code は近未来を見据えた内容を盛り込んだカンファレンスであるとご理解ください。

    そういう意味では、毎年アメリカで開催される Build Developer Conference に近く、それを日本市場向けにアレンジしたものであると言えます。

    タイトルから「完全に開発者向け」という印象が強いことは否めませんが、実はそんなことはありません(と、インフラ担当エバンジェリストの私が密かに保証します)。インフラエンジニアもターゲットとしたセッション構成になっています。ただし!! TechEd のようにお勉強する場では無いのでオペレーターレベルのセッションは皆無です。これは断言できます。インフラエンジニアの中でも、開発案件など広範にわたってインフラを検討する インフラストラクチャー アーキテクト をターゲットとしています。それだけにセッションの難易度は高く設定されています。上司の方が新人 SE さんに「おまえ勉強してこい」という場でないことは確かです。それなりの経験と未来志向を持った方でないと、2日間を無駄にしてしまう可能性があります。私は、このカンファレンスの内容を受け、インフラ アーキテクトのみなさまに今後の IT 設計や提案の方向性を見据えたいただきたいと考えています。

    セッションの内容は既に de:code のサイトで公開されていますが、その中でも特にインフラ アーキテクトの方々に見ていただきたいセッションをご紹介します。時間割の都合上、全てを参照できることを保証するものではありませんので、その点はご了承くださいませ。

    • AR-001 Cloud First 時代: IT Architect は何を目指し、何を実現するのか(板倉 真由美)
      私の上司によるセッションです。アーキテクトである皆さんが、このイベントを通して扱われるテクノロジーの基礎知識について解説するセッションです。「そんなことは言われなくてもわかっている」という方は別のセッションを選択しても良いでしょう。
    • AR-004 Building Big : スケーラブルでサービス継続性の高いクラウドアプリ設計の基礎(野村 一行)
      インフラエンジニアが最も恐れる事象の一つ「ボトルネック」を解消するには、Azureのどういった特性を理解し活用すべきかについて解説するセッションです。単なる機能紹介ではなく、「設計」を中心に解説してくれます。
    • AR-009 クラウドアプリケーション設計の王道:デザインパターン 20 連発! 其の一 パフォーマンスとスケーラビリティ編(成本 正史)
    • AR-010 クラウドアプリケーション設計の王道:デザインパターン 20 連発! 其の二 回復性と管理とセキュリティ編(成本 正史)
      マイクロソフト本社でクラウドの設計パターンの開発を主担当としている成本氏のセッションです。この2つは見逃したいくないですね。アーキテクトの方にとって、デザインパターンは飯の種です。20連発を見逃さないでください。ちなみに、2セッションで20連発のようです。
    • SP-001 ~ MSIT の裏側に迫る ~ マイクロソフトのビジネスを支える IT ソリューション(澤 円)
      インフラ アーキテクトの方には、その運用を見据えた提案および設計力が必要です。このセッションでは、マイクロソフト社内を支えるIT(MSIT)を事例に、開発ポリシーおよび運用手法ついて解説してくれます。スピーカーは各種メディアでも有名な澤氏です。
    • TL-008 Azure DevOps の未来 ~ 次世代 Azure ポータルと Visual Studio Online で実現するクラウド アプリのライフサイクル管理 ~(佐藤 直生)
      DevOps って言葉、正直あまり好きじゃありませんが、このセッションはアプリ開発~展開~監視のライフサイクルの考え方を大きく変えてくれるはずです。
    • DE-002 Windows ストアアプリにおけるセンサー活用 ~ 強化されたセンサー機能を使いこなす (太田 寛)
      ナニかお客様の気を引く新しいネタを探していませんか?それがここにあります。他社とは違ったキャッチーな提案のネタをここで拾ってください。
    • SV-017 Microsoft Azure 仮想マシンにおけるデータベース可用性の実践 ~ SQL Server、MySQL、Oracle 多田 典史/浅見 城輝
      IaaS の難点は、そこで動くアプリケーションプラットフォームの可用性です。WEBアプリならば簡単な可用性向上ですが、データベースサービスとどう設計するのが王道なのか悩ましいところです。このセッションでは、そんな疑問に答えてくれます。浅見氏は
      株式会社 pnop の代表です。きっと多くの知られざる事例をお持ちのハズ!
    • AR-008 15年使うためのハイブリッド認証基盤の設計と実装 ~ Side A : 堅牢なオンプレミス セキュリティ ドメイン編 ~ 安納 順一
    • SV-003 15年使うためのハイブリッド認証基盤の設計と実装 ~ Side B : Microsoft Azure Active Directory によるクラウド アプリ連携編 ~安納 順一
      これら2つのセッションは私が担当します。今後15年で、オンプレミスの環境の多くがパブリッククラウドへと移行していくでしょう。その過程で変わってはならないのは、セキュリティ基盤によるインフラスラクチャーおよびアプリケーション堅牢性です。当面は、その中心はオンプレミスでしょう。しかし、徐々にパブリッククラウド上のIdPへと重みは移行していくはずです。その過程に壁を作らずシームレスに通過するには、オンプレミスの認証基盤をどのように設計し、そしてそのうえで動作するアプリケーションをどのように実装すべきかについて2コマにわたって解説します。また、ニーズに答える認証要素の拡張方法についても具体的に解説する予定です。
    • SV-008 ソチオリンピックで振り返る、Media Services での配信サービス開発 畠山 大有
      メディア配信の設計と開発ってわけわからん。。。そんな認識にとらわれているアーキテクトは多いハズです。でも大丈夫です。畠山氏がAzureを使ったメディア配信サービスの設計と開発手法について、ソチオリンピックを事例にきっちり解説してくれます。
    • SV-016 Effective Big Compute ~ Azure HDInsightとHPC Pack でスケーラブルなアプリケーションを開発しよう!佐々木 邦暢
      「クラウドってスケーラブルだけど単体性能はいまいちだよなぁ」とお嘆きのアーキテクトの方は、是非このセッションで「スパコンとしてのAzureの活用法」をご理解ください。提案内容ががらっと変わってくるはずです。
    • AR-005 コネクテッドデバイスを支える Azure 上のシステムの構築 多田 典史
      アーキテクトの方にとっては新ネタ収集系のセッションです。コネクテッドデバイスとはインターネットと接続された車載デバイスやホームデバイスなどのことです。こうしたデバイスと大量にかつ同時に接続して処理を行うクラウドサービスとは、いったいどのように設計すればよいのか。そんな内容を実プロジェクトから得たノウハウをもとに解説してくれます。
    • AR-007 Azure Pack で社内に Azure 環境を持ち込もう!高添 修
      インフラ アーキテクトの中には、「またパブリックウラウドの提案は厳しいなぁ」とお考えの方も多いでしょう。でも、クラウドに魅力は感じていることに間違いはない。ならば簡単です。社内インフラをクラウド化してしまいましょう。その便利さに気付は、パブリッククラウドへの移行も真剣に考えるようになるはずです。
    • SV-011 Microsoft Azure インターナル ~ ファブリック コントローラーを理解して、正しい設計を! 佐藤 直生
      アーキテクトの方にとって「内部の動き」は設計のための重要な情報です。ファブリックコントローラーは、Azureの中核であり、こいつを理解すると自信をもって設計を進めることができます。担当するのは、
      元Javaのエバンジェリスト、佐藤直生氏です。

  • インストールしないで検証できる!Windows Server 2012 R2 バーチャルラボ

    Windows Server 2012 R2 のあの画面どうだったかな?あの機能ってどこまでできたっけ?

    そんなことを思いながらも、「インストールめんどくせー」ってことありますよね。

    評価版をダウンロードするのも時間かかるし。

    そんな方のために、バーチャルラボが公開されています。

    ちょっとわかりずらいところにあるので、以下でナビゲートします。

    まずは以下のページに移動。

     

    1. 評価版のダウンロード:Windows Server 2012 R2
      http://technet.microsoft.com/ja-jp/evalcenter/dn205286.aspx
    2. 以下のプルダウンから「Windows Server 2012 R2 データセンター バーチャルラボ」を選択して、「今すぐダウンロードする」をクリック
      image
    3. プロファイルセンターに移動するので、地域を「日本」に変更して「次へ」
      image
    4. 以下のページに移動したら、お好きなラボをクリックしてください。
      imageimage

     

    実を言えば、私も、ちょっとした画面ショットを撮りたいときには愛用していたりします。。。楽なので。。。

  • 【MVA 解説編】System Center と Windows Azure を使用したハイブリッド クラウドへの移行(01 監視、管理、および運用)

    ※ この投稿は Windows Azure Advent Calender に参加しています。

    System Center は言うまでもなくマイクロソフトの運用管理製品です。最新版は System Center 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 の機能を使用しますか。

    1. Windows の管理パック
    2. ネットワーク デバイスの監視
    3. Hyper-V の管理パック
    4. .NET と JEE のアプリケーション パフォーマンス監視

    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 Applications
    http://technet.microsoft.com/en-us/library/hh212856.aspx

    Monitoring Java Applications
    http://technet.microsoft.com/ja-jp/library/hh212856.aspx

    もちろん、アプリケーションが Windows Azure に展開されていても監視可能です。

    Q) System Center Operations Manager を使用して、クラウド ファブリックを監視する必要があります。次のうちどの Operations Manager の機能を使用しますか。

    1. ネットワーク デバイスの監視
    2. レポート ビューとダッシュボード ビュー
    3. 通知配信登録
    4. Windows、Hyper-V、および Virtual Machine Manager の管理パック

    これは特に迷うことはないと思います。ファブリックを監視するわけですから、物理レイヤ、仮想レイヤを統合的に監視できなければなりません。

    よって、4. が正解です。

    Oprations Manager には「管理パック」と呼ばれる監視用のアドインが用意されています。

    管理パックは製品や機能ごとに用意されており、この問の場合にはOS用の管理パック、物理レイヤを監視するHyper-V管理パック、仮想レイヤを監視するVMM管理パックを使用します。

    Fabric Monitoring
    http://technet.microsoft.com/en-us/library/dn249700.aspx

    もちろん、Windows Azure を監視するための管理パックも用意されています。

    System Center Management Pack for Windows Azure
    http://www.microsoft.com/en-us/download/details.aspx?id=38414

    Q) System Center コンポーネントを使用して、クラウドを監視する必要があります。既定の監視対象は次のうちどれですか (2 つ選択してください)。

    1. SQL Server のファイル ストレージ
    2. クラウド ファブリック
    3. サービス正常性
    4. Microsoft Exchange インフォメーション ストア

    この問題はあまり難しく考えないでください。

    既定で監視できるのは、クラウド ファブリックとその中に展開されている各サービスの正常性です。

    SQL Server や Microsoft Exchange を監視するには、別途管理パックを追加する必要があります。

    Q)チャージバック レポートを実装する予定です。必要な System Center コンポーネントは次のうちどれですか (2 つ選択してください)。

    1. Service Manager
    2. Configuration Manager
    3. Orchestrator
    4. Operations Manager CI コネクタ

    ここでいうチャージバックとは、クレジットカードの払い戻しプロセスのことではありません。顧客ごとのクラウドリソースの使用状況を計測することを意味しています。

    つまり、チャージバックレポートとは、クラウド使用量に関するレポートのことでです。

    チャージバック レポートについて
    http://technet.microsoft.com/ja-jp/library/jj614457.aspx

    チャージバックレポートを作成するための System Center コンポーネントは Service Manager なのですが、各リソースの使用量を計測するために Operations Manager と連携する必要があります。この時に使用するのが、Operations Manager CI コネクタです。CI は Configuration Item のことです。

    Q)チャージバック レポートのインストールモジュールに含まれているコンポーネントは次のうちどれですか (3 つ選択してください)。

    1. 管理パック ファイル
    2. XML 構成ファイル
    3. Web.config
    4. Windows PowerShell のインストール スクリプト
    5. Excel サンプル レポート

    Service Manager のチャージバック レポートは、管理パック ファイル、管理パック ファイルをインポートするための Windows PowerShell スクリプト、Microsoft Excel サンプル レポートなど、さまざまなファイルで構成されています。 これは、覚えるしかないですね。。。

    チャージバック レポートをインストールする方法
    http://technet.microsoft.com/ja-jp/library/jj614406.aspx

    Q) 価格シートを実装する予定です。価格の対象となるプライベート クラウド オブジェクトを見つける手段は次のうちどれですか。

    1. Service Manager の手動登録
    2. Configuration Manager による探索
    3. Operations Manager CI コネクタによる探索
    4. Orchestrator の同期

    チャージバックレポートを作成するには、各リソースの価格が設定されている必要があります。

    その価格のリストを「価格シート」といいます。別名 レートカードとも言います。

    もちろん、顧客のSLAによって価格も変わりますから、SLAごとに異なる価格シートを用意することもできます。

    答えはもちろん、Operations Manager CI コネクタです。これを使用して、クラウド内のオブジェクトを探索します。

    チャージバック レポートについて
    http://technet.microsoft.com/ja-jp/library/jj614457.aspx

    価格シートを作成または変更する方法
    http://technet.microsoft.com/ja-jp/library/jj614404.aspx

    Q) クラウド オブジェクトと価格シートを関連付ける必要があります。関連付けの前に必要な作業は次のうちどれですか。

    1. 価格シートを保存してエクスポートする
    2. 価格シートを作成して公開する
    3. オブジェクトの探索を実行する
    4. Orchestrator をインストールする

    これは、実際にオペレーションをしたことないと難しいですが、ちょっと考えるとわかるかもです。

    価格シートとは、「こういうオブジェクトはこのくらいの価格」というポリシーです。

    実際のクラウドオブジェクトを値付けするには、事前に価格シートが作成されていなければいけないことは、容易に想像がつくと思います。

    富士山頂にある自動販売機(クラウドオブジェクト)に、「コーラ 100円」という価格シートと、「コーラ 200円」という価格シートのどちらを適用するか決定するには、事前に「価格シート」が存在しなければならいですよね。

    詳細な手順は以下を参照してください。

    価格シートを作成または変更する方法
    http://technet.microsoft.com/ja-jp/library/jj614404.aspx

    Q) 展開したクラウドの正常性と容量に関するレポートを確認する必要があります。どの System Center コンポーネントを使用しますか。

    1. Operations Manager
    2. Windows Intune
    3. System Center Advisor
    4. Service Manager

    これは悩むと思うのですが、レポートを確認するのに最適なのは Service Manager です。Operations Manager はダッシュボードで個々のコンポーネントの監視を行ったりレポートを参照することは可能なのですが、「クラウドの正常性」という大きなくくりで全体の正常性をレポートするのであれば、CMDB を持つ Service Manager が最適です。

    Q) クラウドの可用性とパフォーマンスに関する値を監視する必要があります。どの System Center コンポーネントを使用しますか。

    1. Operations Manager
    2. Windows Intune
    3. System Center Advisor
    4. Service Manager

    パフォーマンスに関する具体的な値を監視するのであれば、Operations Manager です。

    次回は、「02 | パブリック クラウドへの System Center の接続」について解説します。

  • 【PowerShell】MVA対策講座 Windows PowerShell 3.0 を基礎から学ぶ ‐ Part4 高度な関数 編

    正直言って、今回は難しいです。どこから説明してよいかわからないくらいです。。。orz
    Microsoft Virtual Academy で公開されているオンライントレーニングコース「PowerShell 3.0 を使用した高度なツールとスクリプト」のテスト解説シリーズ、第4回目です。

    テストは以下から受けられます!

    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コンソールで以下のように入力する必要があります。

    image

    このスクリプトを再度呼び出したいときや、別のスクリプトから呼び出したいときにも、同様にスクリプト hello.ps1 ごと呼び出す必要があります。

    もちろんそれでもよいのですが、もうすこし使い勝手を良くするには、これを関数化します。

    関数化するには、以下のように Function ブロックで括ります。

    Function Echo-Something {
        param($a="Hello!")
        Write-Output $a
        }

    同じファイル名 hello.ps1 で保存し、以下のように ドット ソース モード(Part3 参照)で実行すれば、スクリプト名を指定することなく、「Echo-Something」という名前で呼び出すことが可能です。

    image 

    ちなみに、ドット ソース でスクリプトを実行したあと、以下のように Function: ドライブに移動してみてください。Dir コマンドを使用すると、Echo-Somethig 関数が登録されていることが確認できます。

    image

    じゃ、Echo-Something 関数を呼び出すために毎回ドット ソース モードでスクリプトを呼び出す必要があるのかといえば、そうではありません。

    関数を永続化する方法がいくつかあります。

    もっとも簡単なのは、PowerShell のプロファイルスクリプトに 「 . c:\tmp\hello.ps1」を記述しておく方法です。

    PowerShell コンソールが起動するたびに実行されるので、毎回 hello.ps1 を実行する手間が省けます。

    話が複雑になるので要点だけ書くと、プロファイル用スクリプト(の一つ)は以下の通りです。

    C:\Users\<ユーザー名>\Documents\WindowsPowerShell\profile.ps1

    プロファイルについては改めて別の投稿で解説します。

    (参考)Understanding and Using PowerShell Profiles
    http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/04/understanding-and-using-powershell-profiles.aspx

    ってことで、関数については理解していただけましたでしょうか?

     

    では、解説をはじめましょう。 あー憂鬱だ。。。

    PowerShell コマンドレットの構造はどれですか

    1. コマンド ライン – ステートメント
    2. コマンド –メッセージ
    3. 名詞 - 動詞
    4. 動詞 - 名詞

    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 とでもすれば、他の方がこのコマンドを呼び出すときにも便利です。

    高度な関数の用途はどれですか

    1. コンパイル済みコマンドレットを作成する
    2. コマンドレットと同様に動作する、再利用可能なスクリプトを作成する
    3. 常駐型のメモリ内呼び出しを行う
    4. モジュールの作成を自動化する

    「高度な関数」の「高度な」の意味が問われています。

    答えは「2.コマンドレットと同様に動作する、再利用可能なスクリプトを作成する」ことです。

    スクリプトでコマンドレット(のようなもの)を定義するという意味で、スクリプトコマンドレットと呼ばれることもあります。

    では「コマンドレットと同様に」とはどういう意味でしょう?

    単に「コンソールからコマンドレットのように呼び出せる」ということではありません。これだけならば、VBSript だって似たようなことができなくもありません。

    バイナリで作成されたコマンドレットにはPowerShell特有のオプションが実装されています。

    例えば、-confirm オプションがその1つです。

    以下の例では Remove-Item コマンドレットを使用して sample フォルダ配下を削除しようとしていますが、-Confirm オプション指定することで、削除の確認メッセージが表示できます。

    image

    (参考)about_Functions_CmdletBindingAttribute
    http://technet.microsoft.com/en-us/library/hh847872.aspx

    ただの関数であれば、このような機能を実装するには関数内に別途スクリプトを記述する必要がありますが、「コマンドレット」と同様に動作させることで、コマンドレットが本来持っている機能を関数にも実装できるのです。じゃ、関数を高度化するにはどうすればよいかについては後述します。

    PowerShell ISE でスクリプト テンプレートを簡単に呼び出すキーボード コマンドはどれですか

    1. Ctrl+Z
    2. Ctrl+I
    3. Ctrl+J
    4. Ctrl+T

    正直、私はあまり使わないのですが、PowerShell ISE(統合スクリプト環境。要はインテリジェントなエディターです)を使用すると、事前に定義されている構文テンプレートを呼び出すことができます。

    そのときに使用するショートカットが Ctrl + J です。Ctrl +J を押すと、以下のような画面が表示されるので、ここから使いたいテンプレートを選択します。

    image

    上記の中に「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. "<!--" と "-->" でブロックを囲む
    2. "\*" と "*/" でブロックを囲む
    3. "<#" と "#>" でブロックを囲む
    4. "<comment>" と "</comment>" でブロックを囲む

    前問のテンプレートにも書かれている通り、コメントは <# ~ #> で括ります。

    1行だけならば、先頭に # をつけるだけでOKです。

    正誤問題: PowerShell ISE には、関数やスクリプトの作成に推奨されるプラクティスやスタイルに従ったテンプレートが用意されている

    既に書きましたね。もちろん○です。

    正誤問題: 高度な関数は、C# と .NET Framework を使用してのみ作成できる

    これも大丈夫ですよね。×です。

    C#やその他の言語を使用すればバイナリーなコマンドレットを作成することができますが、スクリプトだけでもコマンドレットのように扱える「高度な」関数を作成することができます。

    関数における CmdletBinding 属性の機能は何ですか

    1. 任意の実行ポリシー コンテキストで関数を実行する
    2. ドット コンテキストで関数を読み込む
    3. 関数の動作をコンパイル済みコマンドレットのようにする
    4. 関数を管理者コンテキストに昇格する

    数問前で「高度な関数」とは「コマンドレットのように動作する関数」であると書きましたが、それを実現しているのが関数内に定義する「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 オプションを有効にするための設定です。

    これにより、関数の実行時に以下のように確認メッセージを表示することができます。

    image

    DefaultParameterSetName はとても使い勝手の良い機能で、複数の引数パターンのうち既定のパターンをどれにするか指定できます。

    Paramブロックの中を見てください。ParameterSetName という属性が定義されていることがわかります。これは、引数がどのパターンに属するのかを示したものです。

    今回は DefaultParameterSetName = ”Set2” と指定しているので、引数を何も指定しなければ以下のように パターン Set2 を使うものとして、値を聞いてくれます。

    image

    このほか、CmdletBinding を定義するだけで以下の共通オプションが使えるようになります。これらにより、デバッグに便利な Write-Debug コマンドや Write-Verbose コマンドも使えるようになるので、関数を定義するときには CmdletBinding を定義しておくことをお勧めします。

    • -Verbose

    • -Debug

    • -WarningAction

    • -WarningVariable

    • -ErrorAction

    • -ErrorVariable

    • -OutVariable

    • -OutBuffer

    (参考)Build Your Own PowerShell Cmdlet: Part 4 of 9
    http://blogs.technet.com/b/heyscriptingguy/archive/2012/10/02/build-your-own-powershell-cmdlet-part-4-of-9.aspx

    関数における Process ブロックの目的は何ですか

    1. 受け取った値を反復処理するたびに実行する
    2. パイプライン入力に関係なく、1 回だけ実行する
    3. 文字列以外の値が入力された場合のみブロックを実行する
    4. 文字列値が入力された場合のみブロックを実行する

    答えは「1. 受け取った値を反復処理するたびに実行する」なのですが、唐突に「反復処理」と言われても意味が分からないですよね。

    「反復処理」とは、「受け取った引数の数」だけ実行されるということです。「引数の数」というのは Param ブロックで定義した引数の数ではありません。

    Windows PowerShell ではパイプを使って、前のコマンドの結果をオブジェクトとして繰り返し受け取ることができます。

    例えば Get-Service というコマンドレットがあります。このコマンドレットの出力結果には、システム上の個々のサービスの情報が格納されています。以下は、Get-Service コマンドレットの出力結果例です。

    image

    これを踏まえ、以下のようなコマンドを実行したとします。

    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 プロパティを表示しています。

    以下のようにして、この関数を実行してみます。

    image

    結果は一目瞭然ですね。

    Begin ブロック内が一番最初に1回だけ実行されます。

    その後、パイプラインから渡された結果が繰り返し Process ブロックに渡されて処理されています。

    最後に End ブロックが1回だけ実行されて、処理は終了します。

    関数における Begin ブロックの目的は何ですか

    1. パラメーターを受け取る
    2. 変数を初期化する
    3. Process ブロックと同じ回数実行する
    4. Process ブロックの実行をスキップする

    前問の結果から、もうわかりますよね。答えは「2. 変数を初期化する」です。

    上の例では何もしていませんが、本当はここで引数の値を確認したり、変数の初期値を設定したりします。

    関数における End ブロックの目的は何ですか

    1. Process ブロックの実行をスキップする
    2. Process ブロックの実行を制限する
    3. クリーンアップ タスクを実行する
    4. パラメーターの使用を制限する

    これも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 を実行すると、以下のように入力を求められます。

    image

    Position=1 というのは、引数として受け取る順番を意味しています。つまり「1番目の引数は Param1 用である」ということが宣言されています。

    一方で、Param2 には Position が設定されていないため、引数は必ず名前付きで指定する必要があります。

    つまり以下のように。

    image

    [Switch] として定義されている3つ目の引数 $EchoString はとても素敵な機能です。

    以下のように、関数のパラメタとして指定された場合には、$EchoString には $True が格納されます。指定されない場合には $False が格納されます。つまり、この値の中身を判断することで、処理の���ン/オフを切り替えられるわけです。

    image

    詳しくはまた別の機会に。

    (参考)Windows PowerShell: パラメーターを定義する
    http://technet.microsoft.com/ja-jp/magazine/jj554301.aspx

  • 【PowerShell】MVA対策講座 Windows PowerShell 3.0 を基礎から学ぶ ‐ Part3 単純なスクリプトと関数 編

    Microsoft Virtual Academy で公開されているオンライントレーニングコース「PowerShell 3.0 を使用した高度なツールとスクリプト」のテスト解説シリーズ、第3回目です。

    腕に自信のある方は、まずはテストを受けてみてくださいね!

    通過できない場合には、こちらの解説講座に戻ってきてください。

    Microsoft Virtual Academy - PowerShell 3.0 を使用した高度なツールとスクリプト
    http://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId

    前回までの投稿は以下より。

    今回は PowerShell の「単純なスクリプトと関数」について解説します。

    是非とも満点でテストを通過してください!

     

    PowerShell スクリプトを作成する理由は何ですか

    1. 自動化のため
    2. 互換性のため
    3. PowerShell v2 を操作できるようにするため
    4. .NET Framework の機能を使用するため

    うーん、なんか、いろいろ考えすぎてしまいますね。でもここはシンプルに「自動化のため」と考えましょう。

    MCPもそうですが、マイクロソフト本社が作成するこの手の問題は「マイクロソフトの意図が理解できているかどうか」を問うものが多いです。「スクリプト」に込められた第一の意図は、やはり「自動化」なんですね。

    PowerShell スクリプトを作成するには、どのツールを使用しますか

    1. PowerShell PowerTools
    2. Visual Studio 2012
    3. Windows PowerShell ISE
    4. Windows PowerShell Editor

    ここは迷わず 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 コンポーネントの種類は何ですか

    1. モジュール
    2. スナップイン
    3. 関数
    4. 変数

    これもわかりずらい問題ですね。。。

    そもそも「スクリプトのパラメーター化」って言い回しが難解です。英語版では「Parameterize」と書かれていますので、まぁ、日本語としては間違いではないのですが。。。

    何を言いたいかというと、「スクリプトを汎用化する際には、値をハードコードするのではなくパラメタ化したほうがよいわけですが、その際使用するのは何ですか?」という問いです。

    答えは「変数」ですが、ちょっと意図が分かりずらいですね。

    例えば、以下のようなスクリプトがあったとしましょう。

    image

    これだと、値がスクリプトに埋め込まれているので、処理を変更するには毎回スクリプトを編集する必要があります。

    これを以下のように「Param」で囲んであげることで、変数をスクリプトのパラメタ(引数)として扱うことができます。

    image

    このことを「パラメタ化」と言っているのですね。

    PowerShell スクリプトに使用するファイル拡張子は何ですか

    1. .vbs
    2. .cs
    3. .psm1
    4. .ps1

    これについては解説は必要ないですね。4. ps1 が正解です。

    .vbs は言うまでもなく VBScript。.cs は C# で書かれたソースコードが保存されるファイルの拡張子です。

    .psm1 については知らない方もいらっしゃるかもしれませんが、スクリプトをモジュール化する際に使用する拡張子です。

    (参考)Windows PowerShell: スクリプトを簡単に共有できるようになりました
    http://technet.microsoft.com/ja-jp/magazine/ff625835.aspx

    パラメーターを受け取るためにスクリプトに追加する必要があるブロックの種類は何ですか

    1. Comment ブロック
    2. Script ブロック
    3. Param ブロック
    4. Function ブロック

    パラメーターとは、ここではスクリプトの引数を意味しています。

    スクリプト内で引数を受け取るには、以下のように Param ブロックを使用します。

    image

    Comment ブロックとは、以下のように複数行にわたるコメントを記述する際に使用します。

    <# 
    This is
    a
    block comment
    #>

    Scriptブロック とは、その中に書かれたスクリプトを実行する際に使用するのですが、例えば以下のようにリモートコンピューター上で実行したいコマンドを記載するのに使用します。

    Invoke-Command -ComputerName RemotePC -ScriptBlock{ Restart-Computer }

    Functionブロックは、ある処理を関数化する際に使用します。例えば以下のように使用します。

    Function EchoDateTime {

    Get-Date

    }

    EchoDateTime

    PowerShell で関数を定義するには、どのキーワードを使用しますか

    1. Module
    2. Function
    3. Param
    4. While

    前問で書いた通り、関数を定義するには Function を使用します。

    While はループを記述する際のキーワードですね。

    Get-DiskInfo という関数を DiskUtilities.ps1 というスクリプトに追加しました。PowerShell ISE の外部でこの関数をテストするには、どのような手順を実行する必要がありますか (2 つ選択してください)。

    1. DiskUtilities.ps1 スクリプトを実行する
    2. スクリプトをモジュールとして読み込む
    3. Get-Diskinfo を呼び出す
    4. ドット ソース モードで DiskUtilities.ps1 スクリプトを実行する

    まず初めに謝っておきます。

    これ、答えが間違えています。。。。ごめんなさい。本社にフィードバックしておきます。

    正解は、3,4 ですが、2,4と回答しないと正解になりません。。。ほんとごめんなさい。

    気を取り直して解説しておきましょう。

    おそらく、以下のようなスクリプトを作成して、DiskUtilities.ps1 というファイル名で保存したのでしょう。「関数を保存した」というところに注目してください。

    image

    このスクリプトを 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セッションも消滅するので、関数も使えなくなります。

     

  • 【PowerShell】MVA対策講座 Windows PowerShell 3.0 を基礎から学ぶ ‐ Part2 PowerShell のスクリプト言語 編

    Microsoft Virtual Academy で公開されているオンライントレーニングコース「PowerShell 3.0 を使用した高度なツールとスクリプト」のテスト解説シリーズ、第2回目です。

    腕に自信のある方は、まずはテストを受けてみてくださいね!通過できない場合には、こちらの解説講座に戻ってきてください。

    Microsoft Virtual Academy - PowerShell 3.0 を使用した高度なツールとスクリプト
    http://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId

    前回までの投稿は以下より。

    第1回 スクリプト入門編

    今回は PowerShell のスクリプト言語について。

    是非とも満点でテストを通過してください!

     

    PowerShell で変数を宣言するには、どの記号を使用しますか

    1. !
    2. @
    3. #
    4. $

    これは比較的簡単ですね。正解は “$” です。文字列の頭に $ をつけることで変数として扱うことができます。

    他のスクリプト言語同様、Windows PowerShell でも特殊記号を使用することで文字列に特別な意味を持たせることができます。

    !(エクスクラメーション)は 論理否定(-not)の短縮形です。変数が NULL 値かどうかの判定なんかで使います。”NULL 値は論理値的には False” なので、! $null と書けば、True を意味することになります。ちなみに、$null は NULL 値を表現する既定の変数です。

    image

    @ を使用するとアレイ値を宣言することができます。 @(1,2,3) とすれば、数値の1,2,3それぞれが入った配列が定義できます。文字列も同様に、@(“a”,”b”,”c”) などとするだけです。

    image

    配列と似たものでハッシュテーブルと呼ばれるものもあります。これはキーと値のペアで格納できるものです。

    例えば各国の人口をプログラムの中で使いたい場合、事前に以下のように定義しておきます。

    $P = @{“Japan” = 127600000 ; “USA” = “313900000” }

    こうすれば、日本の人口を取り題したいときには $P.Item("Japan")  とすればよいわけです。いちいちデータベース等にアクセスする必要がなくなるので、繰り替えし処理が多い場合などは処理を高速化できます。

    image

    # はご存知ですよね。これはコメント行を意味します。

    文字列内の変数と併用した二重引用符の機能はどれですか

    1. すべての変数を解決する
    2. 変数が置換されないようにする
    3. 一般的な変数を置換する
    4. 個別の変数が置換されないようにする

    これ、意味が分かりずらいかもしれません。次の問題とも関係するのですが、文字列の中に$で始まる文字列を書いた場合を考えてみてください。例えば、以下のように。

    $a = “6”

    $b = “12345$a”

    このとき、$b の中に格納されているのは、”123456” です。なぜならば文字列を二重引用符(ダブルクオーテーション)で括っているからです。

    image

    つまり、正解は「1. すべての変数を解決する」です。ここでいう「解決」とは、「名前解決」と同じような意味です。変数を置き換えることを意味しています。

    文字列内の変数と併用した単一引用符の機能はどれですか

    1. すべての変数を解決する
    2. 変数が置換されないようにする
    3. 一般的な変数を置換する
    4. 個別の変数が置換されないようにする

    前問の続きになりますが、以下のように単一引用符(シングルクオーテーション)で文字列をくくった場合を考えてみます。

    $a = “6”

    $b = ’12345$a’

    この場合、変数は展開されずに、そのまま文字列として扱われます。

    image

    よって、正解は「2. 変数が置換されないようにする」です。

    文字列内の変数と併用したアクサン グラーブの機能はどれですか

    1. すべての変数を解決する
    2. 変数が置換されないようにする
    3. 一般的な変数を置換する
    4. 個別の変数が置換されないようにする

    アクサン グラーブって、どれのことかわかりますか?106/109日本語キーボードですと以下がアクサングラーブです。

    image

    これはスクリプトの継続行を意味する記号として使われますが、それ以外にも $ の前に付加することで、$ を単なる文字列として扱うことができます。

    image

    つまり答えは「4. 個別の変数が置換されないようにする」です。

    PowerShell でオブジェクトに関するプロパティやメソッドを取得する必要があります。どのコマンドレットを使用しますか

    1. Get-Object
    2. Get-Service
    3. Get-ChildItem
    4. Get-Member

    これは覚えておきましょう。「4. Get-Member」です。

    PowerShell のコマンドレットは高機能なので、その戻り値がどのようなプロパティやメソッドを持っているかを記憶することは不可能ですし、かといっていちいち調べるのも面倒です。

    なので出力結果から、どのような値が得られ、どのような処理が可能になるのかを簡単に予測できることは、効率的なスクリプティングにとってとても重要です。

    例えば、 Get-Process というコマンドレットを考えてみましょう。

    このコマンドレットの結果、プロセス一覧が取れるであろうことは予測できますが、具体的にどのような値が取れるのかを調べるには、以下のように、Get-Process の出力結果を、パイプを介して Get-Memeber に渡します。

    image

    知っているととても便利です。

    PowerShell の論理構文は次のうちどの構文ですか (2 つ選択してください)。

    1. If .. ; Then .. ; Else
    2. If .. ; ElseIf  .. ; Else
    3. Case  .. ; Select
    4. Switch
    5. While

    「論理構文」って意味わかります?ググっても、もといBingってもそんな言葉出てこないんですけど。。。。

    英語版のテストでは「Logical construct」と書いてあるので「論理構文」なのでしょうが、日本だと「条件分岐構文」のほうがしっくりくるでしょうかね。

    じゃ、上記の中で条件分岐はどれかといえば 1,2,3,4 になりますが、問題文では「2つ選択」と書かれています。

    頭の中に???が並びますよね。

    これ、ひっかけ問題です。

    PowerShell には、 if .. then .. else はありません!正確に書くと、PowerShell には「Then」は書きません!!だから、1. は × です。

    それから、PowerShell には Case 文、Select 文はありません!! これらは Switch 文に吸収されています。

    よって正解は 2 と 4 になります。

    意外と難しいですねぇ。

    PowerShell のループ処理構文は次のうちどの構文ですか (2 つ選択してください)

    1. If ..; Then .. ; Else
    2. Do
    3. Case ..; Select
    4. Switch
    5. While

    これは解説の必要はないですね。

    2、5 が正解です。

    PowerShell のオブジェクトを反復処理する一般的な方法は次のうちどの構文ですか (2 つ選択してください)

    1. If ..; Then ..; Else
    2. ForEach
    3. Case ..; Select
    4. Switch
    5. ForEach-Object コマンドレット

    「オブジェクトの反復処理」というところがミソです。

    PowerShell では、Do や While を含め様々なループ処理があります。

    "For” だけでも、以下の3種類があります。

    • For
    • Foreach
    • ForEach-Object コマンドレット

    この中でオブジェクトに対する反復処理に対応しているのは、Foreach と ForEach-Object コマンドレットの2つです。

    例えば、「WUA で始まるサービスの一覧を取得し、それらをすべて停止する」という処理を考えてみると、以下のように書けます。

    image

    $S には Get-Service の戻り値がオブジェクトとして格納されています。$S から個々のサービスのインスタンスを取り出して Stop() しています。

    てことで正解は 2、5 ですね。

    ということで、第2回目の講義は終わりです。

    テストに通過できなかった方は、上記を踏まえて再度チャレンジしてください!目指せ満点!

    Microsoft Virtual Academy - PowerShell 3.0 を使用した高度なツールとスクリプト
    http://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId

    次回は 「第3回 単純なスクリプトと関数」編です。

  • 【PowerShell】MVA対策 Windows PowerShell 3.0 を基礎から学ぶ - Part1 スクリプト入門編

    以下に Windows PowerShell 3.0 のオンライントレーニングコースが公開されています。

    もちろん日本語です。

    PowerShell 3.0 を使用した高度なツールとスクリプト
    http://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId

    是非テストに挑戦していただきたいのですが、テストの解説がどこにも掲載されていないので、今日から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 が必須となっています。

    image

    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 のコンソールを開くときに「管理者として実行」を選択するようにしてね!というメッセージが込められています。でないと、管理作業がエラーになってしまうので。

    PowerShell を管理者コンテキストで開くとプロンプトに表示されるディレクトリの場所はどれですか

    「管理者コンテキスト」というところがミソですね。

    実際にコンソールを開いてみれば一目瞭然です。

    以下は「管理者として実行」を選択した開いた時のプロンプトです。

    image

    「管理者として実行」を選択しないと、現在のユーザーコンテキストで開かれるので、プロンプトは以下のようになります。

    image

    実行ポリシーを設定するには、どのコマンドレットを使用しますか

    これは、これから 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種類の使い方があります。

    1. 各コマンドレットの -ComputerName パラメタを使用する
    2. Invoke-Command  -ComputerName を使用する
    3. Enter-PSSession ーComputerName を使用して、SSHのようにリモートコンピューターにサインインする

    多くのコマンドレットでは -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

    本日の講義はここまで。

    次回は、Part2 PowerShell のスクリプト言語 編 です。

  • グループポリシー設定リファレンスガイド 日本語版 提供中

    当キャンペーンは終了してしまいましたが、こちらからダウンロードできます!

    image
    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

     

    ご覧ください。しっかりと日本語化されています!ヘルプも完璧です。

    image

    実はこれ、"翻訳したんじゃないんです"。とある PowerShell プロフェッショナルな方にお願いして、スクリプトを作ってもらったんです。
    詳しくは後日。。。

    さらに、評価版ダウンロード登録後にキャンペーンに応募してくださると、以下の書籍も抽選でプレゼント。

    image

    期間は1か月と短いのですが、この機会をお見逃しなく~

  • 【PowerShell】DHCP サーバーを構成する

    この投稿は PowerShell Advent Calendar 2013 に参加しています。

    ※投稿遅れてごめんなさい!!!!

    image
    http://technet.microsoft.com/ja-jp/windowsserver/jj649374.aspx

    Windows PowerShell を使用すれば、Windows Server 上にインストールするサービスの構成も自動化することができます。

    ただ、その中でちょっと面倒なのが DHCP サーバーです。

    サーバーマネージャーで DHCPサーバーをインストールし、DHCPマネージャーで構成するには、以下の手順が必要です。

    1. DHCP サーバーをインストールする
    2. サーバーマネージャー上にフラグた立つので、「DHCP 構成を完了する」を実行

      image
      • DHCP サーバー管理の委任用にセキュリティグループ(DHCP Administrators、DHCP Users)を作成する
      • DHCP サーバーをActive Directory で承認する
    3. DHCP サービスのバインディングを設定する
    4. スコープを構成する

    これらをWindows PowerShell に置き換えると以下のようになります。

    1. Add-WindowsFeature dhcp -IncludeManagementTools -IncludeAllSubFeature
    2. 「DHCP 構成を完了する」というコマンドレットが用意されていないので、以下のコマンドを実行します。
      • Netsh dhcp add SecurityGroups

        残念ながら、Netsh dhcp add SecurityGroup に相当するコマンドレットが存在せず、ここだけはDOSコマンドを使うことになります(少し悔しい)。または、New-ADGroup コマンドレットを使用して、ここにセキュリティグループを作ってあげるという手もありますが….
      • Add-DHCPServerInDC -DnsName <DNSドメイン名>

        DNS ドメイン名には contoso.com のような文字列を指定します。
    3. Set-DHCPServerV4Binding -InterfaceAlias “NIC の名前” -BindingState $True

      -InterfaceName に指定するのは DHCP サーバーをバインドするネットワークカードの名前です。名前を調べるには、Get-NetAdapter コマンドレットで表示される Name プロパティを確認してください。

      image

      このコマンドレットでは IPv4 アドレスをリースするための設定をしていますが、Set-DhcpServerv6Binding コマンドレットを使用すれば IPv6 用の設定も行えます。
    4. スコープを構成するには 2つのコマンドレットを実行しなければなりません

      はじめに、スコープのレンジを設定します。このとき、-State でスコープをアクティブにすることができますが、このままでは設定が足りないため中途半端にリースされる可能性があります。よって、作成時には -State を InActive としましょう。

      Add-DHCPServerV4Scope -StartRange 192.168.0.10 -EndRange 192.168.0.20 -SubnetMask 255.255.255.0 -Name “スコープ1” -State InActive

      スコープを作成すると、ScopeID という一意のIDが割り振られます。ScopeID を確認するには、以下のコマンドレットを使用します。

      Get-DHCPServerV4Scope

      image

      ScopeID がわかったら、今度はスコープに DNS サーバー の設定を追加します。

      Set-DhcpServerV4OptionValue -ScopeID 192.168.0.0 -DnsServer 192.168.0.1

      このとき、DNS サーバーの有効性がチェックされます。もし DNS サーバーがまだ存在していない場合等には、 -Force  オプションを使用して設定を強制することもできます。
      image

      最後に、以下のようにスコープの State を Active に変更し、アドレスのリースを行えるようにします。

      Set-DhcpServerv4Scope -ScopeID 192.168.0.0 -State Active

    以上で設定は完了なのですが、Windows PowerShell から構成を行った場合、ちょっとした問題が出ることがあります。それが、以下です。

    image

    そうなのです。こいつが消えてくれないことがあるのです。害はありませんが、ちょっと鬱陶しいですね。。。

    そこで、対応が完了しているフラグがどうしても消えない場合には、以下のようなコマンドを最後に実行しましょう。

    Set-ItemProperty –Path registry::HKLM\SOFTWARE\Microsoft\ServerManager\Roles\12 –Name ConfigurationState –Value 2

    「HKLM\SOFTWARE\Microsoft\ServerManager\Roles」配下には、サーバーにインストールされている役割が列挙されており、その直下の数字が各役割の管理番号になっているようです。つまり、「12」というのはDHCP サーバーを示しています。ConfigurationState = 2 が「構成完了」を意味しています。

  • 【IDM】Windows Server 2012 R2 の Web Application Proxy ってナニするためのもの? Device Registration Service との関係は?

    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 とは

    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 から発行されたクレームを使用して「認可」することができるのです。

    ここでちょっとだけ整理しておきましょう。

    • ユーザー認証でできること
    • ユーザーIDとパスワードの正当性チェック
    • ユーザーが所属しているセキュリティグループの正当性チェック
    • ユーザー認可でできること
    • ユーザーのさまざまな属性によるアクセス可否判定

    「認可」では、ユーザーが持っている属性を使ってアクセス可否を判定することができるため、きめの細かな制御が可能です。

    ユーザー属性は通常 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 の使い方によっていただければ幸いです。

  • 【Management】 “Invoke-Command -AdJob” と “Invoke-Command {Start-Job}” の違い、説明できますか?

    image

    多くの方が Windows PowerShell をお使いのことと思います。

    PowerShell にはさまざまな「奥義」が存在しますが、「バックグラウンドジョブ」も奥義の一つです。これは究極奥義である「ワークフロージョブ」へとつながる大切な概念です。

    まずは以下をご覧ください

    Get-Service  -ComputerName  Server01

    何をやっているかは一目瞭然ですよね。

    リモートコンピューター Server01 上のサービス一覧を取得しています。

    通常 Get-Service は直ぐに結果を得られるので問題ないのですが、結果取得までに10分とか20分を要する場合にはコンソールを占有されてしまうことを回避するため、「バックグラウンドジョブ」と呼ばれる方法を使用します。

    つまり、コマンドを投げっぱなしにしておいて(非同期実行)、あとから結果を取りに行く...という方法です。

    バックグラウンドジョブを作成するには2つの方法があります。

    • -AsJob パラメタを使用する
    • Start-Job コマンドレットを使用する

    いずれを使用しても得られる結果は同じですが、コマンドレットによっては -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 セッションを張ってます。図にすると以下のような感じです。

    image

    問題は2行目です。同じことをやってそうなのですが、微妙に書き方が異なっています。-AsJob と Start-Job に何か秘密が隠れているようではあります。

    Invoke-Command  -Session $S  -ScriptBlock { Get-Service }  -AsJob

    Invoke-Command を使用すると、リモートコンピューター上でコマンドレットを実行することができます。今回の例では、事前に作成した Server01 とのセッションを使い、Server01 上で Get-Service を実行しています。

    -AsJob を指定することで Invoke-Command 自体がバックグラウンドジョブ化され、リモートでのコマンド実行を待ち合せることなく、バックグラウンドで非同期に実行することができます。

    結果は Invoke-Command を実行したローカルホストに保存されます(ここ重要!)。

    図にすると以下のような感じです。

    image

    Invoke-Command  -Session $S  -ScriptBlock {Start-Job  -ScriptBlock {Get-Service}} 

    一方、-AsJob ではなく、ScriptBlock 内で Start-Job を実行した場合はどうなるでしょう。

    Start-Job は Server01 上で実行されるため、バックグラウンドジョブ化されるのは Server01 上の Get-Service コマンドです。

    では、結果はどこに保存されるかといえば、ジョブが実行された Server01 上です。

    図にすると以下のようになります。

    image

    当然、結果を取りに行くときは、以下のように 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】Get-Content -tail って知ってました?

    Linux/UNIX 系の方にはおなじみの Tail コマンドですが、これと同じことを Windows でできないものかとよく尋ねられます。

    MVP のあおきさんが書かれているように、CodePlex で LogExpert というツールが公開されていますので、すでにこちらをお使いの方も多いことでしょう。

    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

    image

    上記の通り、すべてのデータを読み込んだ後で wait がはじまります。私のマシンで実行すると、wait が始まるまで実に2分半!これじゃやってられません。

    そこで、次に以下のように指定してみてください。-tail 0 がミソです。

    Get-Content .\KEN_ALL.CSV -wait -tail 0

    image

    言わずもがなですが、いきなり wait してくれます。

    Get-Content には、他にもいろいろな使い方がありますので、ぜひ末永くご愛顧ください。便利ですよ!

    Windows PowerShell 3.5 20131028

    さて、ここでこんな要望も出てくるはず。

    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 とではプロファイルのパスが異なります。

    • PowerShell コンソールの場合 C:\Users\junichia\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    • PowerShell ISE の場合      C:\Users\junichia\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

    そのため、ISE側だけで設定してもコンソール側には反映されませんので注意してください。

    ISE とコンソールの両方で Alias 登録を行ってください。

     

  • 【Management】Windows Server 2012 R2/Windows 8.1 対応 グループポリシーリファレンス リリース

    待ちに待ったリファレンスがやっとリリースされました。

    Group Policy Settings Reference for Windows and Windows Server
    http://www.microsoft.com/en-us/download/details.aspx?id=25250

    英語版なのですが、新項目は50個程度のようで、半分以上が IE11 関係ですね。

    image

    ついでに、Azure上で運営されている、Group Policy Search(こちらも英語版ですが。。)も Windows 8.1/Windows Server 2012 R2 のデータで更新されています。

    http://gpsearch.azurewebsites.net/

    image

    さて、このリファレンスの日本語版なのですが。。。現時点では予定が見えておりません。

    が、頑張って調整してみます。

  • 【IDM】Active Directory Federation Service が起動できない場合にはサービスアカウントのパスワードをリセットしてみる

    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 とは

    たったいまこんなことがありました。

    Windows Server 2012 R2 上にインストールされている Active Directory Federation Service が「開始中」のまま起動できないのです。30分ほど待ってみましたが、まったく状況は変わりません。もちろん、AD FS に依存している Device Registration Service も起動していません。

    AD FS の構成情報が格納されている Windows Internal Database は正しく起動しているようなので、Directory Service の問題かと考えイベントログを調べました。

    すると、以下の警告ログが大量に見つかりました。

    Event ID 2947

    グループ管理サービス アカウントのパスワードを取得できませんでした。

    image

    「グループ管理サービス アカウント(gMSA:Group Managed Service Account)」とは、Windows Server 2012 でリニューアルされたサービスアカウント機能です。手元の環境では AD FS のサービスアカウントとして gMSA を設定してあるのですが、どうやらそのパスワードを取得できないことにより、AD FS が起動できない模様です。

    ここですこしだけ gMSA について解説しておきます。ご存知ない方は読んでおいてください。

    Winodws Server 2008 以前、サービスに使用する「サービスアカウント」は、ユーザーアカウントと同様に作成する必要がありました。ユーザーアカウントと同様の扱いなので、安全上の配慮からパスワードの変更を行った時には、サービスのアカウント設定画面でパスワードも再設定する必要がありました。

    image

    もちろん、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)」では、以下の通り"ある程度"制限が解除されています。

    • 複数のコンピューターで共有できる
      フェールオーバークラスターのサービスアカウントとして使用することはできませんが、クラスター化されたノード上のサービス間で共有することは可能です。
    • タスクスケジューラーで使用できる

    アプリケーションでのサポートについては、実は従来通りの制限があります。どのアプリケーションが 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 :

    gMSA の sAMAccountName を見てください。アカウント名の後ろに 「$」がついていることに注意してください。

    次に、以下のコマンドレットで、gMSA のパスワードをリセットします。

    PS C:\Windows\system32> Reset-ADServiceAccountPassword fsgmsa$

    私の手元の環境では、リセットが完了するまでに 30 秒程度要しました。なので、なかなか終わらなくても安心してください。

    リセット完了後、イベントログに以下のメッセージが表示されたらしめたものです。

    イベントID 2946

    発信者がグループ管理サービス アカウントのパスワードを正常に取得しました。

    image

    AD FS も正常に起動することができました。

    なぜ gMSA のパスワードが取得できない状態になってしまったのかは、現時点では判明しておりません。

    この環境が仮想環境で、2週間程 起動していなかったことが影響している可能性があります。

    gMSA のパスワードは、既定では 30日で自動更新されるのですが、それが影響しているようでもありません。この点は継続して調べてみたいと思います。

    image

  • 【赤本×対策セミナー】 Steve Ballmer 署名入り MCP 合格証を入手するなら今なのです!

    「いまでしょ」なんで言いませんよ。二倍返しされても、お・も・て・な・しされても言いません。

    あぁー、大好きな 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 編
    bnr_marukajiri_540x120 (2)

    10月20日開催 SQL Server 2012 編
    bnr_marukajiri_540x120 (2)

    Steve Ballmer の署名入り合格証を手に入れましょう!

  • 【世界ランクに挑戦】 Office 365 オンライン学習コースを公開

    あまり知られていませんが、Microsoft Virtual Academy というサイトがあります。

    オンラインのトレーニングサイトで、マイクロソフトがワールドワイドで展開しています。各コースを通過するとポイントが付与され、これによって世界ランキングに参加することができます。

    ちなみに私は、現在国内週間ランキングトップです。2位のTakaiさん、3位の松本さん、ごめんなさい。

    image

    そんな 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 シナリオ デモ を大阪で行います ~ ID&IT カンファレンス 2013 @大阪

    image

    以前、以下の投稿をしました。

    【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テクノロジー以外にも興味深いセッション満載です!

    みなさまのご来場をお待ちしております~

  • 【BYOD】デバイス認証ができるようになった WS 2012 R2 ADFS -テスト手順書公開

    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 とは

    既にご存知の方も多いと思いますが、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 をテストするには、

    • Active Directory Domain Service
    • Active Directory Federation Service
    • Active Directory Certificate Service

    にある程度精通している必要があり、未経験の方にはshou難しいと思われます。

    そこで、これらのテスト環境を Hyper-V 仮想マシン上で構築するための手順書を作成しました。

    手順書を入手するには、以下のサイトから Windows Server 2012 R2 プレビュー版ダウンロード にユーザー登録してください。

    650260_Windows_Server_2012_R2

    ユーザー登録が完了すると、ダウンロードが始まると同時に、登録の際に使用した Microsoft アカウント(Windows Live ID)に以下のようなメールが届きます。黄色く塗りつぶしたところをクリックしていただくと、当該ドキュメントをダウンロードできます。

    image image

    ぜひチャレンジしてください!

    AD FS の基本的な勉強にも最適です。

  • 【オンライントレーニング】新コース公開!!

    マイクロソフトのオンライントレーニングサイト Microsoft Virtual Academy に公開されました。

    公開されたのは以下の4コースです。

    ふるって受講してください!!

  • 【Windows Server 2012 R2】ちょっと使ってみたいなら無償の Azure IaaS 30日評価版で!

    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

    clip_image001

    なお、無償評価版は1つの Microsoft アカウントあたり1回だけですのでご注意ください。

  • 【Management】Windows Update Powershell Module (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 フォルダが格納されているはずです。この中にこのモジュールを構成するスクリプト群が格納されています。

    これらのファイルは「インターネットゾーンからダウンロードしたファイル」なので、必ず「ブロックの解除」を実行しておきましょう。でないと実行できません。

    image

    ブロック解除が完了したら、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 フォルダを移動してください。なお、既定ではこのパスは存在しないので、自分で作ってください。

    • C:\Users\junichia\Documents\WindowsPowerShell\Modules

    以下のパスはシステムモジュール用のパスです。

    • C:\windows\system32\WindowsPowerShell\v1.0\Modules\

    以下は Windows Azure 用コマンドレットをインストールしたときに作成されたパスでしょう。既定では存在しませんので、無くても不安にならないでください。

    • C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\

    PSWindowsUpdate フォルダを移動したら、コンソールから Import しましょう。

    PS C:\> Import-Module pswindowsupdate

    ブロック解除が行われていれば、特にエラーは出力されないはずです。

    次に、コマンドレットの一覧を見てみましょう。以下の用の出力されたら問題ありません。

    PS C:\>Get-Command -Module pswindowsupdate

    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 人事マニアであると自負されている方」向けに問題です。

    この方は誰でしょう?

    who am i

    わかりました?

    答えは、Steve Guggenheimer(スティーブ グッゲンハイマー)です。

    え?それは誰かって?群馬県とは関係ありません。

    私が所属している部門が「日本マイクロソフト株式会社 デベロッパー&プラットフォーム エバンジェリズム」なのですが、その親玉である Microsoft Corporation Developer & Platform Evangelism の親分です。我々から見れば、とーっても偉い人なわけです。はい。

    でもって、我々エバンジェリストの最上級をあらわす、Chief Evangelist でもあります。

    世界中のさまざまなカンファレンスのキーノートに登壇しているので、ご覧になったことがある方も多いかもしれませんし、6月の BUILD に参加される方は、そこでお目にかかることになるでしょう。

    image

    そんな彼が日本にやってきて、登壇する日があります。

    それも、BUILD はかなり高価なカンファレンスですが、これは無償です。

    Chief Evangelist のべしゃりってやつを聴いてやろうじゃないか!という方、是非とも以下のイベントにご参加ください!

    6/3(mon) 13:00 ~ Microsoft Innovation Meetup!  @秋葉原 です。

    Microsoft Innovation Meetup!