Verwendung von Import-DSCResource

Gilt für: PowerShell 7, Azure-Computerkonfiguration

Import-DSCResource ist ein dynamisches Schlüsselwort, das nur innerhalb eines Configuration Blocks verwendet werden kann, um alle Ressourcen zu importieren, die in Ihrer DSC-Konfiguration benötigt werden. DSC-Ressourcen unter $PSHOME werden automatisch importiert, aber es empfiehlt sich, alle DSC-Ressourcen, die in Ihrer DSC-Konfiguration verwendet werden, explizit zu importieren.

Die Syntax für Import-DSCResource ist unten dargestellt. Wenn Sie Module nach Namen angeben, ist es erforderlich, jedes Modul in einer neuen Zeile aufzulisten.

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

Die Parameter

  • Name : Die Ressourcen, die Sie importieren müssen. Wenn der Modulname angegeben ist, sucht der Befehl nach diesen DSC-Ressourcen in diesem Modul. Andernfalls durchsucht der Befehl die DSC-Ressourcen in allen Modulen. Platzhalter werden unterstützt.
  • ModuleName : Der Modulname oder die Modulspezifikation. Wenn Sie DSC-Ressourcen angeben, die aus einem Modul importiert werden sollen, versucht der Befehl, nur diese DSC-Ressourcen zu importieren. Wenn Sie nur das Modul angeben, importiert der Befehl alle DSC-Ressourcen im Modul.
  • ModuleVersion : Mit diesem Parameter können Sie die Version eines Moduls angeben, das von einer Konfiguration verwendet werden soll. Standardmäßig wird die neueste verfügbare Version der DSC-Ressource importiert.
Import-DSCResource -ModuleName xActiveDirectory

Beispiel: Verwenden von Import-DSCResource in einer DSC-Konfiguration

Configuration MSDSCConfiguration {
    # Search for and imports two DSC Resources from the PSDscResources module.
    Import-DSCResource -ModuleName PSDscResources -Name Service, Registry

    # Search for and import Resource1 from the module that defines it. If only
    # the -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 Service
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the PSDscResources module.
    # When specifying the ModuleName parameter, it is a requirement to list each
    # on a new line.
    Import-DSCResource -ModuleName PSDscResources
    # You can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

Hinweis

Das Angeben mehrerer Werte für DSC-Ressourcennamen und Modulnamen im selben Befehl wird nicht unterstützt. Es kann ein nicht deterministisches Verhalten aufweisen, welche DSC-Ressource aus welchem Modul geladen werden soll, wenn dieselbe DSC-Ressource in mehreren Modulen vorhanden ist. Der folgende Befehl gibt während der Kompilierung einen in-Fehler zurück.

Import-DSCResource -Name Service, TimeZone -ModuleName PSDscResources, xPSDesiredStateConfiguration

Dinge, die Sie beachten sollten, wenn Sie nur den Parameter Name verwenden:

  • Es handelt sich um einen ressourcenintensiven Vorgang, der von der Anzahl der auf dem Computer installierten Module abhängt.
  • Es lädt die erste DSC-Ressource, die mit dem angegebenen Namen gefunden wurde. Wenn mehr als eine DSC-Ressource mit demselben Namen installiert ist, kann es sein, dass die falsche DSC-Ressource geladen wird.

Es wird empfohlen, ModuleName mit dem Parameter Name anzugeben, wie unten beschrieben.

Diese Verwendung hat folgende Vorteile:

  • Die Auswirkungen auf die Leistung werden reduziert, indem der Suchbereich für die angegebene DSC-Ressource eingeschränkt wird.
  • Es definiert explizit das Modul, das die DSC-Ressource bereitstellt, und stellt sicher, dass die richtige DSC-Ressource geladen wird.

Hinweis

DSC-Ressourcen können über mehrere Versionen verfügen, und Versionen können nebeneinander auf einem Computer installiert werden. Dies wird implementiert, indem mehrere Versionen eines DSC-Ressourcenmoduls vorhanden sind, die im selben Modulordner enthalten sind.

IntelliSense mit Import-DSCResource

Beim Erstellen der DSC-Konfiguration in VS Code stellt PowerShell IntelliSense für DSC-Ressourcen und DSC-Ressourceneigenschaften bereit. Ressourcendefinitionen unter dem $PSHOME Modulpfad werden automatisch geladen. Wenn Sie DSC-Ressourcen mithilfe des Import-DSCResource Schlüsselworts importieren, werden die angegebenen DSC-Ressourcendefinitionen hinzugefügt, und IntelliSense wird erweitert, um die importierten Schemas der DSC-Ressourcen einzuschließen.

IntelliSense in VS Code für eine DSC-Ressource

Beim Kompilieren der DSC-Konfiguration verwendet PowerShell die importierten DSC-Ressourcendefinitionen, um die DSC-Ressourcenblöcke im Configuration Block zu überprüfen. Jeder DSC-Ressourcenblock wird durch die Schemadefinition der DSC-Ressource für die folgenden Regeln überprüft:

  • Es werden nur Eigenschaften angegeben, die im Schema definiert sind.
  • Die Datentypen für jede Eigenschaft sind korrekt.
  • Schlüsseleigenschaften angegeben werden.
  • Es wird keine schreibgeschützte Eigenschaft angegeben.

Betrachten Sie die folgende DSC-Konfiguration:

Configuration SchemaValidationInCorrectEnumValue {
    Import-DSCResource -Name User -Module PSDscResources

    User ExampleUser {
        UserName = 'ExampleDscUser'
        Ensure   = 'Invalid'
    }
}

Das Kompilieren dieser DSC-Konfiguration führt zu einem Fehler.

Write-Error: C:\code\dsc\sample.ps1:4:5
Line |
   4 |      User ExampleUser {
     |      ~~~~
     | At least one of the values 'Invalid' is not supported or   
     | valid for property 'Ensure' on class 'User'. Please specify
     | only supported values: Present, Absent.

InvalidOperation: Errors occurred while processing configuration
'SchemaValidationInCorrectEnumValue'.

IntelliSense und die Schemaüberprüfung ermöglichen es Ihnen, mehr Fehler während der Analyse- und Kompilierungszeit abzufangen und zukünftige Komplikationen zu vermeiden.

Hinweis

Jede DSC-Ressource kann über einen Namen und einen FriendlyName verfügen, die durch das Schema der DSC-Ressource definiert werden. Unten sehen Sie die ersten beiden Zeilen von MSFT_UserResource.schema.mof.

[ClassVersion("1.0.0"), FriendlyName("User")]
class MSFT_UserResource : OMI_BaseResource

Wenn Sie diese DSC-Ressource in einem Configuration Block verwenden, können Sie oder UserangebenMSFT_UserResource.

Siehe auch