次の方法で共有


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 リソースを呼び出します。

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

構成ブロック内では、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内から配列表記を使用する必要があります。

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

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

MyDscConfiguration

構成のコンパイル

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

構成を呼び出すには、関数がグローバル スコープ内にある必要があります (他の PowerShell 関数と同様に)。 これを実現するには、スクリプトを「ドットソーシング」するか、F5 キーを使用するか、ISE の [スクリプトの実行(Run Script )] ボタンをクリックして設定スクリプトを実行します。 スクリプトをドットソース化するには、myConfig.ps1 が構成を含むスクリプトファイルの名前であるコマンド. .\myConfig.ps1を実行します。

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

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

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 を使用する推奨される方法です。 インポートするリソースを含むモジュールの名前 (およびモジュール名の文字列配列) を受け入れます。
  • 名前 は、インポートするリソースの名前です。 これは、Get-DscResource によって "Name" として返されるフレンドリ名ではなく、リソース スキーマを定義するときに使用されるクラス名です (Get-DscResource によって ResourceType として返されます)。

Import-DSCResource の使用の詳細については、「Import-DSCResource の使用」を参照してください。

PowerShell v4 と v5 の違い

PowerShell 4.0 で DSC リソースを格納する必要がある場所には違いがあります。 詳細については、「 リソースの場所」を参照してください。

こちらもご覧ください