読者です 読者をやめる 読者になる 読者になる

備考欄に感想を書くタイプのエンジニア

それで出世が遅れ(ry

PowerShell DSC を実際に動かしてみる

※これは PowerShell Advent Calendar 2013: ATND 14 日目の記事です。

Windows 8.1 および Windows Server 2012 R2 が発表されてからしばらく経ちますが、PowerShell DSC に関する情報や手順があんまり出ていないようですので(公式もまだですよね?)、正式な情報が揃うまでの間でちょっと触ってみようということで簡単な構成を作ってみました。

そもそも PowerShell DSC が何かということについては @guitarrapc_tech 氏がご自身のブログで丁寧に説明されていますので丸投げしてしまいます。

環境を準備する

まず、PSDSC を実行する環境ですが、基本的には IIS が動かせるコンピューターと DSC 適用対象のコンピューターの2台程度があればいいです。もちろんもっと DSC 適用対象コンピューターを用意すると構成情報の大量のコピペが楽しめます。ドメインを構成しているほうがコンピューター間の通信が簡単にできるんじゃないかなとは思いますが、スタンドアロン構成で実施するかどうかはお好みで…。

構成例:

  • PSDSCHost001 (DC, DSC: WS2012 R2)
  • PSDSCClient001 (WS2012 R2)

DSC の管理サーバー(?)を構成する

では早速 PSDSCHost001 上で PowerShell を起動し、Windows PowerShell Desired State Configuration Service 機能をインストールします。GUI でもなんでも結構ですが、せっかくなので PowerShell で。この機能、のちに適切な日本語に変更されたりするんでしょうか…。MCP の翻yいえなんでもありません。

 PS > Install-WindowsFeature DSC-Service

 Success Restart Needed Exit Code      Feature Result                               
 ------- -------------- ---------      --------------                               
 True    No             Success        {Windows PowerShell Desired State Configur...

上のコマンドレットを実行して成功していることを確認します。関連する機能として Web-Server の一部の機能もインストールされます。今回は使いませんすみませんすみません。続いて Desired State Configuration ファイルを作ります。こんな感じ。

 PS > New-Item c:\PSDSC -ItemType Directory

 Directory: C:\

 Mode                LastWriteTime     Length Name                                                       
 ----                -------------     ------ ----                                                       
 d----        2013/12/13     20:19            PSDSC  

 PS > New-Item c:\PSDSC\IISConfig.ps1 -ItemType File

 Directory: C:\PSDSC

 Mode                LastWriteTime     Length Name                                                       
 ----                -------------     ------ ----                                                       
 -a---        2013/12/13     20:19          0 iisconfig.ps1  

で、作成した IISConfig.ps1 ファイルを開いて以下の内容を書き込んで保存、実行します。

  Configuration IISConfiguration
  {
     Node PSDSCClient001
     {
         WindowsFeature IIS
         {
             Ensure = "Present"
             Name = "Web-Server"
         }

         WindowsFeature ASP
         {
             Ensure = "Present"
             Name = "Web-Asp-Net45"
         }
     }
  }

 IISConfiguration

実行すると PowerShell のカレント ディレクトリ(Get-Location で表示されるディレクトリ)に MOF ファイルが作成されます。

 PS > C:\PSDSC\iisconfig.ps1

 Directory: C:\PSDSC\WebSiteConfig

 Mode                LastWriteTime     Length Name                                                       
 ----                -------------     ------ ----                                                       
 -a---        2013/12/13     20:54       1732 PSDSCClient001.mof    

これで準備は完了です。

DSC でクライアントに IIS を展開する

まずは DSC 適用前の PSDSCCllient001 に PowerShell で接続して機能のインストール状態を確認します。Get-Credential のクレデンシャル認証は PSDSCClient001 に対して十分な権限があれば何でもいいです(Domain Admins とかw)。

 PS > Enter-PSSession -ComputerName PSDSCClient001 -Credential $(Get-Credential)

問題なく接続できれば、プロンプトの部分が [PSDSCClient001]: PS > みたいな形になりますので Get-WindowsFeature を実行します。

 [PSDSCClient001]: PS > Get-WindowsFeature -Name Web*

 Display Name                                            Name                     Install State
 ------------                                            ----                     -------------
 [ ] Web サーバー (IIS)                                      Web-Server                   Available
     [ ] Web サーバー                                        Web-WebServer                Available
         [ ] HTTP 共通機能                                   Web-Common-Http              Available
             [ ] HTTP エラー                                Web-Http-Errors              Available
             [ ] ディレクトリの参照                               Web-Dir-Browsing             Available
             [ ] 既定のドキュメント                               Web-Default-Doc              Available
             [ ] 静的なコンテンツ                                Web-Static-Content           Available
             [ ] HTTP リダイレクト                             Web-Http-Redirect            Available
             [ ] WebDAV 発行                               Web-DAV-Publishing           Available
             [ ] .NET 拡張機能 4.5                           Web-Net-Ext45                Available
             [ ] Application Initialization              Web-AppInit                  Available
             [ ] ASP                                     Web-ASP                      Available
             [ ] ASP.NET 3.5                             Web-Asp-Net                  Available
             [ ] ASP.NET 4.5                             Web-Asp-Net45                Available
   ※途中割愛してます

こんな感じでまだ何もインストールされていないことを確認したら PSSession は Exit しておきます。では DSC を実行してみましょう。

 Start-DscConfiguration -ComputerName PSDSCClient001 -Path IISConfiguration -Wait -Verbose -Credential $(Get-Credential)

するとこんな感じの結果が表示されます。

f:id:arumumu:20131213194519p:plain

ここで、もう一度 PowerShell から先ほどと同じコマンドレットを実行して PSDSCClient001 に接続し、機能のインストール状況を確認してみると…

 [PSDSCClient001]: PS > Get-WindowsFeature -Name web*

 Display Name                                            Name                       Install State
 ------------                                            ----                       -------------
 [X] Web サーバー (IIS)                                      Web-Server                     Installed
     [X] Web サーバー                                        Web-WebServer                  Installed
         [X] HTTP 共通機能                                   Web-Common-Http                Installed
             [X] HTTP エラー                                Web-Http-Errors                Installed
             [X] ディレクトリの参照                               Web-Dir-Browsing               Installed
             [X] 既定のドキュメント                               Web-Default-Doc                Installed
             [X] 静的なコンテンツ                                Web-Static-Content             Installed
             [ ] HTTP リダイレクト                             Web-Http-Redirect              Available
             [ ] WebDAV 発行                               Web-DAV-Publishing             Available
             [X] .NET 拡張機能 4.5                           Web-Net-Ext45                  Installed
             [ ] Application Initialization              Web-AppInit                    Available
             [ ] ASP                                     Web-ASP                        Available
             [ ] ASP.NET 3.5                             Web-Asp-Net                    Available
             [X] ASP.NET 4.5                             Web-Asp-Net45                  Installed
 ※途中割愛してます

インストールされてますね!ということで本当はウェブサイトを作ってコンテンツも一緒に DSC で構成したほうがデモっぽい感じですが、そういうのはブログよりも動画で見るほうがおおーっ!ってなるので Channel 9 で公開されている Teched 2013 の Desired State Configuration in Windows Server 2012 R2 PowerShell でカップケーキのウェブサイトが増殖する様子を見てもらえればと思います。

追記

そういえばせっかく Desired State Configuration って言っているのに構成済みの環境に再度 DSC を適用したときにどんな振る舞いをするのかについても結果を書いておいた方がいいかなと思いますので、実行したら追記しようと思います。環境もうつぶしちゃった (・ω<)


あと、全然本文とは関係ないですがブロガーなら誰しも、ふと書き続けていたブログをぶち壊したくなる衝動に駆られることがあるかと思いますが、多分に漏れず私もその衝動のままにこれまで使っていたブログを消去し、ここからまた始めることにしました。

ということでこれが最新の記事となります()