Używanie polecenia Import-DSCResource

Import-DSCResource jest dynamicznym słowem kluczowym, którego można używać tylko wewnątrz bloku skryptu konfiguracji, aby zaimportować wszystkie zasoby wymagane w konfiguracji. Zasoby w obszarze $PSHOME są importowane automatycznie, ale nadal jest uznawane za najlepsze rozwiązanie w celu jawnego zaimportowania wszystkich zasobów używanych w konfiguracji.

Poniżej przedstawiono składnię .Import-DSCResource Podczas określania modułów według nazwy wymagane jest wyświetlenie listy poszczególnych modułów w nowym wierszu.

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

Parametry

  • -Name — Nazwy zasobów DSC, które należy zaimportować. Jeśli określono nazwę modułu, polecenie wyszukuje te zasoby DSC w tym module; w przeciwnym razie polecenie wyszukuje zasoby DSC we wszystkich ścieżkach zasobów DSC. Obsługiwane są symbole wieloznaczne.
  • -ModuleName — Nazwa modułu lub specyfikacja modułu. Jeśli określisz zasoby do zaimportowania z modułu, polecenie spróbuje zaimportować tylko te zasoby. Jeśli określisz tylko moduł, polecenie importuje wszystkie zasoby DSC w module.
  • -ModuleVersion — Począwszy od programu PowerShell 5.0, można określić wersję modułu, której ma używać konfiguracja. Aby uzyskać więcej informacji, zobacz Importowanie określonej wersji zainstalowanego zasobu.
Import-DscResource -ModuleName xActiveDirectory

Przykład: użyj Import-DSCResource w konfiguracji

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
...

Uwaga

Określanie wielu wartości nazw zasobów i nazw modułów w tym samym poleceniu nie jest obsługiwane. Może mieć niedeterministyczne zachowanie dotyczące tego, który zasób ma być ładowany z którego modułu w przypadku, gdy ten sam zasób istnieje w wielu modułach. Poniższe polecenie spowoduje błąd podczas kompilacji.

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

Kwestie, które należy wziąć pod uwagę podczas używania tylko parametru Name:

  • Jest to operacja intensywnie korzystająca z zasobów w zależności od liczby modułów zainstalowanych na maszynie.
  • Załaduje on pierwszy znaleziony zasób o podanej nazwie. W przypadku, gdy jest zainstalowany więcej niż jeden zasób o tej samej nazwie, może załadować niewłaściwy zasób.

Zalecane użycie to określenie –ModuleName parametru zgodnie z poniższym opisem -Name .

To użycie ma następujące korzyści:

  • Zmniejsza to wpływ na wydajność, ograniczając zakres wyszukiwania dla określonego zasobu.
  • Jawnie definiuje moduł definiujący zasób, zapewniając załadowanie odpowiedniego zasobu.

Uwaga

W programie PowerShell 5.0 zasoby DSC mogą mieć wiele wersji, a wersje można zainstalować na komputerze obok siebie. Jest to implementowane przez posiadanie wielu wersji modułu zasobów, które znajdują się w tym samym folderze modułu. Aby uzyskać więcej informacji, zobacz Używanie zasobów z wieloma wersjami.

Funkcja IntelliSense z Import-DSCResource

Podczas tworzenia konfiguracji DSC w środowisku ISE program PowerShell zapewnia funkcję IntelliSense dla zasobów i właściwości zasobów. Definicje zasobów w ramach ścieżki modułu $pshome są ładowane automatycznie. Podczas importowania zasobów przy użyciu słowa kluczowego Import-DSCResource zostaną dodane określone definicje zasobów, a funkcja Intellisense zostanie rozszerzona w celu uwzględnienia schematu zaimportowanych zasobów.

Funkcja IntelliSense w środowisku ISE dla zasobu DSC

Uwaga

Począwszy od programu PowerShell 5.0, uzupełnianie karty zostało dodane do środowiska ISE dla zasobów DSC i ich właściwości. Aby uzyskać więcej informacji, zobacz Zasoby.

Podczas kompilowania konfiguracji program PowerShell używa zaimportowanych definicji zasobów do weryfikowania wszystkich bloków zasobów w konfiguracji. Każdy blok zasobów jest weryfikowany przy użyciu definicji schematu zasobu dla następujących reguł.

  • Używane są tylko właściwości zdefiniowane w schemacie.
  • Typy danych dla każdej właściwości są poprawne.
  • Określono właściwości kluczy.
  • Nie jest używana żadna właściwość tylko do odczytu.
  • Walidacja typów map wartości.

Rozważ następującą konfigurację:

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"
        }
    }
}

Kompilowanie tej konfiguracji powoduje wystąpienie błędu.

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.

Funkcja IntelliSense i walidacja schematu umożliwiają przechwytywanie większej liczby błędów podczas analizowania i kompilacji, co pozwala uniknąć komplikacji w czasie wykonywania.

Uwaga

Każdy zasób DSC może mieć nazwę i przyjazną nazwę zdefiniowaną przez schemat zasobu. Poniżej znajdują się dwa pierwsze wiersze ciągu "MSFT_ServiceResource.shema.mof".

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

W przypadku korzystania z tego zasobu w konfiguracji można określić MSFT_ServiceResource lub usługę.

Różnice w programie PowerShell w wersji 4 i w wersji 5

Podczas tworzenia konfiguracji w programie PowerShell 4.0 w porównaniu z programem PowerShell 5.0 lub nowszym występuje wiele różnic. W tej sekcji zostaną wyróżnione różnice, które są istotne dla tego artykułu.

Wiele wersji zasobów

Instalowanie i używanie wielu wersji zasobów obok siebie nie było obsługiwane w programie PowerShell 4.0. Jeśli zauważysz problemy z importowaniem zasobów do konfiguracji, upewnij się, że masz zainstalowaną tylko jedną wersję zasobu.

Na poniższej ilustracji zainstalowano dwie wersje modułu xPSDesiredStateConfiguration .

Wiele wersji zasobów zainstalowanych w folderze

Skopiuj zawartość żądanej wersji modułu do najwyższego poziomu katalogu modułu.

Skopiuj żądaną wersję do katalogu modułu najwyższego poziomu

Lokalizacja zasobu

Podczas tworzenia i kompilowania konfiguracji zasoby mogą być przechowywane w dowolnym katalogu określonym przez element PSModulePath. W programie PowerShell 4.0 narzędzie LCM wymaga przechowywania wszystkich modułów zasobów DSC w obszarze "Program Files\WindowsPowerShell\Modules" lub $pshome\Modules. Począwszy od programu PowerShell 5.0, to wymaganie zostało usunięte, a moduły zasobów mogą być przechowywane w dowolnym katalogu określonym przez PSModulePathusługę .

Dodano element ModuleVersion

Począwszy od programu PowerShell 5.0, parametr umożliwia określenie wersji -ModuleVersion modułu do użycia w ramach konfiguracji.

Zobacz też