Wijzigingen in gedrag in PowerShell-Desired State Configuration voor gastconfiguratie

Voordat u begint, is het een goed idee om het overzicht van gastconfiguratie te lezen.

Er is een video-walk through van dit document beschikbaar.

Gastconfiguratie gebruikt Desired State Configuration (DSC) versie 3 om machines te controleren en te configureren. De DSC-configuratie definieert de status van de machine. Er zijn veel belangrijke verschillen in de manier waarop DSC wordt geïmplementeerd in gastconfiguratie.

Gastconfiguratie maakt gebruik van PowerShell 7 op verschillende platforms

Gastconfiguratie is zo ontworpen dat de ervaring van het Windows en Linux consistent kan zijn. In beide besturingssysteemomgevingen kan iemand met PowerShell DSC-kennis configuraties maken en publiceren met behulp van scriptvaardigheden.

Gastconfiguratie maakt alleen gebruik van PowerShell DSC versie 3 en is niet afhankelijk van de vorige implementatie van DSC voor Linux of de nx-providers die in die opslagplaats zijn opgenomen.

Gastconfiguratie werkt in PowerShell 7.1.3 voor Windows en PowerShell 7.2 preview 6 voor Linux. Vanaf versie 7.2 is de module niet meer onderdeel meer van de PowerShell-installatie en wordt deze in plaats daarvan geïnstalleerd als een PSDesiredStateConfiguration module van de PowerShell Gallery.

Meerdere configuraties

Gastconfiguratie ondersteunt het toewijzen van meerdere configuraties aan dezelfde computer. Er zijn geen speciale stappen vereist in het besturingssysteem van de gastconfiguratie-extensie. U hoeft geen gedeeltelijke configuraties te configureren.

Afhankelijkheden worden beheerd per configuratie

Wanneer een configuratie wordt verpakt met behulp vande beschikbare hulpprogramma's, worden de vereiste afhankelijkheden voor de configuratie opgenomen in een .zip bestand. Machines extraheren de inhoud in een unieke map voor elke configuratie. De agent die wordt geleverd door de gastconfiguratie-extensie maakt een speciale PowerShell-sessie voor elke configuratie, met behulp van een die het automatisch laden van modules beperkt tot alleen het pad waar het $Env:PSModulePath pakket is geëxtraheerd.

Deze wijziging heeft meerdere voordelen.

  • Het is mogelijk om verschillende moduleversies voor elke configuratie op dezelfde computer te gebruiken.
  • Wanneer een configuratie niet meer wordt verwijderd op een computer, wordt de volledige map waar deze is uitgepakt veilig door de agent verwijderd zonder dat u gedeelde afhankelijkheden hoeft te beheren in configuraties.
  • Het is niet vereist om meerdere versies van een module in een centrale service te beheren.

Artefacten worden beheerd als pakketten

De Azure Automation State Configuration omvat artefactbeheer voor modules en configuratiescripts. Zodra beide zijn gepubliceerd in de service, kan het script worden gecompileerd naar de MOF-indeling. Op dezelfde manier vereist Windows pull-server ook het beheer van configuraties en modules op het webservice-exemplaar. De DSC-extensie heeft daarentegen een vereenvoudigd model waarbij alle artefacten samen worden verpakt en opgeslagen op een locatie die toegankelijk is vanaf de doelmachine met behulp van een HTTPS-aanvraag (Azure Blob Storage is de populaire optie).

Gastconfiguratie maakt alleen gebruik van het vereenvoudigde model waarbij alle artefacten samen worden verpakt en toegankelijk zijn vanaf de doelmachine via HTTPS. U hoeft geen modules, scripts of compilaties in de service te publiceren. Een wijziging is dat het pakket altijd een gecompileerde MOF moet bevatten. Het is niet mogelijk om een scriptbestand op te nemen in het pakket en te compileren op de doelmachine.

Maximale grootte van aangepast configuratiepakket

In Azure Automation statusconfiguratie waren DSC-configuraties beperkt in grootte. Gastconfiguratie ondersteunt een totale pakketgrootte van 100 MB (vóór compressie). Er is geen specifieke limiet voor de grootte van het MOF-bestand in het pakket.

De configuratiemodus wordt ingesteld in het pakketartefact

Bij het maken van het configuratiepakket wordt de modus ingesteld met behulp van de volgende opties:

  • Controleren: controleert de compatibiliteit van een computer. Er worden geen wijzigingen aangebracht.
  • AuditandSet: verifieert en herstelt de nalevingstoestand van de machine. Er worden wijzigingen aangebracht als de machine niet compatibel is.

