PowerShell
Erstellen von klassenbasierten DSC-Ressourcen
Suche…
Einführung
Ab PowerShell Version 5.0 können Sie PowerShell-Klassendefinitionen zum Erstellen von DSC-Ressourcen (Desired State Configuration) verwenden.
Für die [DscResource()]
DSC-Ressourcen gibt es ein [DscResource()]
Attribut, das auf die Klassendefinition angewendet wird, und eine [DscProperty()]
Ressource, um die vom DSC-Ressourcenbenutzer konfigurierbaren Eigenschaften [DscProperty()]
.
Bemerkungen
Eine klassenbasierte DSC-Ressource muss:
- Mit dem Attribut
[DscResource()]
- Definieren Sie eine
Test()
Methode, die[bool]
zurückgibt. - Definieren Sie eine
Get()
Methode, die ihren eigenen Objekttyp zurückgibt (z. B.[Ticket]
). - Definieren Sie eine
Set()
Methode, die[void]
zurückgibt. - Mindestens eine
Key
DSC-Eigenschaft
Nach dem Erstellen einer klassenbasierten PowerShell DSC-Ressource muss diese aus einem Modul mithilfe einer Modulmanifestdatei (.psd1) "exportiert" werden. Innerhalb des DscResourcesToExport
wird der DscResourcesToExport
verwendet, um ein Array von DSC-Ressourcen (Klassennamen) für das Exportieren aus dem Modul zu deklarieren. Dadurch können Konsumenten des DSC-Moduls die klassenbasierten Ressourcen innerhalb des Moduls "sehen".
Erstellen Sie eine DSC-Ressource-Skeleton-Klasse
[DscResource()]
class File {
}
In diesem Beispiel wird veranschaulicht, wie der äußere Abschnitt einer PowerShell-Klasse erstellt wird, die eine DSC-Ressource deklariert. Sie müssen noch den Inhalt der Klassendefinition ausfüllen.
DSC-Ressourcenskelett mit Schlüsseleigenschaft
[DscResource()]
class Ticket {
[DscProperty(Key)]
[string] $TicketId
}
Eine DSC-Ressource muss mindestens eine Schlüsseleigenschaft deklarieren. Die Schlüsseleigenschaft identifiziert die Ressource eindeutig von anderen Ressourcen. Angenommen, Sie erstellen eine DSC-Ressource, die ein Ticket in einem Ticketsystem darstellt. Jedes Ticket würde eindeutig mit einer Ticket-ID dargestellt.
Jede Eigenschaft, die dem Benutzer der DSC-Ressource [DscProperty()]
muss mit dem Attribut [DscProperty()]
werden. Dieses Attribut akzeptiert einen key
, um anzuzeigen, dass die Eigenschaft ein Schlüsselattribut für die DSC-Ressource ist.
DSC-Ressource mit obligatorischer Eigenschaft
[DscResource()]
class Ticket {
[DscProperty(Key)]
[string] $TicketId
[DscProperty(Mandatory)]
[string] $Subject
}
Beim Erstellen einer DSC-Ressource werden Sie häufig feststellen, dass nicht jede einzelne Eigenschaft obligatorisch sein sollte. Es gibt jedoch einige grundlegende Eigenschaften, die Sie sicherstellen möchten, dass sie vom Benutzer der DSC-Ressource konfiguriert werden. Sie verwenden den Parameter Mandatory
des Attributs [DscResource()]
, um eine Eigenschaft zu deklarieren, die der Benutzer der DSC-Ressource benötigt.
Im obigen Beispiel haben wir einer Ticket
Ressource, die ein eindeutiges Ticket in einem Ticketsystem darstellt, eine Subject
Eigenschaft hinzugefügt und diese als Mandatory
Eigenschaft festgelegt.
DSC-Ressource mit erforderlichen Methoden
[DscResource()]
class Ticket {
[DscProperty(Key)]
[string] $TicketId
# The subject line of the ticket
[DscProperty(Mandatory)]
[string] $Subject
# Get / Set if ticket should be open or closed
[DscProperty(Mandatory)]
[string] $TicketState
[void] Set() {
# Create or update the resource
}
[Ticket] Get() {
# Return the resource's current state as an object
$TicketState = [Ticket]::new()
return $TicketState
}
[bool] Test() {
# Return $true if desired state is met
# Return $false if desired state is not met
return $false
}
}
Dies ist eine vollständige DSC-Ressource, die alle wesentlichen Anforderungen zum Erstellen einer gültigen Ressource veranschaulicht. Die Methodenimplementierungen sind nicht vollständig, sondern sollen die Grundstruktur aufzeigen.