コマンドレットのパラメータを列挙してみる。埋め込み型のプレゼンテーションです。くま同盟大阪勉強会#63でのセッション資料を公開します。デモで使用したサンプルスクリプトも併せてご利用ください。くま同盟の勉強会は今回の大阪#63で10年目に入ったのですが、実は私も9年前の大阪#4で勉強会セッションデビューをしていたりします。DSCリソースを作成するというテーマで話しました。DSCでは管理対象ごとにロジック(リソース)と設定(Configuration)を分離でき、一貫性を持ったインフラ構成の自動化が可能になる素敵な機能です。いかんせん、ビルトインリソース(OS標準で含まれるリソース)の種類が少ないので、実際の業務で使うにはカスタムリソースを作成する必要が出てくると思います。今回のデモでは、テキストファイルの中身を自動構成するという、ごく単純なサンプルを作成して実演してみましたが、考え方や実装方法の基本はこれでカバーできるのではないかと思います。詳しくは、ぎたぱそ氏の記事を読んでいただければ良いかと思います。4.0環境でもおそらく動作すると思います。今回のConfigurationはローカルコンピュータに対しPush適用(Start-DscConfigurationコマンドレットによる手動適用)することを想定しています。Managerの設定等)を整えておいてください。スクリプトはすべて管理者権限で実行してください。xDSCResourceDesignerのインストールDSCリソースのひな形を作成するためのxDSCResourceDesignerをインストールします。KitをDLしてください。xDSCResourceDesignerの使用方法の確認xDSCResourceDesignerの使用方法を確認します。make_Foo_resource_template.ps1を実行すると、xDSCResourceDesignerを用いてDSCリソースFooのひな形が$env:ProgramFiles\WindowsPowerShell\Modules\TestResourceに作成されます。ひな形がどのように作成されるかを確認してください。Fooとして、DSCリソースがきちんと認識されているか、確認してください。今回のデモで作成したTextFileLineリソースは、make_TextFileLine_resource_template.ps1を実行してまずひな形を作成しました。作成されたひな形を用いて、TextFileLine.psm1に実際のロジックを記述し、DSCリソースを完成させました。zipに含まれるTestResourceフォルダの中身が、今回作成したDSCリソースモジュールになりますので、まずは内容を確認してみてください。Set-TargetResource関数はどのように実装すると冪等性を保持して作成できるのかを念頭に置いてみてください。TextFileLineリソースの展開zipに含まれるTestResourceフォルダを$env:ProgramFiles\WindowsPowerShell\Modules\の下にコピーしてください。TextFileLineとしてDSCリソースが認識されていることを確認してください。TextFileLineリソースを用いたConfigurationの作成start_dsc_configuration.ps1に含まれる、TextFileLineTestが、今回適用してみるConfigurationになります。start_dsc_configuration.ps1を実行すると、ドキュメントフォルダにmofファイルを生成し、Start-DscConfigurationコマンドレットにより設定を反映させます。Configurationが適用されれば、ドキュメントフォルダにlist.txtというファイルが生成し、中にプログラム言語のリストが記入されているはずです。Configurationが反映されたことを確認Test-DscConfigurationコマンドレットを実行すると、現在の状態とConfigurationに書かれた状態が一致していればTrueと表示されます。今はConfigurationを適用した直後なのでTrueになるはずです。Get-DscConfigurationコマンドレットを実行すると、現在の各プロパティの状態を表示してくれます。list.txtに含まれる行をテキストエディタで編集して上書きしたりすると、Test-DscConfigurationの結果はFalseになるはずです。list.txtを手動で変更した状態で、再度start_dsc_configuration.ps1を実行すると、再びConfiguration通りの状態に戻ると思います。その際、変更のなかったプロパティに関しては、処理がスキップされていることをログをみて確認してください。その他Configurationを色々書き換えて試してください。Ensure="Absent"にすると対象項目が存在しない状態になります。空白文字を入れてくださいという記事に対する意見です。PowerShellスクリプトを記述するときは適宜空白文字やインデントを入れて見やすくしましょう、という趣旨の記事なんですが、その趣旨には同意するものの、どうも実際にインデントを入れたスクリプトの例がいけてない気がしました。ここでインデントや改行などを適切に追加して体裁を整えたとされるコードは次のようなものです。}}最初見た時、全体的に何がなんだか分からなかったのですが、よくよく見てみると一応ルールはあるようで、一つの文を改行して複数行に記述する場合は、二行目以降は文頭から詰めて記述する、というルールに従っているようです。確かに、Webページや書籍などで一行がスペースに収まらないときに強制的に改行して表示する場合にこのような体裁になることはありますが、これははっきり言って読みづらいです。自分で改行を入れるわけですから、改行したときも読みやすくしたほうがいいでしょう(そもそも強制改行されて読みづらくなるというのを防ぐというのも、自分で改行を入れる意義の一つなわけですから)。あとparam()やforeach{}のインデント位置はそもそもなぜそうなのかよくわかりませんね(単なる編集ミスだろうか?)。この辺を踏まえて、私流にインデントを入れるとこんな感じです。}}こんな感じでPowerShellも基本的には他の言語のコード整形の流儀に準じればいいと思います。唯一PowerShellで特徴的なのは複数行に渡るパイプラインの記述方法になると思いますが、そこも特に深く考えずに一段インデントを深くする程度でいいのではないかと思います。あと「一貫性」の節で、「{」を改行の前に入れるか後に入れるかは統一させよとありますが、基本的にはそれでいいと思います。改行の後に「{」を入れるスタイル(私の書いた例)でも、改行後に「{」や「(」を入れるとコードの意味が変わったりエラーになったりする場合が出てくるので、その場合はわざわざ継続文字「`」を入れてやらずとも、その部分だけは改行前に入れてやってもいいかなと思います。」のところなどですね。あとスクリプトブロックをパラメータに取るコマンドレットの場合なんかもそうです。$_)}こういうのですね。この場合ForEach-Objectコマンドレットの-processパラメータ(ここではパラメータ名は省略されている)にスクリプトブロックを指定しているのですが、「{」はスクリプトブロックリテラルの開始文字なので、改行後に入れると正しく動作しません。Studioなどに比べると編集機能が貧弱で、構文を元に自動的に整形してくれたりしないので、ユーザーが自分ルールで整形していかないといけないです。基本的には他の言語と同様な、素直な整形を施してやれば特に読みづらくなるということもないかなと思います。@mutaguchiBooks書籍版。