De modus wordt ingesteld in het pakket in plaats van in de local Configuration Manager-service omdat deze per configuratie kan verschillen wanneer er meerdere configuraties worden toegewezen.

Parameterondersteuning via Azure Resource Manager

Parameters die zijn ingesteld door de eigenschaps array in gastconfiguratietoewijzingen overschrijven de statische tekst in een MOF-configuratiebestand wanneer het bestand configurationParameter wordt opgeslagen op een computer. Met parameters kunnen aanpassingen en wijzigingen worden beheerd door een operator van de service-API zonder dat opdrachten op de computer hoeven te worden uitgevoerd.

Parameters in Azure Policy die waarden doorgeven aan gastconfiguratietoewijzingen, moeten tekenreekstype zijn. Het is niet mogelijk om matrices via parameters door te geven, zelfs niet als de DSC-resource matrices ondersteunt.

Triggerset vanaf externe computer

Een uitdaging in eerdere versies van DSC was het corrigeren van drift op schaal zonder veel aangepaste code en afhankelijkheid van externe WinRM-verbindingen. Gastconfiguratie lost dit probleem op. Gebruikers van de gastconfiguratie hebben controle over de correctie van driften via Herstel op aanvraag.

De reeks bevat de Get-methode

Wanneer gastconfiguratie een computer controleert of configureert, wordt dezelfde reeks gebeurtenissen gebruikt voor zowel Windows als Linux. De belangrijkste wijziging in het gedrag is dat de methode door de service wordt aangeroepen om details over de status van de Get machine te retourneren.

  1. De agent wordt eerst Test uitgevoerd om te bepalen of de configuratie de juiste status heeft.
  2. Als het pakket is ingesteld op , bepaalt de Booleaanse waarde die wordt geretourneerd door de functie of de Azure Resource Manager-status voor de gasttoewijzing Audit Compatibel/Niet-compatibel moet zijn.
  3. Als het pakket is ingesteld op , bepaalt de Booleaanse waarde of de machine moet worden herstellen door de configuratie toe te passen AuditandSet met behulp van de methode Set . Als de Test methode False retourneert, Set wordt uitgevoerd. Als Test True retourneert, Set wordt niet uitgevoerd.
  4. Ten laatste voert de provider uit om de huidige status van elke instelling te retourneren, zodat er details beschikbaar zijn, zowel over waarom een machine niet compatibel is als om te bevestigen dat de huidige status Get compatibel is.

Speciale vereisten voor Get

De Get functiemethode heeft speciale vereisten voor Azure Policy gastconfiguratie die niet nodig zijn voor Windows PowerShell Desired State Configuration.

  • De hashtabel die wordt geretourneerd, moet een eigenschap met de naam Reasons bevatten.
  • De eigenschap Reasons moet een matrix zijn.
  • Elk item in de matrix moet een hashtabel zijn met sleutels met de naam Code en Phrase.
  • Er mogen geen andere waarden dan de hashtabel worden geretourneerd.

De eigenschap Reasons wordt door de service gebruikt om te standaardiseren hoe nalevingsinformatie wordt weergegeven. U kunt elk item in Redenen zien als een 'reden' dat de resource wel of niet compatibel is. De eigenschap is een matrix omdat een resource om meer dan één reden niet meer aan de regels voldoet.

De eigenschappen Code en Phrase worden verwacht door de service. Wanneer u een aangepaste resource ontwerpt, stelt u de tekst (meestal stdout) in die u wilt laten zien als de reden waarom de resource niet compatibel is als de waarde voor Phrase. Code heeft specifieke opmaakvereisten, zodat rapportage duidelijk informatie kan weergeven over de resource die wordt gebruikt om de controle uit te voeren. Deze oplossing maakt gastconfiguraties extenseerbaar. Elke opdracht kan worden uitgevoerd zolang de uitvoer kan worden geretourneerd als een tekenreekswaarde voor de eigenschap Phrase.

  • Code (tekenreeks): de naam van de resource, herhaald en vervolgens een korte naam zonder spaties als id om de reden. Deze drie waarden moeten worden door dubbele puntse scheidingstekens zonder spaties.
    • Een voorbeeld hiervan is registry:registry:keynotpresent
  • Zinsdeel (tekenreeks): door mensen leesbare tekst om uit te leggen waarom de instelling niet compatibel is.
    • Een voorbeeld hiervan is The registry key $key isn't present on the machine.
$reasons = @()
$reasons += @{
  Code = 'Name:Name:ReasonIdentifer'
  Phrase = 'Explain why the setting is not compliant'
}
return @{
    reasons = $reasons
}

