Sdílet prostřednictvím


Prostředek skriptu DSC

Platí pro: Windows PowerShell 4.0, Windows PowerShell 5.x

Prostředek Script ve Windows PowerShellu Desired State Configuration (DSC) poskytuje mechanismus pro spouštění bloků skriptů Windows PowerShellu na cílových uzlech. Prostředek Script používá GetScriptSetScripta TestScript vlastnosti, které obsahují bloky skriptu, které definujete k provedení odpovídajících operací stavu DSC.

Spropitné

Pokud je to možné, doporučuje se místo tohoto prostředku použít definovaný prostředek DSC. Prostředek Script má nevýhody, které ztěžují testování, údržbu a predikci.

Na rozdíl od jiných prostředků DSC je každá vlastnost prostředku Script klíčovou vlastností a metoda Get pro tento prostředek může vrátit pouze jeden řetězec pro aktuální stav. Neexistuje žádná záruka, že je tento prostředek implementován idempotentním způsobem nebo že bude fungovat podle očekávání v jakémkoli systému, protože používá vlastní kód. Nedá se testovat bez vyvolání v cílovém systému.

Před použitím prostředku Script zvažte, jestli místo toho můžete vytvořit prostředek. Použití dobře definovaných prostředků DSC umožňuje, aby vaše konfigurace byly čitelnější a udržovatelné.

Poznámka

Tato dokumentace tohoto prostředku DSC se zabývá verzí, která je součástí PowerShellu před verzí 7.2. Modul PSDscResources obsahuje nové a aktualizované prostředky DSC, které oficiálně podporuje Microsoft. Modul PSDscResources je k dispozici v galerii Prostředí PowerShell.

Další informace a aktualizovaná dokumentace naleznete v referenční dokumentaci PSDscResources.

Syntax

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

Poznámka

GetScript TestScripta bloky SetScript se ukládají jako řetězce.

Vlastnosti

Vlastnost Popis
GetScript Blok skriptu, který vrátí aktuální stav uzlu.
SetScript Blok skriptu, který DSC používá k vynucení dodržování předpisů, pokud uzel není v požadovaném stavu.
TestScript Blok skriptu, který určuje, jestli je uzel v požadovaném stavu.
Pověření Označuje přihlašovací údaje, které se mají použít pro spuštění tohoto skriptu, pokud jsou vyžadovány přihlašovací údaje.

Společné vlastnosti

Vlastnost Popis
DependsOn Označuje, že konfigurace jiného prostředku musí běžet před nakonfigurování tohoto prostředku.
PsDscRunAsCredential Nastaví přihlašovací údaje pro spuštění celého prostředku jako.

Poznámka

Do WMF 5.0 byla přidána PsDscRunAsCredential společná vlastnost, která umožňuje spuštění jakéhokoli prostředku DSC v kontextu jiných přihlašovacích údajů. Další informace najdete v tématu Použití přihlašovacích údajů s prostředky DSC.

Další informace

GetScript

DSC nepoužívá výstup z GetScript Rutina Get-DscConfiguration spustí GetScript k načtení aktuálního stavu uzlu. Návratová hodnota není ze GetScript Pokud zadáte návratovou hodnotu, musí se jednat o hashovací tabulku obsahující klíč Výsledek klíč, jehož hodnota je String.

TestScript

DSC spustí TestScript a určí, jestli se má spustit SetScript. Pokud TestScript vrátí $false, DSC spustí SetScript, aby se uzel vrátil do požadovaného stavu. Musí vrátit logickou hodnotu. Výsledek $true značí, že uzel dodržuje předpisy a SetScript by se neměl spustit.

Rutina Test-DscConfiguration spustí , aby načetla uzly v souladu s prostředky . V tomto případě se ale SetScript nespustí bez ohledu na to, co TestScript blok vrátí.

Poznámka

Veškerý výstup z vašeho TestScript je součástí jeho návratové hodnoty. PowerShell interpretuje nenulový výstup bez nuly, což znamená, že TestScript vrací $true bez ohledu na stav vašeho uzlu. Výsledkem jsou nepředvídatelné výsledky, falešně pozitivní výsledky a potíže při řešení potíží.

SetScript

SetScript upraví uzel tak, aby vynucuje požadovaný stav. DSC volá SetScript, pokud blok skriptu TestScript vrátí $false. SetScript by neměla mít žádnou vrácenou hodnotu.

Příklady

Příklad 1: Zápis ukázkového textu pomocí prostředku skriptu

Tento příklad testuje existenci C:\TempFolder\TestFile.txt na každém uzlu. Pokud neexistuje, vytvoří ho pomocí SetScript. GetScript vrátí obsah souboru a jeho návratová hodnota se nepoužije.

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

Příklad 2: Porovnání informací o verzi pomocí prostředku skriptu

Tento příklad načte kompatibilní informace o verzi z textového souboru na počítači pro vytváření obsahu a uloží je do proměnné $version. Při generování souboru MOF uzlu nahradí DSC proměnné $using:version v každém bloku skriptu hodnotou proměnné $version. Během provádění je kompatibilní verze uložena v textovém souboru na každém uzlu a porovnávána a aktualizována při následných spuštěních.

$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')
            }
        }
    }
}

Příklad 3: Využití parametrů v prostředku skriptu

Tento příklad přistupuje k parametrům z prostředku Skriptu pomocí oboru using. ConfigurationData je možné přistupovat podobným způsobem. Podobně jako u příkladu 2 implementace očekává, že se verze uloží v místním souboru na cílovém uzlu. Místní cesta i verze jsou konfigurovatelné a oddělují kód od konfiguračních dat.

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

Výsledný soubor MOF obsahuje proměnné a jejich hodnoty, ke které se přistupuje prostřednictvím oboru using. Vloží se do každého bloku skriptu, který používá proměnné. Pro stručnost se odeberou testovací a nastavené skripty:

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 = ...;
};

Známá omezení

  • Přihlašovací údaje předávané v rámci prostředku skriptu nejsou vždy spolehlivé při použití modelu serveru vyžádané replikace nebo nabízené replikace. Místo použití prostředku skriptu v tomto případě použijte úplný prostředek.