Megosztás a következőn keresztül:


A Gépkonfigurációhoz használt PowerShell kívánt állapotkonfiguráció viselkedésének változásai

Mielőtt hozzákezdene, érdemes elolvasni a gépkonfiguráció áttekintését.

A dokumentumról videós útmutató érhető el.

A gépkonfiguráció a PowerShell Desired State Configuration (PSDSC) 3-as verzióját használja a gépek naplózásához és konfigurálásához. A DSC-konfiguráció határozza meg a gép állapotát. A DSC gépkonfigurációban való implementálásában számos jelentős különbség van.

A gép konfigurációja a PowerShell 7 platformfüggetlen verzióját használja

A gépkonfiguráció úgy lett kialakítva, hogy a Windows és a Linux kezelésének élménye konzisztens legyen. Mindkét operációsrendszer-környezetben a PowerShell DSC-ismeretekkel rendelkező felhasználók szkriptelési ismeretekkel hozhatnak létre és tehetnek közzé konfigurációkat.

A gépkonfiguráció csak a PowerShell DSC 3-as verzióját használja, és nem támaszkodik a Linuxhoz készült DSC korábbi implementációjára vagy az nx* adattárban található szolgáltatókra.

Az 1.26.33-as verziótól a gépkonfiguráció a WindowsHoz készült PowerShell 7.1.2-ben és a Linuxhoz készült PowerShell 7.2 preview 6-ban működik. A 7.2-es verziótól kezdve a PSDesiredStateConfiguration modul átkerült a PowerShell-telepítésbe, és ehelyett modulként lett telepítve a PowerShell-galéria.

Több konfiguráció

A gépkonfiguráció több konfigurációt is támogat ugyanahhoz a géphez. A gépkonfigurációs bővítmény operációs rendszerében nincs szükség speciális lépésekre. Nincs szükség részleges konfigurációk konfigurálására.

A függőségek kezelése konfigurációnként

Ha a konfiguráció az elérhető eszközökkel van csomagolva, a konfigurációhoz szükséges függőségek egy .zip fájlban jelennek meg. A gépek minden konfigurációhoz egy egyedi mappába bontják ki a tartalmat. A gép konfigurációs bővítménye által szállított ügynök minden konfigurációhoz létrehoz egy dedikált PowerShell-munkamenetet. Az automatikus modulbetöltést $Env:PSModulePath csak arra az útvonalra korlátozza, ahol a csomagot kinyerték.

Ez a változás több előnnyel is jár:

  • Az egyes konfigurációkhoz különböző modulverziók használhatók ugyanazon a gépen.
  • Ha már nincs szükség konfigurációra egy gépen, az ügynök biztonságosan törli a teljes mappát, ahol a konfiguráció ki lett nyerve. Nem kell a konfigurációk közötti megosztott függőségeket kezelnie.
  • Nem szükséges egy központi szolgáltatásban lévő modul több verziójának kezelése.

Az összetevők csomagként vannak kezelve

Az Azure Automation Állapotkonfiguráció funkciója tartalmazza a modulok és a konfigurációs szkriptek összetevő-kezelését. Miután mindkettőt közzétette a szolgáltatásban, a szkript MOF formátumúra fordítható. A Windows Pull Serverhez hasonlóan a webszolgáltatás-példány konfigurációinak és moduljainak felügyeletére is szükség volt. Ezzel szemben a DSC-bővítmény egyszerűsített modellel rendelkezik, amelyben az összes összetevő össze van csomagolva, és egy HTTPS-kéréssel elérhető helyen tárolja a célgépről. Az Azure Blob Storage az összetevők üzemeltetésének népszerű lehetősége.

A gépkonfiguráció csak az egyszerűsített modellt használja, ahol az összes összetevő össze van csomagolva, és a célgépről https-en keresztül érhető el. Nem szükséges modulokat, szkripteket vagy fordítást közzétenni a szolgáltatásban. Az egyik változás az, hogy a csomagnak mindig tartalmaznia kell egy lefordított MOF-t. Nem lehet szkriptfájlt belefoglalni a csomagba, és lefordítani a célszámítógépen.

Egyéni konfigurációs csomag maximális mérete

Az Azure Automation State Configuration esetében a DSC-konfigurációk mérete korlátozott volt. A gép konfigurációja 100 MB-os csomagméretet támogat a tömörítés előtt. A csomagban lévő MOF-fájl méretének nincs konkrét korlátja.

A konfigurációs mód a csomagösszetevőben van beállítva

A konfigurációs csomag létrehozásakor a mód a következő beállításokkal van beállítva:

  • Audit - Ellenőrzi a gép megfelelőségét. Nincs módosítás.
  • AuditandSet - Ellenőrzi és orvosolja a gép megfelelőségi állapotát. A módosítások akkor történnek, ha a gép nem megfelelő.

