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á GetScript
SetScript
a 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
TestScript
a 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 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.