次の方法で共有


Import-DSCResource の使用

Import-DSCResource は動的キーワードで、構成スクリプトブロック内でのみ使用して、構成に必要なリソースをインポートできます。 $PSHOME の下のリソースは自動的にインポートされますが、構成で使用されるすべてのリソースを明示的にインポートすることがベスト プラクティスと見なされます。

Import-DSCResourceの構文を以下に示します。 モジュールを名前で指定する場合は、それぞれを新しい行にリストする必要があります。

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

パラメーター

  • -Name - インポートする必要がある DSC リソース名。 モジュール名を指定すると、コマンドはこのモジュール内でこれらの DSC リソースを検索します。それ以外の場合、コマンドはすべての DSC リソース パス内の DSC リソースを検索します。 ワイルドカードがサポートされています。
  • -ModuleName - モジュール名、またはモジュール仕様。 モジュールからインポートするリソースを指定すると、コマンドはそれらのリソースのみのインポートを試みます。 モジュールのみを指定すると、このコマンドはモジュール内のすべての DSC リソースをインポートします。
  • -ModuleVersion - PowerShell 5.0 以降では、構成で使用するモジュールのバージョンを指定できます。 詳細については、「 インストール済みリソースの特定のバージョンをインポートする」を参照してください。
Import-DscResource -ModuleName xActiveDirectory

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

Configuration MSDSCConfiguration
{
    # Search for and imports Service, File, and Registry from the module PSDesiredStateConfiguration.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration -Name Service, File, Registry

    # Search for and import Resource1 from the module that defines it.
    # If only –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 File
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the module PSDesiredStateConfiguration.
    # When specifying the modulename parameter, it is a requirement to list each on a new line.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration
    # In PowerShell 5.0 and later, you can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

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

Import-DscResource -Name UserConfigProvider*,TestLogger1 -ModuleName UserConfigProv,PsModuleForTestLogger

Name パラメーターのみを使用する場合の考慮事項:

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

推奨される使用法は、以下で説明するように、-Name パラメーターを使用して–ModuleNameを指定することです。

この使用法には、次の利点があります。

  • 指定されたリソースの検索範囲を制限することで、パフォーマンスへの影響を軽減します。
  • リソースを定義するモジュールを明示的に定義し、正しいリソースがロードされるようにします。

PowerShell 5.0 では、DSC リソースに複数のバージョンを含めることができ、バージョンをコンピューターに並べてインストールできます。 これは、同じモジュールフォルダに含まれるリソースモジュールの複数のバージョンを持つことによって実装されます。 詳細については、「 複数のバージョンでのリソースの使用」を参照してください。

Import-DSCResource を使用した Intellisense

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

DSC リソースの ISE のインテリセンス

PowerShell 5.0 以降では、DSC リソースとそのプロパティの ISE にタブ補完が追加されました。 詳しくは、リソースに関する記事をご覧ください。

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

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

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

Configuration SchemaValidationInCorrectEnumValue
{
    # It is best practice to explicitly import all resources used in your Configuration.
    # This includes resources that are imported automatically, like WindowsFeature.
    Import-DSCResource -Name WindowsFeature
    Node localhost
    {
        WindowsFeature ROLE1
        {
            Name = "Telnet-Client"
            Ensure = "Invalid"
        }
    }
}

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

PSDesiredStateConfiguration\WindowsFeature: At least one of the values 'Invalid' is not supported or
valid for property 'Ensure' on class 'WindowsFeature'. Please specify only supported values:
Present, Absent.

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

各 DSC リソースには、名前と、リソースのスキーマによって定義される FriendlyName を指定できます。 以下は「MSFT_ServiceResource.shema.mof」の最初の2行です。

[ClassVersion("1.0.0"),FriendlyName("Service")]
class MSFT_ServiceResource : OMI_BaseResource

このリソースを構成で使用する場合は、 MSFT_ServiceResource または サービスを指定できます。

PowerShell v4 と v5 の違い

PowerShell 4.0 と PowerShell 5.0 以降で構成を作成するときには、複数の違いが表示されます。 このセクションでは、この記事に関連する違いを強調します。

複数のリソースバージョン

複数のバージョンのリソースを並べてインストールして使用することは、PowerShell 4.0 ではサポートされていませんでした。 構成へのリソースのインポートで問題が発生した場合は、リソースのバージョンが 1 つだけインストールされていることを確認してください。

次の図では、 xPSDesiredStateConfiguration モジュールの 2 つのバージョンがインストールされています。

フォルダにインストールされている複数のリソースバージョン

目的のモジュールバージョンの内容をモジュールディレクトリの最上位レベルにコピーします。

目的のバージョンを最上位モジュールディレクトリにコピーします

リソースの場所

構成を作成およびコンパイルする場合、リソースは PSModulePath で指定された任意のディレクトリに格納できます。 PowerShell 4.0 では、LCM では、すべての DSC リソース モジュールを "Program Files\WindowsPowerShell\Modules" または $pshome\Modules に格納する必要があります。 PowerShell 5.0 以降では、この要件は削除され、リソース モジュールは PSModulePath で指定された任意のディレクトリに格納できます。

ModuleVersion が追加されました

PowerShell 5.0 以降では、 -ModuleVersion パラメーターを使用すると、構成内で使用するモジュールのバージョンを指定できます。

こちらも参照ください