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 構成をコンパイルするときに、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
できます。