Dela via


Uppbyggnad av en kommandobaserad DSC-resurs

DSC-resurser tillhandahåller ett standardiserat gränssnitt för att hantera inställningarna för ett system. En resurs definierar egenskaper som du kan hantera och implementerar den kod som behövs för att hämta en instans av resursen.

Kommandobaserade DSC-resurser definieras med minst två filer:

  1. Ett DSC-resursmanifest som talar om för DSC hur man interagerar med resursen.
  2. En eller flera körbara filer och deras beroenden för att hantera instanser av resursen.

DSC-resursmanifest

DSC-resursmanifest definieras som JSON-filer. För att DSC ska kunna identifiera en JSON-fil som ett manifest måste filen uppfylla följande kriterier:

  1. Filen måste kunna identifieras i PATH miljövariabeln.
  2. Filnamnet måste sluta med .dsc.resource.json.

När DSC söker i det lokala systemet efter tillgängliga kommandobaserade DSC-resurser söker den i varje mapp i PATH efter filer som använder namngivningskonventionen för DSC-resursmanifestet. DSC parsar sedan var och en av de identifierade filerna och validerar dem mot JSON-schemat för DSC-resursmanifestet.

Om JSON-filen verifieras mot schemat kan DSC använda DSC-resursen.

Manifestet måste minst definiera:

  • Den version av JSON-schemat för DSC-resursmanifestet som den är kompatibel med.
  • Det fullständigt kvalificerade namnet på resursen, till exempel Microsoft.Windows/Registry. Den fullständigt kvalificerade namnsyntaxen är <owner>[.<group>][.<area>]/<name>. Grupp- och områdeskomponenterna i det fullständigt kvalificerade namnet gör det möjligt att organisera resurser i namnområden.
  • Hur DSC kan anropa kommandot för att hämta det aktuella tillståndet för en resursinstans.
  • Ett sätt att verifiera en instans. Detta kan vara något av följande:
    • Ett JSON-schema som beskriver en instans
    • Ett kommando som DSC måste anropa för att hämta schemat vid körning
    • Ett kommando för att verifiera kapslade DSC-resurser. Det här sista alternativet gäller endast för DSC-gruppresurser och DSC-providerresurser.

Manifestet kan också definiera:

  • Hur DSC kan anropa kommandot för att testa om en instans är i önskat tillstånd.
  • Hur DSC kan anropa kommandot för att ange en instans till önskat tillstånd.
  • Innebörden av slutkoder som inte är noll som returneras av kommandot .
  • Hur DSC kan anropa kommandot för att hantera andra DSC-resurser när resursen är en DSC-gruppresurs eller en DSC-providerresurs.
  • Metadata om resursen, till exempel dess författare och en kort beskrivning.

Om manifestet inte definierar hur en instans av resursen ska testas utför DSC ett syntetiskt test för resursinstanser. DSC:s syntetiska test hämtar alltid det faktiska tillståndet för en instans och gör en strikt skiftlägeskänslig jämförelse av instansens egenskaper med önskat tillstånd. Det syntetiska testet ignorerar alla egenskaper med prefixet understreck (_) eller dollartecken ($). Om någon av egenskaperna inte är exakt samma som det definierade önskade tillståndet rapporterar DSC instansen som icke-kompatibel.

Om manifestet inte definierar hur du ställer in en instans av DSC-resursen kan DSC inte använda resursen för att framtvinga önskat tillstånd.

Manifestet behöver inte ange samma körbara fil för varje åtgärd. Definitionen för varje åtgärd är oberoende.

Körbara filer för DSC-resurs

Kommandobaserade DSC-resurser kräver alltid en körbar fil för att DSC ska köras. DSC-resursmanifestet behöver inte paketeras med den körbara filen. Den körbara filen kan vara valfri körbar fil, till exempel ett binärt program eller ett shell-skript. En resurs kan använda olika körbara filer för olika åtgärder.

För att DSC ska kunna använda en körbar fil måste den kunna identifieras i PATH miljövariabeln. DSC anropar den körbara filen en gång per åtgärd med hjälp av slutkoden som returnerades av den körbara filen för att avgöra om kommandot lyckades. DSC behandlar slutkoden 0 som en framgång och alla andra slutkoder som ett fel.

Indata

DSC skickar indata till kommandobaserade DSC-resurser som antingen en JSON-datablob över stdin eller som en uppsättning argumentflaggor och värden. Indatahantering definieras per åtgärd i DSC-resursmanifestet.

När DSC skickar indata som JSON över stdin är databloben JSON-representationen av en instans önskade tillstånd. Det här är det mest robusta alternativet för en resurs eftersom det gör det möjligt för resursen att stödja komplexa egenskaper med kapslade objekt.

När DSC skickar indata som argument genereras ett par argument för var och en av de angivna egenskaperna. Det första argumentet är namnet på egenskapen med prefixet --, till exempel --duration. Det andra argumentet är egenskapens värde. Ordningen på argumentparen är inte garanterad. Den här indatametoden stöder inte komplexa egenskaper.

Utdata

Den körbara filen för en kommandobaserad DSC-resurs måste returnera JSON-data till stdout när de anropas av DSC. Utdatakodningen måste vara UTF-8. När resursen returnerar tillståndet för en instans validerar DSC JSON-data mot resursens instansschema.

För DSC-providerresurser förväntar sig DSC att den körbara filen passerar genom instanstillstånden för de resurser som den hanterar som antingen en enda JSON-matris eller som en serie JSON-rader.

Kommandobaserade DSC-resurser kan rapportera loggningsinformation till DSC genom att skicka JSON-rader till stderr. Varje loggpost måste vara ett JSON-objekt som innehåller två nycklar:

  1. Nyckeln message definierar den läsbara strängen för loggposten.
  2. Nyckeln level definierar om meddelandet representerar en Error, en Warningeller Information.

DSC samlar in meddelanden från resurser och visar dem i resultatet för en konfigurationsåtgärd. När DSC anropar en resurs direkt utanför en konfiguration samlar den inte in meddelandena. I stället skickas de bara till stderr.