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.

IntelliSense v prostředí ISE pro prostředek DSC

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 .

Více verzí prostředků nainstalovaných ve složce

Zkopírujte obsah požadované verze modulu na nejvyšší úroveň adresáře modulu.

Zkopírujte požadovanou verzi do adresáře modulu nejvyšší úrovně.

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.

Viz také