DSC 構成

適用先:Windows PowerShell 4.0、Windows PowerShell 5.0

DSC 構成は、特殊な関数を定義する PowerShell スクリプトです。 構成を定義するには、PowerShell キーワード Configuration を使用します。

Configuration MyDscConfiguration {
    Node "TEST-PC1" {
        WindowsFeature MyFeatureInstance {
            Ensure = 'Present'
            Name = 'RSAT'
        }
        WindowsFeature My2ndFeatureInstance {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}
MyDscConfiguration

スクリプトを .ps1 ファイルとして保存します。

構成構文

構成スクリプトは次の部分で構成されます。

  • Configuration ブロック。 これは、最も外側にあるスクリプト ブロックです。 このブロックを定義するには、Configuration キーワードを使用し、名前を指定します。 この場合、構成の名前は です MyDscConfiguration
  • 1 つまたは複数の Node ブロック。 これらは、構成するノード (コンピューターまたは VM) を定義します。 上記の構成では、 という名前TEST-PC1のコンピューターを対象とする Node ブロックが 1 つあります。 Node ブロックでは、複数のコンピューター名を使用できます。
  • 1 つまたは複数のリソース ブロック。 ここでは、構成するリソースのプロパティを設定します。 この場合、2 つのリソース ブロックがあり、それぞれが WindowsFeature リソースを呼び出します。

Note

WindowsFeature DSC リソースは、Windows Server コンピューターでのみ使用できます。 Windows 11などのクライアント OS を使用するコンピューターの場合は、代わりに WindowsOptionalFeature を使用する必要があります。 詳細については、 PSDscResources ドキュメントの「WindowsOptionalFeature」セクションを参照してください

Configuration ブロック内では、通常 PowerShell 関数内で可能なすべてのことを行うことができます。 前の例では、構成でターゲット コンピューターの名前をハード コーディングしたくない場合は、ノード名のパラメーターを追加できます。

この例では、構成のコンパイル時にノードの名前を ComputerName パラメーターとして渡すことで、ノードの名前を指定します。 名前の既定値は です localhost

Configuration MyDscConfiguration
{
    param
    (
        [string[]]$ComputerName='localhost'
    )

    Node $ComputerName
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

また、Node ブロックは複数のコンピューター名を受け入れることができます。 上の例では、-ComputerName パラメーターを使うか、またはコンピューターのコンマ区切りリストを Node ブロックに直接渡すことができます。

MyDscConfiguration -ComputerName "localhost", "Server01"

コンピューターの一覧を Node ブロックに指定する場合は、 構成内から配列表記を使用する必要があります。

Configuration MyDscConfiguration
{
    Node @('localhost', 'Server01')
    {
        WindowsFeature MyFeatureInstance
        {
            Ensure = 'Present'
            Name = 'RSAT'
        }

        WindowsFeature My2ndFeatureInstance
        {
            Ensure = 'Present'
            Name = 'Bitlocker'
        }
    }
}

MyDscConfiguration

構成のコンパイル

構成を適用する前に、MOF ドキュメントにコンパイルする必要があります。 そのためには、PowerShell 関数の場合と同じように構成を呼び出します。 例の最後の行には構成を呼び出すための構成の名前のみが含まれています。

Note

構成を呼び出すには、(他の PowerShell 関数と同様に) 関数がグローバル スコープ内にある必要があります。 そのためには、スクリプトで "ドット ソース" を行うか、F5 キーを使用するか、または ISE で [スクリプトの実行] をクリックして、構成スクリプトを実行します。 スクリプトでドット ソースを行うには、構成を含むスクリプト ファイルの名前が myConfig.ps1 である場合、. .\myConfig.ps1 でコマンドを実行します。

構成を呼び出すと、結果は次のようになります。

  • すべての変数が解決されます
  • 構成と同じ名前のフォルダーが現在のディレクトリ内に作成されます。
  • NodeName.mof という名前のファイルが新しいディレクトリ内に作成されます。NodeName は、構成のターゲット ノードの名前です。 複数のノードがある場合は、ノードごとに MOF ファイルが作成されます。

Note

MOF ファイルには、ターゲット ノードのすべての構成情報が含まれています。 このため、このファイルをセキュリティ保護することが重要です。 詳細については、「MOF ファイルのセキュリティ保護」を参照してください。

上記の最初の構成をコンパイルすると、次のフォルダー構造となります。

. .\MyDscConfiguration.ps1
MyDscConfiguration
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/23/2015   4:32 PM           2842 localhost.mof

2 番目の例のように構成でパラメーターを受け取る場合は、コンパイル時に指定する必要があります。 その場合、次のようになります。

. .\MyDscConfiguration.ps1
MyDscConfiguration -ComputerName 'MyTestNode'
    Directory: C:\users\default\Documents\DSC Configurations\MyDscConfiguration
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/23/2015   4:32 PM           2842 MyTestNode.mof

構成での新しいリソースの使用

前の例を実行した場合、リソースを明示的にインポートしないで使用することについて警告されることがあります。 今日、DSC には PSDesiredStateConfiguration モジュールの一部として 12 のリソースが付属しています。

コマンドレット Get-DscResource を使用して、どのリソースがシステムにインストールされ、LCM で使用できるかを決定できます。 これらのモジュールが $env:PSModulePath に配置され、Get-DscResource によって正しく認識された後、構成内に読み込む必要があります。

Import-DscResource は、Configuration ブロック内でのみ認識される動的なキーワードであり、コマンドレットではありません。 Import-DscResource は、次の 2 つのパラメーターをサポートしています。

  • ModuleName は、Import-DscResource を使用する場合に推奨される方法です。 これは、インポートするリソースを含むモジュールの名前 (およびモジュール名の文字列配列) を受け取ります。
  • Name は、インポートするリソースの名前です。 これは、Get-DscResource によって "Name" として返されるフレンドリ名ではありませんが、リソース スキーマを定義するときに使用されるクラス名です (Get-DscResource によって ResourceType として返されます)。

Import-DSCResource の使用について詳しくは、「Import-DSCResource の使用」をご覧ください

PowerShell の v4 と v5 の違い

PowerShell 4.0 では DSC リソースを格納する必要がある場所が違います。 詳しくは、「リソースの場所」をご覧ください。

参照