Använda Import-DSCResource

Import-DSCResource är ett dynamiskt nyckelord som bara kan användas i ett konfigurationsskriptblock för att importera de resurser som behövs i konfigurationen. Resurser under $PSHOME importeras automatiskt, men det anses fortfarande vara bästa praxis att uttryckligen importera alla resurser som används i konfigurationen.

Syntaxen för Import-DSCResource visas nedan. När du anger moduler efter namn är det ett krav att visa var och en på en ny rad.

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

Parametrar

  • -Name – De DSC-resursnamn som du måste importera. Om modulnamnet anges söker kommandot efter dessa DSC-resurser i den här modulen. Annars söker kommandot igenom DSC-resurserna i alla DSC-resurssökvägar. Jokertecken stöds.
  • -ModuleName – Modulnamnet eller modulspecifikationen. Om du anger resurser som ska importeras från en modul försöker kommandot endast importera dessa resurser. Om du endast anger modulen importerar kommandot alla DSC-resurser i modulen.
  • -ModuleVersion – Från och med PowerShell 5.0 kan du ange vilken version av en modul som en konfiguration ska använda. Mer information finns i Importera en specifik version av en installerad resurs.
Import-DscResource -ModuleName xActiveDirectory

Exempel: Använd Import-DSCResource i en konfiguration

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

Anteckning

Det går inte att ange flera värden för resursnamn och modulnamn i samma kommando. Det kan ha ett icke-deterministiskt beteende för vilken resurs som ska läsas in från vilken modul om samma resurs finns i flera moduler. Kommandot nedan resulterar i fel under kompilering.

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

Saker att tänka på när du bara använder parametern Namn:

  • Det är en resursintensiv åtgärd beroende på antalet moduler som är installerade på datorn.
  • Den läser in den första resursen som hittas med det angivna namnet. Om det finns fler än en resurs med samma namn installerat kan den läsa in fel resurs.

Den rekommenderade användningen är att ange –ModuleName med parametern enligt beskrivningen -Name nedan.

Den här användningen har följande fördelar:

  • Det minskar prestandapåverkan genom att begränsa sökomfånget för den angivna resursen.
  • Den definierar uttryckligen modulen som definierar resursen, vilket säkerställer att rätt resurs läses in.

Anteckning

I PowerShell 5.0 kan DSC-resurser ha flera versioner och versioner kan installeras på en dator sida vid sida. Detta implementeras genom att ha flera versioner av en resursmodul som finns i samma modulmapp. Mer information finns i Använda resurser med flera versioner.

IntelliSense med Import-DSCResource

När du redigerar DSC-konfigurationen i ISE tillhandahåller PowerShell IntelliSense för resurser och resursegenskaper. Resursdefinitioner under $pshome modulsökvägen läses in automatiskt. När du importerar resurser med hjälp av nyckelordet Import-DSCResource läggs de angivna resursdefinitionerna till och IntelliSense utökas för att inkludera den importerade resursens schema.

IntelliSense i ISE för en DSC-resurs

Anteckning

Från och med PowerShell 5.0 lades tabbifyllning till i ISE för DSC-resurser och deras egenskaper. Mer information finns i Resurser.

När konfigurationen kompileras använder PowerShell de importerade resursdefinitionerna för att verifiera alla resursblock i konfigurationen. Varje resursblock verifieras med hjälp av resursens schemadefinition för följande regler.

  • Endast egenskaper som definierats i schemat används.
  • Datatyperna för varje egenskap är korrekta.
  • Egenskaper för nycklar anges.
  • Ingen skrivskyddad egenskap används.
  • Validering för värdekartortyper.

Överväg följande konfiguration:

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

Kompilering av den här konfigurationen resulterar i ett fel.

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.

Med IntelliSense och schemavalidering kan du fånga upp fler fel under parsnings- och kompileringstiden, vilket undviker komplikationer vid körning.

Anteckning

Varje DSC-resurs kan ha ett namn och ett FriendlyName som definieras av resursens schema. Nedan visas de två första raderna i "MSFT_ServiceResource.shema.mof".

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

När du använder den här resursen i en konfiguration kan du ange MSFT_ServiceResource eller tjänst.

Skillnader i PowerShell v4 och v5

Det finns flera skillnader när du redigerar konfigurationer i PowerShell 4.0 jämfört med PowerShell 5.0 och senare. Det här avsnittet belyser de skillnader som du ser som relevanta för den här artikeln.

Flera resursversioner

Det gick inte att installera och använda flera versioner av resurser sida vid sida i PowerShell 4.0. Om du märker problem med att importera resurser till konfigurationen kontrollerar du att du bara har en version av resursen installerad.

I avbildningen nedan installeras två versioner av modulen xPSDesiredStateConfiguration .

Flera resursversioner installerade i mappen

Kopiera innehållet i önskad modulversion till den översta nivån i modulkatalogen.

Kopiera önskad version till modulkatalogen på den översta nivån

Resursplats

När du redigerar och kompilerar konfigurationer kan dina resurser lagras i valfri katalog som anges av PSModulePath. I PowerShell 4.0 kräver LCM att alla DSC-resursmoduler lagras under "Program Files\WindowsPowerShell\Modules" eller $pshome\Modules. Från och med PowerShell 5.0 har det här kravet tagits bort och resursmoduler kan lagras i valfri katalog som anges av PSModulePath.

ModuleVersion har lagts till

Från och med PowerShell 5.0 kan du med parametern -ModuleVersion ange vilken version av en modul som ska användas i konfigurationen.

Se även