Condividi tramite


Modifiche al comportamento in PowerShell Desired State Configuration per la configurazione del computer

Prima di iniziare, è consigliabile leggere la panoramica della configurazione del computer.

È disponibile una procedura dettagliata video di questo documento.

La configurazione del computer usa PowerShell Desired State Configuration (PSDSC) versione 3 per controllare e configurare i computer. La configurazione DSC definisce lo stato in cui deve trovarsi il computer. Esistono molte differenze significative nel modo in cui DSC viene implementato nella configurazione del computer.

La configurazione del computer usa PowerShell 7 multipiattaforma

La configurazione del computer è progettata in modo che l'esperienza di gestione di Windows e Linux possa essere coerente. In entrambi gli ambienti del sistema operativo, un utente con conoscenza di PowerShell DSC può creare e pubblicare configurazioni usando le competenze di scripting.

La configurazione del computer usa solo PowerShell DSC versione 3 e non si basa sull'implementazione precedente di DSC per Linux o sui nx* provider inclusi in tale repository.

A partire dalla versione 1.26.33, la configurazione del computer funziona in PowerShell 7.1.2 per Windows e PowerShell 7.2 preview 6 per Linux. A partire dalla versione 7.2, il modulo PSDesiredStateConfiguration è passato dall'essere incluso nell'installazione di PowerShell e viene invece installato come modulo da PowerShell Gallery.

Più configurazioni

La configurazione del computer supporta l'assegnazione di più configurazioni allo stesso computer. Non sono necessari passaggi speciali all'interno del sistema operativo dell'estensione di configurazione del computer. Non è necessario configurare configurazioni parziali.

Le dipendenze vengono gestite per ogni configurazione

Quando una configurazione viene inserita in un pacchetto usando gli strumenti disponibili, le dipendenze necessarie per la configurazione vengono incluse in un .zip file. I computer estraggono il contenuto in una cartella univoca per ogni configurazione. L'agente fornito dall'estensione di configurazione del computer crea una sessione di PowerShell dedicata per ogni configurazione. Usa un oggetto $Env:PSModulePath che limita il caricamento automatico dei moduli solo al percorso in cui è stato estratto il pacchetto.

Questa modifica presenta diversi vantaggi:

  • È possibile usare versioni di modulo diverse per ogni configurazione, nello stesso computer.
  • Quando una configurazione non è più necessaria in un computer, l'agente elimina in modo sicuro l'intera cartella in cui è stata estratta la configurazione. Non è necessario gestire le dipendenze condivise tra le configurazioni.
  • Non è necessario gestire più versioni di qualsiasi modulo in un servizio centrale.

Gli artefatti vengono gestiti come pacchetti

La funzionalità Automazione di Azure State Configuration include la gestione degli artefatti per moduli e script di configurazione. Una volta pubblicati entrambi nel servizio, lo script può essere compilato in formato MOF. Analogamente, Windows Pull Server richiede anche la gestione di configurazioni e moduli nell'istanza del servizio Web. Al contrario, l'estensione DSC ha un modello semplificato in cui tutti gli artefatti vengono inseriti in un pacchetto e archiviati in un percorso accessibile dal computer di destinazione usando una richiesta HTTPS. Archiviazione BLOB di Azure è l'opzione più diffusa per l'hosting degli artefatti.

La configurazione del computer usa solo il modello semplificato in cui tutti gli artefatti vengono raggruppati e accessibili dal computer di destinazione tramite HTTPS. Non è necessario pubblicare moduli, script o compilare nel servizio. Una modifica consiste nel fatto che il pacchetto deve includere sempre un MOF compilato. Non è possibile includere un file di script nel pacchetto e compilarlo nel computer di destinazione.

Dimensioni massime del pacchetto di configurazione personalizzato

In Automazione di Azure State Configuration le configurazioni DSC erano limitate. La configurazione del computer supporta una dimensione totale del pacchetto di 100 MB prima della compressione. Non esiste alcun limite specifico per le dimensioni del file MOF all'interno del pacchetto.

La modalità di configurazione viene impostata nell'artefatto del pacchetto

Quando si crea il pacchetto di configurazione, la modalità viene impostata usando le opzioni seguenti:

  • Audit - Verifica la conformità di un computer. Non vengono apportate modifiche.
  • AuditandSet - Verifica e corregge lo stato di conformità del computer. Le modifiche vengono apportate se il computer non è conforme.

La modalità è impostata nel pacchetto anziché nel servizio Gestione configurazione locale perché ogni configurazione può essere applicata con una modalità diversa.

Supporto dei parametri tramite Azure Resource Manager

