Delen via


Import-DSCResource gebruiken

Import-DSCResource is een dynamisch trefwoord, dat alleen kan worden gebruikt in een configuratiescriptblok om resources te importeren die nodig zijn in uw configuratie. Resources onder $PSHOME worden automatisch geïmporteerd, maar het wordt nog steeds beschouwd als best practice om alle resources die in uw configuratie worden gebruikt expliciet te importeren.

De syntaxis voor Import-DSCResource wordt hieronder weergegeven. Wanneer u modules op naam opgeeft, is het een vereiste om elk op een nieuwe regel weer te geven.

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

Parameters

  • -Name - De DSC-resourcenamen die u moet importeren. Als de modulenaam is opgegeven, zoekt de opdracht naar deze DSC-resources in deze module; anders doorzoekt de opdracht de DSC-resources in alle DSC-resourcepaden. Jokertekens worden ondersteund.
  • -ModuleName - De modulenaam of modulespecificatie. Als u resources opgeeft die u wilt importeren vanuit een module, probeert u met de opdracht alleen die resources te importeren. Als u alleen de module opgeeft, worden met de opdracht alle DSC-resources in de module geïmporteerd.
  • -ModuleVersion - Vanaf PowerShell 5.0 kunt u opgeven welke versie van een module een configuratie moet gebruiken. Zie Een specifieke versie van een geïnstalleerde resource importeren voor meer informatie.
Import-DscResource -ModuleName xActiveDirectory

Voorbeeld: Import-DSCResource binnen een configuratie gebruiken

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

Notitie

Het opgeven van meerdere waarden voor resourcenamen en modulenamen in dezelfde opdracht wordt niet ondersteund. Het kan niet-deterministisch gedrag hebben over welke resource uit welke module moet worden geladen als dezelfde resource in meerdere modules bestaat. De onderstaande opdracht resulteert in een fout tijdens de compilatie.

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

Aandachtspunten bij het gebruik van alleen de parameter Name:

  • Het is een resource-intensieve bewerking, afhankelijk van het aantal modules dat op de computer is geïnstalleerd.
  • De eerste gevonden resource wordt geladen met de opgegeven naam. In het geval dat er meer dan één resource met dezelfde naam is geïnstalleerd, kan de verkeerde resource worden geladen.

Het aanbevolen gebruik is om op te geven –ModuleName met de -Name parameter, zoals hieronder wordt beschreven.

Dit gebruik heeft de volgende voordelen:

  • Het vermindert de impact op de prestaties door het zoekbereik voor de opgegeven resource te beperken.
  • Het definieert expliciet de module die de resource definieert, zodat de juiste resource wordt geladen.

Notitie

In PowerShell 5.0 kunnen DSC-resources meerdere versies hebben en kunnen versies naast elkaar op een computer worden geïnstalleerd. Dit wordt geïmplementeerd door meerdere versies van een resourcemodule te hebben die zich in dezelfde modulemap bevinden. Zie Resources gebruiken met meerdere versies voor meer informatie.

IntelliSense met Import-DSCResource

Bij het ontwerpen van de DSC-configuratie in ISE biedt PowerShell IntelliSense voor resources en resource-eigenschappen. Resourcedefinities onder het $pshome modulepad worden automatisch geladen. Wanneer u resources importeert met behulp van het Import-DSCResource trefwoord, worden de opgegeven resourcedefinities toegevoegd en wordt IntelliSense uitgebreid met het schema van de geïmporteerde resource.

Intellisense in de ISE voor een DSC-resource

Notitie

Vanaf PowerShell 5.0 is tabvoltooiing toegevoegd aan de ISE voor DSC-resources en hun eigenschappen. Zie Resources voor meer informatie.

Bij het compileren van de configuratie gebruikt PowerShell de geïmporteerde resourcedefinities om alle resourceblokken in de configuratie te valideren. Elk resourceblok wordt gevalideerd met behulp van de schemadefinitie van de resource voor de volgende regels.

  • Alleen eigenschappen die in het schema zijn gedefinieerd, worden gebruikt.
  • De gegevenstypen voor elke eigenschap zijn juist.
  • Eigenschappen van sleutels worden opgegeven.
  • Er wordt geen alleen-lezen-eigenschap gebruikt.
  • Validatie voor typen waardetoewijzingen.

Houd rekening met de volgende configuratie:

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

Het compileren van deze configuratie resulteert in een fout.

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.

Met IntelliSense- en schemavalidatie kunt u meer fouten detecteren tijdens parserings- en compilatietijd, waardoor complicaties tijdens runtime worden voorkomen.

Notitie

Elke DSC-resource kan een naam en een FriendlyName hebben die zijn gedefinieerd door het schema van de resource. Hieronder staan de eerste twee regels van 'MSFT_ServiceResource.shema.mof'.

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

Wanneer u deze resource in een configuratie gebruikt, kunt u MSFT_ServiceResource of Service opgeven.

Verschillen tussen PowerShell v4 en v5

Er zijn meerdere verschillen die u ziet bij het ontwerpen van configuraties in PowerShell 4.0 versus PowerShell 5.0 en hoger. In deze sectie worden de verschillen beschreven die relevant zijn voor dit artikel.

Meerdere resourceversies

Het naast elkaar installeren en gebruiken van meerdere versies van resources wordt niet ondersteund in PowerShell 4.0. Als u problemen ondervindt bij het importeren van resources in uw configuratie, moet u ervoor zorgen dat u slechts één versie van de resource hebt geïnstalleerd.

In de onderstaande afbeelding zijn twee versies van de module xPSDesiredStateConfiguration geïnstalleerd.

Meerdere resourceversies geïnstalleerd in map

Kopieer de inhoud van de gewenste moduleversie naar het hoogste niveau van de modulemap.

Kopieer de gewenste versie naar de map van de module op het hoogste niveau

Resourcelocatie

Bij het ontwerpen en compileren van configuraties kunnen uw resources worden opgeslagen in elke map die is opgegeven door uw PSModulePath. In PowerShell 4.0 vereist de LCM dat alle DSC-resourcemodules worden opgeslagen onder 'Program Files\WindowsPowerShell\Modules' of $pshome\Modules. Vanaf PowerShell 5.0 is deze vereiste verwijderd en kunnen resourcemodules worden opgeslagen in elke map die is opgegeven door PSModulePath.

ModuleVersion toegevoegd

Vanaf PowerShell 5.0 kunt u met de -ModuleVersion parameter opgeven welke versie van een module moet worden gebruikt in uw configuratie.

Zie ook