次の方法で共有


Import-DSCResource の使用

適用対象: PowerShell 7、Azure Automanage のマシン構成機能

Import-DSCResourceは動的キーワード (keyword)であり、DSC 構成で必要なリソースをインポートするためにブロック内Configurationでのみ使用できます。 の DSC $PSHOME リソースは自動的にインポートされますが、 DSC 構成で使用されるすべての DSC リソースを明示的にインポートすることをお勧めします。

Import-DSCResource の構文は次に示すとおりです。 モジュールを名前で指定する場合は、それぞれを新しい行に一覧表示する必要があります。

Import-DscResource [-Name <ResourceName(s)>]
 [-ModuleName <ModuleName>]
 [-ModuleVersion <ModuleVersion>]

パラメーター

  • 名前 - インポートする必要があるリソース。 モジュール名が指定されている場合、コマンドはそのモジュール内でこれらの DSC リソースを検索します。それ以外の場合、コマンドはすべてのモジュールの DSC リソースを検索します。 ワイルドカードを利用できます。
  • ModuleName - モジュール名またはモジュールの仕様。 モジュールからインポートする DSC リソースを指定した場合、コマンドはそれらの DSC リソースのみをインポートしようとします。 モジュールのみを指定した場合、コマンドはモジュール内のすべての DSC リソースをインポートします。
  • ModuleVersion - このパラメーターで構成で使用するモジュールのバージョンを指定できます。 既定では、利用可能な最新バージョンの DSC リソースがインポートされます。
Import-DSCResource -ModuleName xActiveDirectory

例: DSC 構成内で Import-DSCResource を使用する

Configuration MSDSCConfiguration {
    # Search for and imports two DSC Resources from the PSDscResources module.
    Import-DSCResource -ModuleName PSDscResources -Name Service, Registry

    # Search for and import Resource1 from the module that defines it. If only
    # the -Name parameter is used then resources can belong to different
    # PowerShell modules as well. TimeZone resource is from the
    # ComputerManagementDSC module which is not installed by default. As a best
    # practice, list each requirement on a different line if possible.  This
    # makes reviewing  multiple changes in source control a bit easier.
    Import-DSCResource -Name Service
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the PSDscResources module.
    # When specifying the ModuleName parameter, it is a requirement to list each
    # on a new line.
    Import-DSCResource -ModuleName PSDscResources
    # You can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

Note

DSC リソース名とモジュール名に複数の値を同じコマンドで指定することはサポートされていません。 同じ DSC リソースが複数のモジュールに存在する場合、どの DSC リソースがどのモジュールから読み込まれるかについて、非決定的な動作を持つことができます。 次のコマンドでは、コンパイル中に エラーが返されます。

Import-DSCResource -Name Service, TimeZone -ModuleName PSDscResources, xPSDesiredStateConfiguration

Name パラメーターのみを使用する場合は、次の点を考慮する必要があります。

  • これは、マシンにインストールされているモジュールの数に応じて、リソースを大量に消費する操作です。
  • 指定された名前で見つかった最初の DSC リソースが読み込まれます。 同じ名前の DSC リソースが複数インストールされている場合は、間違った DSC リソースが読み込まれる可能性があります。

推奨される使用法は、次に示すように、Name パラメーターを使用して ModuleName を指定することです。

この使用方法には次のようなメリットがあります。

  • 指定した DSC リソースの検索範囲を制限することで、パフォーマンスへの影響を軽減します。
  • DSC リソースを提供するモジュールを明示的に定義し、正しい DSC リソースが読み込まれるかどうかを確認します。

Note

DSC リソースは複数のバージョンを持つ場合があり、バージョンはコンピューターにサイド バイ サイドでインストールできます。 これは、同じモジュール フォルダーに含まれる DSC リソース モジュールの複数のバージョンを持つことによって実装されます。

Import-DSCResource を使用した IntelliSense

VS Code で DSC 構成を作成する場合、PowerShell は DSC リソースと DSC リソースのプロパティに IntelliSense を提供します。 $PSHOME モジュール パスの下にあるリソースの定義が、自動的に読み込まれます。 キーワード (keyword)を使用して DSC リソースをImport-DSCResourceインポートすると、指定した DSC リソース定義が追加され、インポートされた DSC リソースのスキーマが含まれるよう IntelliSense が展開されます。

DSC リソースの VS Code での IntelliSense

DSC 構成をコンパイルするときに、PowerShell はインポートされた DSC リソース定義を使用して、 ブロック内の DSC リソース ブロックを Configuration 検証します。 各 DSC リソース ブロックは、DSC リソースのスキーマ定義によって、次の規則について検証されます。

  • スキーマで定義されているプロパティのみが指定されます。
  • 各プロパティのデータ型が正しい。
  • キー プロパティが指定されている。
  • 読み取り専用プロパティは指定されません。

次の DSC 構成を検討してください。

Configuration SchemaValidationInCorrectEnumValue {
    Import-DSCResource -Name User -Module PSDscResources

    User ExampleUser {
        UserName = 'ExampleDscUser'
        Ensure   = 'Invalid'
    }
}

この DSC 構成をコンパイルすると、エラーが発生します。

Write-Error: C:\code\dsc\sample.ps1:4:5
Line |
   4 |      User ExampleUser {
     |      ~~~~
     | At least one of the values 'Invalid' is not supported or   
     | valid for property 'Ensure' on class 'User'. Please specify
     | only supported values: Present, Absent.

InvalidOperation: Errors occurred while processing configuration
'SchemaValidationInCorrectEnumValue'.

IntelliSense とスキーマ検証を使用すると、解析とコンパイル時により多くのエラーをキャッチできるため、将来の複雑さを回避できます。

Note

各 DSC リソースには、DSC リソースのスキーマによって定義された名前と FriendlyName を指定できます。 の最初の 2 行を次に MSFT_UserResource.schema.mof示します。

[ClassVersion("1.0.0"), FriendlyName("User")]
class MSFT_UserResource : OMI_BaseResource

ブロックでこの DSC リソースを使用するConfiguration場合は、 または Userを指定MSFT_UserResourceできます。

関連項目