Zasób skryptu DSC
Dotyczy: Windows PowerShell 4.0, Windows PowerShell 5.x
Zasób Script
w Windows PowerShell Desired State Configuration (DSC) udostępnia mechanizm uruchamiania bloków skryptów Windows PowerShell w węzłach docelowych. Zasób Script
używa GetScript
SetScript
właściwości i TestScript
, które zawierają bloki skryptu zdefiniowane do wykonywania odpowiednich operacji stanu DSC.
Porada
Jeśli to możliwe, najlepszym rozwiązaniem jest użycie zdefiniowanego zasobu DSC zamiast tego. Zasób Script
ma wady, które utrudniają testowanie, konserwację i przewidywanie.
W przeciwieństwie do innych zasobów DSC każda właściwość zasobu jest właściwością Script
klucza, a metoda Get dla tego zasobu może zwrócić tylko jeden ciąg dla bieżącego stanu. Nie ma gwarancji, że ten zasób jest implementowany idempotentnie lub że będzie działać zgodnie z oczekiwaniami w dowolnym systemie, ponieważ używa niestandardowego kodu. Nie można go przetestować bez wywoływana w systemie docelowym.
Przed użyciem Script
zasobu rozważ, czy zamiast tego możesz utworzyć zasób .
Użycie dobrze zdefiniowanych zasobów DSC sprawia, że konfiguracje są bardziej czytelne i możliwe do utrzymania.
Uwaga
Ta dokumentacja tego zasobu DSC obejmuje wersję dołączoną do programu PowerShell w wersji 7.2. Moduł PSDscResources zawiera nowe i zaktualizowane zasoby DSC, które są oficjalnie obsługiwane przez firmę Microsoft. Moduł PSDscResources jest dostępny w Galeria programu PowerShell.
Aby uzyskać więcej informacji i zaktualizować dokumentację, zobacz dokumentację referencyjną usługi PSDscResources.
Składnia
Script [string] #ResourceName
{
GetScript = [string]
SetScript = [string]
TestScript = [string]
[ Credential = [PSCredential] ]
[ DependsOn = [string[]] ]
[ PsDscRunAsCredential = [PSCredential] ]
}
Uwaga
GetScript
TestScript
bloki i SetScript
są przechowywane jako ciągi.
Właściwości
Właściwość | Opis |
---|---|
Getscript | Blok skryptu, który zwraca bieżący stan węzła. |
SetScript | Blok skryptu używany przez dsC do wymuszania zgodności, gdy węzeł nie jest w żądanym stanie. |
TestScript | Blok skryptu określający, czy węzeł jest w żądanym stanie. |
Referencje | Wskazuje poświadczenia do użycia do uruchamiania tego skryptu, jeśli wymagane są poświadczenia. |
Wspólne właściwości
Właściwość | Opis |
---|---|
Dependson | Wskazuje, że konfiguracja innego zasobu musi zostać uruchomiona przed skonfigurowaniem tego zasobu. |
PsDscRunAsCredential | Ustawia poświadczenie na potrzeby uruchamiania całego zasobu jako. |
Uwaga
Właściwość pospolita PsDscRunAsCredential została dodana w programie WMF 5.0, aby umożliwić uruchamianie dowolnego zasobu DSC w kontekście innych poświadczeń. Aby uzyskać więcej informacji, zobacz Use Credentials with DSC Resources (Używanie poświadczeń z zasobami DSC).
Dodatkowe informacje
Getscript
DsC nie używa danych wyjściowych GetScript
polecenia GetScript
cmdlet Get-DscConfiguration, aby pobrać bieżący stan węzła. Wartość zwracana nie jest wymagana z GetScript
pola Jeśli określisz wartość zwracaną, musi to być tabela skrótu zawierająca klucz wynikowy , którego wartość jest ciągiem.
TestScript
Rozszerzenie DSC jest wykonywane TestScript
w celu określenia, czy SetScript
należy je uruchomić. Jeśli TestScript
funkcja zwraca $false
wartość , usługa DSC wykonuje polecenie SetScript
w celu przywrócenia węzła do żądanego stanu. Musi zwrócić wartość logiczną. Wynik $true
wskazuje, że węzeł jest zgodny i SetScript
nie powinien być wykonywany.
Polecenie cmdlet Test-DscConfiguration jest TestScript
wykonywane w celu pobrania zgodności węzłów z zasobami Script
. Jednak w tym przypadku nie działa, SetScript
bez względu na to, co TestScript
zwraca blok.
Uwaga
Wszystkie dane wyjściowe z twojej TestScript
wartości zwracanej są częścią wartości zwracanej. Program PowerShell interpretuje nieskompresowane dane wyjściowe jako niezerowe, co oznacza, że TestScript
zwracane są $true
niezależnie od stanu węzła. Powoduje to nieprzewidywalne wyniki, wyniki fałszywie dodatnie i powodują trudności podczas rozwiązywania problemów.
SetScript
SetScript
modyfikuje węzeł, aby wymusić żądany stan. Rozszerzenie DSC wywołuje, SetScript
jeśli blok skryptu TestScript
zwraca wartość $false
. Wartość SetScript
nie powinna być zwracana.
Przykłady
Przykład 1. Pisanie przykładowego tekstu przy użyciu zasobu Skrypt
W tym przykładzie sprawdza się istnienie każdego węzła C:\TempFolder\TestFile.txt
. Jeśli nie istnieje, tworzy go przy użyciu elementu SetScript
. Zwraca GetScript
zawartość pliku, a jego wartość zwracana nie jest używana.
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) } }
}
}
}
Przykład 2. Porównanie informacji o wersji przy użyciu zasobu skryptu
Ten przykład pobiera informacje o zgodnej wersji z pliku tekstowego na komputerze tworzenia i przechowuje je w zmiennej $version
. Podczas generowania pliku MOF węzła DSC zastępuje $using:version
zmienne w każdym bloku skryptu wartością zmiennej $version
. Podczas wykonywania zgodna wersja jest przechowywana w pliku tekstowym w każdym węźle i porównywana i aktualizowana w kolejnych wykonaniach.
$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')
}
}
}
}
Przykład 3. Użycie parametrów w zasobie skryptu
W tym przykładzie uzyskuje dostęp do parametrów z zasobu Skrypt, korzystając z using
zakresu. Dostęp do pliku ConfigurationData można uzyskać w podobny sposób. Podobnie jak w przykładzie 2, implementacja oczekuje, że wersja będzie przechowywana wewnątrz pliku lokalnego w węźle docelowym. Zarówno ścieżka lokalna, jak i wersja są konfigurowalne, co umożliwia oddzielenie kodu od danych konfiguracji.
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
}
}
}
}
Wynikowy plik MOF zawiera zmienne i ich wartości dostępne za pośrednictwem using
zakresu.
Są one wstrzykiwane do każdego bloku skryptów, który używa zmiennych. Skrypty testowania i ustawiania są usuwane w celu zwięzłości:
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 = ...;
};
Znane ograniczenia
- Poświadczenia przekazywane w zasobie skryptu nie zawsze są niezawodne podczas korzystania z modelu ściągania lub wypychania serwera. W tym przypadku należy użyć pełnego zasobu, a nie użyć zasobu skryptu.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla