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 が展開されます。
注
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 パラメーターを使用すると、構成内で使用するモジュールのバージョンを指定できます。