A mód nem a Local Configuration Manager szolgáltatásban, hanem a csomagban van beállítva, mert az egyes konfigurációk eltérő módban alkalmazhatók.

Paramétertámogatás az Azure Resource Manageren keresztül

A konfigurációparaméter tulajdonságtömb által a gép konfigurációs hozzárendeléseiben beállított paraméterek felülírják a statikus szöveget egy konfigurációs MOF-fájlban, amikor a fájlt egy gépen tárolják. A paraméterek lehetővé teszik a testreszabást, az operátor pedig a szolgáltatás API módosításainak vezérlését anélkül, hogy parancsokat kellene futtatnia a gépen.

Az Azure Policy azon paramétereinek, amelyek értékeket adnak át a gép konfigurációs hozzárendeléseinek, sztring típusúnak kell lenniük. A tömbök nem továbbíthatóak paramétereken keresztül, még akkor sem, ha a DSC-erőforrás támogatja a tömböket.

Triggerkészlet külső gépről

A DSC korábbi verzióinak egyik kihívása az elsodródás nagy léptékű javítása volt, anélkül, hogy sok egyéni kód és a WinRM távoli kapcsolatokra támaszkodtak volna. A vendégkonfiguráció megoldja ezt a problémát. A gépkonfiguráció felhasználói az igény szerinti szervizelésen keresztül szabályozhatják az elsodródás korrekcióját.

A sorrend tartalmazza a Get metódust

Amikor a gép konfigurációja naplóz vagy konfigurál egy gépet, a rendszer ugyanazt az eseménysorozatot használja Windows és Linux rendszeren is. A viselkedés jelentős változása, hogy a szolgáltatás meghívja a Get metódust a gép állapotának részleteinek visszaadására.

  1. Az ügynök először futtatja Test annak megállapítását, hogy a konfiguráció megfelelő állapotban van-e.
  2. Ha a csomag be van állítva Audit, a függvény által visszaadott logikai érték határozza meg, hogy a vendég-hozzárendelés Compliant Azure Resource Manager-állapota legyen vagy NonCompliant.
  3. Ha a csomag be van állítva AuditandSet, a logikai érték határozza meg, hogy a gép szervizelése a konfiguráció metódussal történő alkalmazásával Set történik-e. Ha a Test metódus visszatér $false, Set fut. Ha Test visszaadja, $trueakkor Set nem fut.
  4. Végül a szolgáltató az egyes beállítások aktuális állapotát adja Get vissza, így a részletek mind arról érhetők el, hogy a gép miért nem megfelelő, és hogy ellenőrizze, hogy az aktuális állapot megfelelő-e.

A Get speciális követelményei

A DSC Get metódus speciális követelményekkel rendelkezik a gépkonfigurációhoz, amelyekre nincs szükség a DSC-hez.

  • A visszaadott kivonattáblának tartalmaznia kell egy Ok nevű tulajdonságot.
  • Az Okok tulajdonságnak tömbnek kell lennie.
  • A tömb minden elemének egy Kód és kifejezés nevű kulcsokat tartalmazó kivonattáblának kell lennie.
  • A kivonattáblától eltérő értékeket nem lehet visszaadni.

A szolgáltatás az Reasons tulajdonságot használja a megfelelőségi információk megjelenítési módjának egységesítésére. Az okokban szereplő egyes elemeket üzenetként tekintheti az erőforrás megfelelőségéről vagy nem megfelelőségéről. A tulajdonság egy tömb, mert egy erőforrás több okból is nem felel meg a megfelelőségnek.

A kód és kifejezés tulajdonságokat a szolgáltatás elvárja. Egyéni erőforrás létrehozásakor állítsa be azt a szöveget, amely miatt az erőforrás nem felel meg a Kifejezés értékének. A kód speciális formázási követelményekkel rendelkezik, így a jelentéskészítés egyértelműen megjelenítheti a naplózáshoz használt erőforrás adatait. Ez a megoldás bővíthetővé teszi a vendégkonfigurációt. Bármelyik parancs futtatható mindaddig, amíg a kimenet sztringértékként visszaadható a Kifejezés tulajdonsághoz.

  • Kód (sztring): Az erőforrás neve ismétlődő, majd egy rövid név, amelynek nincs szóköze azonosítóként. Ezt a három értéket szóköz nélkül kell kettősponttal elválasztani.
    • Ilyen például a registry:registry:keynotpresent
  • Kifejezés (sztring): Emberi olvasásra alkalmas szöveg, amely elmagyarázza, miért nem felel meg a beállításnak.
    • Ilyen például a 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
}

Amikor parancssori eszközöket használ a visszaadott Getinformációk lekéréséhez, előfordulhat, hogy az eszköz nem várt kimenetet ad vissza. Annak ellenére, hogy a kimenetet a PowerShellben rögzíti, előfordulhat, hogy a kimenet szabványos hibára is íródott. A probléma elkerülése érdekében fontolja meg a kimenet null értékűre való átirányítását.

