DSC-szkript erőforrása

A következőkre vonatkozik: Windows PowerShell 4.0, Windows PowerShell 5.x

A Script Windows PowerShell Desired State Configuration (DSC) erőforrása lehetővé teszi Windows PowerShell szkriptblokkok futtatását a célcsomópontokon. Az Script erőforrás a definiált szkriptblokkokat tartalmazó , és TestScript tulajdonságokat használja GetScriptSetScripta megfelelő DSC-állapotműveletek végrehajtásához.

Tipp

Ahol lehetséges, ajánlott definiált DSC-erőforrást használni ahelyett, hogy ezt használná. Az Script erőforrás hátrányai megnehezítik a tesztelést, a karbantartást és az előrejelzést.

A többi DSC-erőforrástól eltérően az Script erőforrás minden tulajdonsága kulcstulajdonság, és az erőforrás Get metódusa csak egyetlen sztringet tud visszaadni az aktuális állapothoz. Nincs garancia arra, hogy az erőforrás idempotens módon van implementálva, vagy hogy bármely rendszeren a várt módon fog működni, mert egyéni kódot használ. Nem tesztelhető anélkül, hogy meghívták volna egy célrendszeren.

Az erőforrás használata Script előtt fontolja meg, hogy létrehozhat-e helyettük erőforrást . A jól definiált DSC-erőforrások használata olvashatóbbá és karbantarthatóbbá teszi a konfigurációkat.

Megjegyzés

A DSC-erőforrás dokumentációja a PowerShell 7.2-es verzió előtti verzióját tartalmazza. A PSDscResources modul a Microsoft által hivatalosan támogatott új és frissített DSC-erőforrásokat tartalmaz. A PSDscResources modul elérhető a PowerShell-galéria.

További információkért és a frissített dokumentációért tekintse meg a PSDscResources referenciadokumentációját.

Syntax

Script [string] #ResourceName
{
    GetScript = [string]
    SetScript = [string]
    TestScript = [string]
    [ Credential = [PSCredential] ]
    [ DependsOn = [string[]] ]
    [ PsDscRunAsCredential = [PSCredential] ]
}

Megjegyzés

GetScriptTestScript, és SetScript a blokkok sztringekként vannak tárolva.

Tulajdonságok

Tulajdonság Leírás
GetScript Egy szkriptblokk, amely a csomópont aktuális állapotát adja vissza.
SetScript Egy szkriptblokk, amelyet a DSC a megfelelőség kikényszerítésére használ, ha a csomópont nem a kívánt állapotban van.
TestScript Egy szkriptblokk, amely meghatározza, hogy a csomópont a kívánt állapotban van-e.
Hitelesítő adat A szkript futtatásához használandó hitelesítő adatokat jelzi, ha hitelesítő adatokra van szükség.

Közös tulajdonságok

Tulajdonság Leírás
DependsOn Azt jelzi, hogy egy másik erőforrás konfigurációjának futnia kell az erőforrás konfigurálása előtt.
PsDscRunAsCredential Beállítja a hitelesítő adatokat a teljes erőforrás futtatásához.

Megjegyzés

A PsDscRunAsCredential common tulajdonság hozzá lett adva a WMF 5.0-s verziójához, hogy bármely DSC-erőforrást más hitelesítő adatokkal összefüggésben futtathasson. További információ: Hitelesítő adatok használata DSC-erőforrásokkal.

További információ

GetScript

A DSC nem használja a Get-DscConfiguration parancsmag GetScript kimenetét GetScript a csomópont aktuális állapotának lekéréséhez. Ha visszaadott értéket ad meg, akkor az eredménykulcsot GetScript tartalmazó kivonatolónak kell lennie, amelynek értéke sztring.

TestScript

A DSC végrehajtja TestScript annak megállapítását, hogy futtatni kell-e SetScript a parancsot. Ha TestScript visszaadja a $falseértéket, a DSC végrehajtja SetScript a csomópont kívánt állapotba helyezését. Logikai értéket kell visszaadnia. Az eredmény $true azt jelzi, hogy a csomópont megfelelő, és SetScript nem szabad végrehajtani.

A Test-DscConfiguration parancsmag végrehajtja TestScript a csomópontok megfelelőségének lekérését az Script erőforrásokhoz. Ebben az esetben SetScript azonban nem fut, függetlenül attól, hogy milyen TestScript blokk ad vissza.

Megjegyzés

Az ön TestScript összes kimenete a visszatérési érték része. A PowerShell nem nullaként értelmezi a nem tömörített kimenetet, ami azt jelenti, hogy a csomópont állapotától függetlenül ad TestScript vissza $true . Ez kiszámíthatatlan eredményeket, téves pozitív eredményeket eredményez, és nehézséget okoz a hibaelhárítás során.

SetScript

SetScript módosítja a csomópontot a kívánt állapot kényszerítéséhez. A DSC meghívja SetScript , ha a szkriptblokk visszaadja a TestScript következőt $false: . A SetScript függvénynek nem lehet visszatérési értéke.