I parametri impostati dalla matrice di proprietà configurationParameter nelle assegnazioni di configurazione del computer sovrascrivono il testo statico all'interno di un file MOF di configurazione quando il file viene archiviato in un computer. I parametri consentono la personalizzazione e un operatore per controllare le modifiche dall'API del servizio senza dover eseguire comandi all'interno del computer.

I parametri in Criteri di Azure che passano valori alle assegnazioni di configurazione del computer devono essere di tipo stringa. Non è possibile passare matrici tramite parametri, anche se la risorsa DSC supporta matrici.

Set di trigger dall'esterno del computer

Una sfida nelle versioni precedenti di DSC è stata la correzione della deriva su larga scala senza codice personalizzato e la dipendenza da connessioni remote WinRM. La configurazione guest risolve questo problema. Gli utenti della configurazione del computer hanno il controllo sulla correzione della deriva tramite Correzione su richiesta.

Sequence include il metodo Get

Quando la configurazione del computer controlla o configura un computer la stessa sequenza di eventi viene usata sia per Windows che per Linux. La modifica rilevante del comportamento è che il Get metodo viene chiamato dal servizio per restituire i dettagli sullo stato del computer.

  1. L'agente viene prima eseguito Test per determinare se la configurazione è nello stato corretto.
  2. Se il pacchetto è impostato su Audit, il valore booleano restituito dalla funzione determina se lo stato di Azure Resource Manager per l'assegnazione guest deve essere Compliant o NonCompliant.
  3. Se il pacchetto è impostato su AuditandSet, il valore booleano determina se correggere il computer applicando la configurazione usando il Set metodo . Se il Test metodo restituisce $false, Set viene eseguito. Se Test restituisce $true, Set non viene eseguito.
  4. Infine, il provider viene eseguito Get per restituire lo stato corrente di ogni impostazione, in modo che i dettagli siano disponibili sia sul motivo per cui un computer non è conforme e per verificare che lo stato corrente sia conforme.

Requisiti speciali per Get

Il metodo DSC Get prevede requisiti speciali per la configurazione del computer che non sono stati necessari per DSC.

  • La tabella hash restituita deve includere una proprietà denominata Reasons.
  • La proprietà Reasons deve essere una matrice.
  • Ogni elemento della matrice deve essere una tabella hash con chiavi denominate Code e Phrase.
  • Non devono essere restituiti valori diversi dalla tabella hash.

La proprietà Reasons viene utilizzata dal servizio per standardizzare la modalità di presentazione delle informazioni di conformità. È possibile considerare ogni elemento in Motivi come un messaggio su come la risorsa è o non è conforme. La proprietà è una matrice perché una risorsa può non essere conforme per più di un motivo.

Le proprietà Code e Phrase sono richieste dal servizio. Quando si crea una risorsa personalizzata, impostare il testo da visualizzare come motivo per cui la risorsa non è conforme come valore per Phrase. La proprietà Code presenta requisiti di formattazione specifici, in modo che nei report le informazioni sulla risorsa con cui si esegue il controllo vengano visualizzate chiaramente. Questa soluzione rende estendibile la configurazione guest. È possibile eseguire qualsiasi comando, a condizione che l'output possa essere restituito come valore stringa per la proprietà Phrase.

  • Codice (stringa): nome della risorsa, ripetuto e quindi un nome breve senza spazi come identificatore per il motivo. Questi tre valori devono essere delimitati da due punti senza spazi.
    • Ad esempio, registry:registry:keynotpresent
  • Frase (stringa): testo leggibile per spiegare perché l'impostazione non è conforme.
    • Ad esempio, 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
}

Quando si usano gli strumenti da riga di comando per ottenere informazioni che restituiscono in Get, è possibile che lo strumento restituisca l'output non previsto. Anche se si acquisisce l'output in PowerShell, l'output potrebbe anche essere stato scritto in un errore standard. Per evitare questo problema, prendere in considerazione il reindirizzamento dell'output a null.

Classe incorporata della proprietà Reasons

Nelle risorse basate su script (solo Windows), la classe Reasons è inclusa nel file MOF dello schema come indicato di seguito.

[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[];
};

Nelle risorse basate su classi (Windows e Linux), la classe Reason è inclusa nel modulo PowerShell come indicato di seguito. Linux fa distinzione tra maiuscole e minuscole, quindi C in e P in Code Phrase deve essere maiuscola.

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

Se la risorsa ha proprietà necessarie, tali proprietà devono essere restituite anche in Get parallelo con la classe Reason . Se Reason non è incluso, il servizio include un comportamento "catch-all" che confronta i valori di input e Get i valori restituiti da Gete fornisce un confronto dettagliato come Motivo.

Nomi di configurazione

