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.
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 .
Skopiuj zawartość żądanej wersji modułu do najwyższego poziomu katalogu modułu.
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 PSModulePath
usł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.