Példák

1. példa: Példaszöveg írása szkripterőforrás használatával

Ez a példa az egyes csomópontok meglétét teszteli C:\TempFolder\TestFile.txt . Ha nem létezik, a használatával hozza létre.SetScript A GetScript visszaadja a fájl tartalmát, és a visszaadott érték nem használatos.

Configuration ScriptTest
{
    Import-DscResource -ModuleName 'PSDesiredStateConfiguration'

    Node localhost
    {
        Script ScriptExample
        {
            SetScript = {
                $sw = New-Object System.IO.StreamWriter("C:\TempFolder\TestFile.txt")
                $sw.WriteLine("Some sample string")
                $sw.Close()
            }
            TestScript = { Test-Path "C:\TempFolder\TestFile.txt" }
            GetScript = { @{ Result = (Get-Content C:\TempFolder\TestFile.txt) } }
        }
    }
}

2. példa: Verzióadatok összehasonlítása szkripterőforrás használatával

Ez a példa lekéri a megfelelő verzióadatokat egy szövegfájlból a szerzői számítógépen, és tárolja azokat a $version változóban. A csomópont MOF-fájljának létrehozásakor a DSC minden $using:version szkriptblokk változóit lecseréli a $version változó értékére. A végrehajtás során a megfelelő verziót egy szövegfájl tárolja az egyes csomópontokon, és összehasonlítja és frissíti a későbbi végrehajtásokat.

$version = Get-Content 'version.txt'

Configuration ScriptTest
{
    Import-DscResource -ModuleName 'PSDesiredStateConfiguration'

    Node localhost
    {
        Script UpdateConfigurationVersion
        {
            GetScript = {
                $currentVersion = Get-Content (Join-Path -Path $env:SYSTEMDRIVE -ChildPath 'version.txt')
                return @{ 'Result' = "$currentVersion" }
            }
            TestScript = {
                # Create and invoke a scriptblock using the $GetScript automatic variable, which contains a string representation of the GetScript.
                $state = [scriptblock]::Create($GetScript).Invoke()

                if( $state.Result -eq $using:version )
                {
                    Write-Verbose -Message ('{0} -eq {1}' -f $state.Result,$using:version)
                    return $true
                }
                Write-Verbose -Message ('Version up-to-date: {0}' -f $using:version)
                return $false
            }
            SetScript = {
                $using:version | Set-Content -Path (Join-Path -Path $env:SYSTEMDRIVE -ChildPath 'version.txt')
            }
        }
    }
}

3. példa: Paraméterek használata szkripterőforrásban

Ez a példa a szkripterőforráson belülről fér hozzá a paraméterekhez a using hatókör használatával. A ConfigurationData hasonló módon érhető el. A 2. példához hasonlóan az implementáció elvárja, hogy egy verzió a célcsomóponton található helyi fájlban legyen tárolva. A helyi elérési út és a verzió is konfigurálható, a kód leválasztása a konfigurációs adatoktól.

Configuration ScriptTest
{
    param
    (
        [Version]
        $Version,

        [string]
        $FilePath
    )

    Import-DscResource -ModuleName 'PSDesiredStateConfiguration'

    Node localhost
    {
        Script UpdateConfigurationVersion
        {
            GetScript = {
                $currentVersion = Get-Content -Path $using:FilePath
                return @{ 'Result' = "$currentVersion" }
            }
            TestScript = {
                # Create and invoke a scriptblock using the $GetScript automatic variable,
                # which contains a string representation of the GetScript.
                $state = [scriptblock]::Create($GetScript).Invoke()

                if( $state['Result'] -eq $using:Version )
                {
                    Write-Verbose -Message ('{0} -eq {1}' -f $state['Result'],$using:version)
                    return $true
                }

                Write-Verbose -Message ('Version up-to-date: {0}' -f $using:version)
                return $false
            }
            SetScript = {
                Set-Content -Path $using:FilePath -Value $using:Version
            }
        }
    }
}

Az eredményül kapott MOF-fájl tartalmazza a változókat és a hatókörön keresztül using elért értékeket. A rendszer minden szkriptblokkba injektálja őket, amely a változókat használja. A tesztelési és a beállítási szkriptek a rövidség kedvéért törlődnek:

instance of MSFT_ScriptResource as $MSFT_ScriptResource1ref
{
 GetScript = "$FilePath ='C:\\Config.ini'\n\n $currentVersion = Get-Content -Path $FilePath\n return @{ 'Result' = \"$currentVersion\" }\n";
 TestScript = ...;
 SetScript = ...;
};

Ismert korlátozások

  • A szkripterőforrásban átadott hitelesítő adatok nem mindig megbízhatóak lekéréses vagy leküldéses kiszolgálói modell használata esetén. Ebben az esetben a szkripterőforrás helyett használjon teljes erőforrást.