Az Okok tulajdonság beágyazott osztálya

Szkriptalapú erőforrásokban (csak Windows rendszeren) az Okok osztály az alábbiak szerint szerepel a séma MOF-fájljában.

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

Az osztályalapú erőforrásokban (Windows és Linux) az Ok osztály az alábbiak szerint szerepel a PowerShell-modulban. A Linux kis- és nagybetűkre érzékeny, ezért a C be Code és P a be Phrase értékét nagybetűsen kell megadni.

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

Ha az erőforrás rendelkezik szükséges tulajdonságokkal, ezeket a tulajdonságokat az Ok osztálysal párhuzamosan is vissza kell adniGet. Ha az ok nem szerepel a szolgáltatásban, a szolgáltatás tartalmaz egy "catch-all" viselkedést, amely összehasonlítja a bemeneti Get értékeket és a visszaadott Getértékeket, és részletes összehasonlítást biztosít okként.

Konfigurációnevek

Az egyéni konfiguráció nevének mindenhol konzisztensnek kell lennie. Ezeknek az elemeknek ugyanazzal a névvel kell rendelkezniük:

  • A .zip tartalomcsomag fájlja
  • A konfiguráció neve az MOF-fájlban
  • A gép konfigurációs hozzárendelésének neve az Azure Resource Manager-sablonban

Parancsok futtatása a Windows PowerShellben

A Windows-modulok PowerShellben való futtatása az alábbi mintával érhető el a DSC-erőforrásokban. Az alábbi minta ideiglenesen a Windows PowerShell futtatását állítja be PSModulePath a PowerShell helyett a Windows PowerShellben elérhető szükséges modulok felderítéséhez. Ez a minta egy kódrészlet, amely a biztonságos webkiszolgáló beépített DSC-erőforrásában használt DSC-erőforrásból van adaptálva.

Ez a minta ideiglenesen beállítja a PowerShell végrehajtási útvonalát a Windows PowerShellből való futtatáshoz, és felderíti a szükséges parancsmagot, amely ebben az esetben a Get-WindowsFeature. A rendszer visszaadja a parancs kimenetét, majd szabványosította a kompatibilitási követelményeket. A parancsmag végrehajtása $env:PSModulePath után a rendszer visszaállítja az eredeti elérési utat.

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

A nyilvános gépkonfigurációs előzetes verzióban nem elérhető gyakori DSC-funkciók

A nyilvános előzetes verzióban a gépkonfiguráció nem támogatja a gépek közötti függőségek erőforrások használatával WaitFor* történő megadását. Nem lehetséges, hogy az egyik gép figyelje és várja meg, amíg egy másik gép elér egy állapotot a haladás előtt.

Az újraindítás kezelése nem érhető el a gépkonfiguráció nyilvános előzetes verziójában, beleértve a $global:DSCMachineStatus nem elérhetőeket is. A konfigurációk nem tudják újraindítani a csomópontot a konfiguráció során vagy végén.

A támogatott modulokkal kapcsolatos ismert kompatibilitási problémák

A Microsoft támogatja a PowerShell-galéria PsDscResources modulját és a Windowst tartalmazó PSDesiredStateConfiguration modult, és a DSC-hez gyakran használt erőforráskészlet. A PSDscResources modul DSCv3-hoz való frissítéséig vegye figyelembe az alábbi ismert kompatibilitási problémákat.

  • Ne használja a Windowst tartalmazó PSDesiredStateConfiguration modul erőforrásait. Ehelyett váltson PSDscResources-re.
  • A PsDscResourcesban ne használja a WindowsFeature, WindowsFeatureSet, WindowsOptionalFeatureés WindowsOptionalFeatureSet az erőforrásokat. Ismert probléma merült fel a DISM modul betöltése a PowerShell 7.1.3-ban Windows Serveren, amely frissítést igényel.

A nx* Linuxhoz készült DSC-adattárban található Linux-erőforrások a C és a Python nyelv kombinációjával lettek megírva. Mivel a Linuxon futó DSC elérési útja a PowerShell használata, a meglévő nx* erőforrások nem kompatibilisek a DSCv3-nal. Amíg el nem érhető egy linuxos támogatott erőforrásokat tartalmazó új modul, egyéni erőforrásokat kell létrehoznia.

Együttélés a DSC 3- és korábbi verzióival

A gépkonfigurációban a DSC 3-ás verziója együtt létezhet a Windowsban és Linuxon telepített régebbi verziókkal. Ezek implementációja elkülönül. A DSC-verziókban azonban nincs ütközésészlelés, ezért ne próbálja meg kezelni ugyanazokat a beállításokat.

Következő lépések