Wanneer u opdrachtregelprogramma's gebruikt om informatie op te halen die wordt retourneert in Get, kan het zijn dat het hulpprogramma uitvoer retourneert die u niet had verwacht. Hoewel u de uitvoer in PowerShell vast legt, is de uitvoer mogelijk ook naar de standaardfout geschreven. U kunt dit probleem voorkomen door de uitvoer om te leiden naar null.

De ingesloten klasse Reasons

In op scripts gebaseerde resources (alleen Windows) wordt de klasse Reasons als volgt opgenomen in het schema-MOF-bestand.

[ClassVersion("1.0.0.0")]
class Reason
{
  [Read] String Phrase;
  [Read] String Code;
};

[ClassVersion("1.0.0.0"), FriendlyName("ResourceName")]
class ResourceName : OMI_BaseResource
{
  [Key, Description("Example description")] String Example;
  [Read, EmbeddedInstance("Reason")] String Reasons[];
};

In op klassen gebaseerde resources (Windows en Linux) wordt de klasse als volgt Reason opgenomen in de PowerShell-module. Linux is hoofdlettergevoelig, dus de 'C' in Code en 'P' in Woordgroep moeten een hoofdletter hebben.

enum ensure {
  Absent
  Present
}

class Reason {
  [DscProperty()]
  [string] $Code

  [DscProperty()]
  [string] $Phrase
}

[DscResource()]
class Example {

  [DscProperty(Key)]
  [ensure] $ensure

  [DscProperty()]
  [Reason[]] $Reasons

  [Example] Get() {
    # return current current state
  }

  [void] Set() {
    # set the state
  }

  [bool] Test() {
    # check whether state is correct
  }
}

Als de resource vereiste eigenschappen heeft, moeten deze eigenschappen ook parallel met de Get klasse worden Reason geretourneerd. Als niet is opgenomen, bevat de service een Reason 'catch-all'-gedrag dat de invoerwaarden vergelijkt met en de waarden die worden geretourneerd door , en biedt een gedetailleerde Get Get vergelijking als Reason .

Configuratienamen

De naam van de aangepaste configuratie moet overal consistent zijn. De naam van het bestand voor het inhoudspakket, de configuratienaam in het MOF-bestand en de naam van de gasttoewijzing in de Azure Resource Manager sjabloon, moeten hetzelfde .zip zijn.

Algemene DSC-functies zijn niet beschikbaar tijdens openbare preview van gastconfiguratie

Tijdens de openbare preview biedt de gastconfiguratie geen ondersteuning voor het opgeven van afhankelijkheden tussen machines met behulp van WaitFor*-resources. Het is niet mogelijk dat de ene computer de status controleert en wacht tot een andere machine de status bereikt voordat de voortgang wordt uitgevoerd.

De verwerking van opnieuw opstarten is niet beschikbaar in de openbare preview-versie van gastconfiguratie, waaronder de $global:DSCMachineStatus is niet beschikbaar. Configuraties kunnen een knooppunt niet opnieuw opstarten tijdens of aan het einde van een configuratie.

Bekende compatibiliteitsproblemen met ondersteunde modules

De module in de PowerShell Gallery en de module die wordt geleverd met Windows worden ondersteund door Microsoft en zijn een veelgebruikte PsDscResources PSDesiredStateConfiguration set resources voor DSC. Totdat de PSDscResources module is bijgewerkt voor DSCv3, moet u rekening houden met de volgende bekende compatibiliteitsproblemen.

  • Gebruik geen resources uit de PSDesiredStateConfiguration module die wordt geleverd met Windows. Schakel in plaats daarvan over naar PSDscResources .
  • Gebruik de WindowsFeature resources , , en niet in WindowsFeatureSet WindowsOptionalFeature WindowsOptionalFeatureSet PsDscResources . Er is een bekend probleem bij het laden van de DISM module in PowerShell 7.1.3 op Windows Server, waarvoor een update nodig is.

De nx-resources voor Linux die zijn opgenomen in de DSC voor Linux-repo zijn geschreven in een combinatie van de talen C en Python. Omdat het pad voor DSC op Linux bestaat uit het gebruik van PowerShell, zijn de bestaande nx-resources niet compatibel met DSCv3. Totdat er een nieuwe module met ondersteunde resources voor Linux beschikbaar is, is het vereist om aangepaste resources te maken.

Naast elkaar bestaan met DSC-versie 3 en eerdere versies

DSC-versie 3 in gastconfiguratie kan naast oudere versies bestaan die zijn geïnstalleerd in Windows en Linux. De implementaties zijn afzonderlijk. Er is echter geen conflictdetectie tussen DSC-versies, dus probeer niet dezelfde instellingen te beheren.

Volgende stappen