Použití příkazu Import-DSCResource
Import-DSCResource
je dynamické klíčové slovo, které lze použít pouze uvnitř bloku konfiguračního skriptu k importu prostředků potřebných v konfiguraci. Prostředky v rámci se $PSHOME
importují automaticky, ale i tak se považuje za osvědčený postup explicitně importovat všechny prostředky použité v konfiguraci.
Syntaxe pro Import-DSCResource
je znázorněná níže. Při zadávání modulů podle názvu je nutné každý z nich uvést na novém řádku.
Import-DscResource [-Name <ResourceName(s)>] [-ModuleName <ModuleName>] [-ModuleVersion <ModuleVersion>]
Parametry
-
-Name
– Názvy prostředků DSC, které musíte importovat. Pokud je název modulu zadán, příkaz vyhledá tyto prostředky DSC v rámci tohoto modulu; v opačném případě příkaz prohledá prostředky DSC ve všech cestách k prostředkům DSC. Zástupné cardy jsou podporované. -
-ModuleName
– Název modulu nebo specifikace modulu. Pokud zadáte prostředky, které se mají importovat z modulu, příkaz se pokusí importovat pouze tyto prostředky. Pokud zadáte pouze modul, příkaz importuje všechny prostředky DSC v modulu. -
-ModuleVersion
– Počínaje PowerShellem 5.0 můžete určit, jakou verzi modulu má konfigurace používat. Další informace najdete v tématu Import konkrétní verze nainstalovaného prostředku.
Import-DscResource -ModuleName xActiveDirectory
Příklad: Použití Import-DSCResource v rámci konfigurace
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
...
Poznámka
Zadání více hodnot pro názvy prostředků a modulů ve stejném příkazu se nepodporuje. Může mít ne deterministické chování ohledně toho, který prostředek se má z kterého modulu načíst, pokud stejný prostředek existuje ve více modulech. Níže uvedený příkaz způsobí chybu během kompilace.
Import-DscResource -Name UserConfigProvider*,TestLogger1 -ModuleName UserConfigProv,PsModuleForTestLogger
Co je potřeba zvážit při použití pouze parametru Name:
- Jedná se o operaci náročnou na prostředky v závislosti na počtu modulů nainstalovaných na počítači.
- Načte první nalezený prostředek s daným názvem. V případě, že je nainstalovaný více než jeden prostředek se stejným názvem, může se načíst nesprávný prostředek.
Doporučené použití je zadat –ModuleName
pomocí parametru -Name
, jak je popsáno níže.
Toto použití má následující výhody:
- Snižuje dopad na výkon omezením oboru vyhledávání pro zadaný prostředek.
- Explicitně definuje modul definující prostředek a zajišťuje načtení správného prostředku.
Poznámka
V PowerShellu 5.0 můžou mít prostředky DSC několik verzí a verze se dají nainstalovat na počítač vedle sebe. To se implementuje tak, že máte několik verzí modulu prostředků, které jsou obsažené ve stejné složce modulu. Další informace najdete v tématu Použití prostředků s více verzemi.
IntelliSense s Import-DSCResource
Při vytváření konfigurace DSC v prostředí ISE poskytuje PowerShell IntelliSense pro prostředky a vlastnosti prostředků. Definice prostředků v cestě k modulu se načtou $pshome
automaticky.
Při importu prostředků pomocí klíčového Import-DSCResource
slova se přidají definice zadaných prostředků a intellisense se rozbalí tak, aby zahrnovala schéma importovaného prostředku.
Poznámka
Od PowerShellu 5.0 se do ISE přidalo dokončování pomocí tabulátoru pro prostředky DSC a jejich vlastnosti. Další informace najdete v tématu Zdroje informací.
Při kompilaci konfigurace PowerShell používá definice importovaných prostředků k ověření všech bloků prostředků v konfiguraci. Každý blok prostředků se ověří pomocí definice schématu prostředku pro následující pravidla.
- Používají se pouze vlastnosti definované ve schématu.
- Datové typy pro každou vlastnost jsou správné.
- Jsou zadány vlastnosti klíčů.
- Nepoužívá se žádná vlastnost jen pro čtení.
- Ověřování typů map hodnot
Zvažte následující konfiguraci:
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"
}
}
}
Kompilace této konfigurace způsobí chybu.
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 a ověřování schématu umožňují zachytit více chyb během analýzy a kompilace a vyhnout se tak komplikacím za běhu.
Poznámka
Každý prostředek DSC může mít název a friendlyName definovaný schématem prostředku. Níže jsou uvedeny první dva řádky MSFT_ServiceResource.shema.mof.
[ClassVersion("1.0.0"),FriendlyName("Service")]
class MSFT_ServiceResource : OMI_BaseResource
Při použití tohoto prostředku v konfiguraci můžete zadat MSFT_ServiceResource nebo služba.
Rozdíly v PowerShellu v4 a v5
Při vytváření konfigurací v PowerShellu 4.0 vs. PowerShellu 5.0 a novějších se setkáte s několika rozdíly. V této části se zvýrazní rozdíly, které jsou pro tento článek relevantní.
Více verzí prostředků
PowerShell 4.0 nepodporuje souběžnou instalaci a používání více verzí prostředků. Pokud si všimnete problémů s importem prostředků do konfigurace, ujistěte se, že máte nainstalovanou jenom jednu verzi prostředku.
Na následujícím obrázku jsou nainstalované dvě verze modulu xPSDesiredStateConfiguration .
Zkopírujte obsah požadované verze modulu na nejvyšší úroveň adresáře modulu.
Umístění prostředku
Při vytváření a kompilaci konfigurací můžou být vaše prostředky uložené v libovolném adresáři určeném v cestě PSModulePath.
V PowerShellu 4.0 LCM vyžaduje, aby všechny moduly prostředků DSC byly uložené ve složce Program Files\WindowsPowerShell\Modules nebo $pshome\Modules
. Od PowerShellu 5.0 se tento požadavek odebral a moduly prostředků je možné uložit v libovolném adresáři určeném nástrojem PSModulePath
.
Přidaná verze modulu
Počínaje PowerShellem 5.0 parametr umožňuje určit verzi modulu, -ModuleVersion
která se má v rámci konfigurace použít.