Il nome della configurazione personalizzata deve essere coerente ovunque. Questi elementi devono avere lo stesso nome:

  • File .zip per il pacchetto di contenuto
  • Nome della configurazione nel file MOF
  • Nome dell'assegnazione della configurazione del computer nel modello di Azure Resource Manager

Esecuzione di comandi in Windows PowerShell

L'esecuzione di moduli Windows in PowerShell può essere ottenuta usando il modello seguente nelle risorse DSC. Il modello seguente imposta temporaneamente l'oggetto PSModulePath per eseguire Windows PowerShell anziché PowerShell per individuare i moduli necessari disponibili in Windows PowerShell. Questo esempio è un frammento di codice adattato dalla risorsa DSC usata nella risorsa DSC predefinita secure Web Server .

Questo modello imposta temporaneamente il percorso di esecuzione di PowerShell da eseguire da Windows PowerShell e individua il cmdlet necessario, che in questo caso è Get-WindowsFeature. L'output del comando viene restituito e quindi standardizzato per i requisiti di compatibilità. Una volta eseguito il cmdlet, $env:PSModulePath viene impostato di nuovo sul percorso originale.

# The Get-WindowsFeature cmdlet needs to be run through Windows PowerShell
# rather than through PowerShell, which is what the Policy engine runs.
$null = Invoke-Command -ScriptBlock {
    param ([string]$FileName)

    $InitialPSModulePath   = $env:PSModulePath
    $WindowsPSFolder       = "$env:SystemRoot\System32\WindowsPowershell\v1.0"
    $WindowsPSExe          = "$WindowsPSFolder\powershell.exe"
    $WindowsPSModuleFolder = "$WindowsPSFolder\Modules"
    $GetFeatureScriptBlock = {
        param([string]$FileName)

        if (Get-Command -Name Get-WindowsFeature -ErrorAction SilentlyContinue) {
            Get-WindowsFeature -Name Web-Server |
                ConvertTo-Json |
                Out-File $FileName
        } else {
            Add-Content -Path $FileName -Value 'NotServer'
        }
    }

    try {
        # Set env variable to include Windows Powershell modules so we can find
        # the Get-WindowsFeature cmdlet.
        $env:PSModulePath = $WindowsPSModuleFolder
        # Call Windows PowerShell to get the info about the Web-Server feature
        & $WindowsPSExe -command $WindowsFeatureScriptBlock -args $FileName
    } finally {
        # Reset the env variable even if there's an error.
        $env:PSModulePath = $InitialPSModulePath
    }
}

Funzionalità DSC comuni non disponibili durante l'anteprima pubblica della configurazione del computer

Durante l'anteprima pubblica, la configurazione del computer non supporta la specifica delle dipendenze tra computer usando WaitFor* le risorse. Non è possibile che un computer guardi e attenda che un altro computer raggiunga uno stato prima di procedere.

La gestione del riavvio non è disponibile nella versione di anteprima pubblica della configurazione del computer, incluso , $global:DSCMachineStatus non è disponibile. Le configurazioni non sono in grado di riavviare un nodo durante o alla fine di una configurazione.

Problemi di compatibilità noti con i moduli supportati

Il modulo PsDscResources in PowerShell Gallery e il modulo PSDesiredStateConfiguration fornito con Windows sono supportati da Microsoft ed è stato un set comunemente usato di risorse per DSC. Fino a quando il modulo PSDscResources non viene aggiornato per DSCv3, tenere presente i problemi di compatibilità noti seguenti.

  • Non usare le risorse del modulo PSDesiredStateConfiguration fornito con Windows. Passare invece a PSDscResources.
  • Non usare le WindowsFeaturerisorse , WindowsFeatureSet, WindowsOptionalFeaturee WindowsOptionalFeatureSet in PsDscResources. Si è verificato un problema noto durante il caricamento del modulo DISM in PowerShell 7.1.3 in Windows Server che richiede un aggiornamento.

Le nx* risorse per Linux incluse nel repository DSC per Linux sono state scritte in una combinazione dei linguaggi C e Python. Poiché il percorso per DSC in Linux prevede l'uso di PowerShell, le risorse esistenti nx* non sono compatibili con DSCv3. Fino a quando non è disponibile un nuovo modulo contenente risorse supportate per Linux, è necessario creare risorse personalizzate.

Coesistenza con DSC versione 3 e versioni precedenti

Dsc versione 3 nella configurazione del computer può coesistere con le versioni precedenti installate in Windows e Linux. Le implementazioni sono separate. Tuttavia, non esiste alcun rilevamento dei conflitti tra le versioni DSC, quindi non tentare di gestire le stesse impostazioni.

Passaggi successivi