Script voor DSC-ResourceDSC Script Resource

Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.xApplies To: Windows PowerShell 4.0, Windows PowerShell 5.x

De Script resource in Windows PowerShell Desired State Configuration (DSC) biedt een mechanisme voor het uitvoeren van Windows PowerShell-scriptblokken op doelknooppunten.The Script resource in Windows PowerShell Desired State Configuration (DSC) provides a mechanism to run Windows PowerShell script blocks on target nodes. De Script maakt gebruik van resource GetScript, SetScript, en TestScript -eigenschappen die u definieert om uit te voeren van de bijbehorende DSC scriptblokken bevatten status bewerkingen.The Script resource uses GetScript, SetScript, and TestScript properties that contain script blocks you define to perform the corresponding DSC state operations.

SyntaxisSyntax

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

Notitie

De GetScript, TestScript, en SetScript blokken worden opgeslagen als tekenreeksen.The GetScript, TestScript, and SetScript blocks are stored as strings.

EigenschappenProperties

EigenschapProperty BeschrijvingDescription
Ophalen scriptGetScript Een scriptblok waarmee de huidige status van het knooppunt wordt geretourneerd.A script block that returns the current state of the Node.
SetScriptSetScript Een scriptblok die DSC gebruikt voor het afdwingen van naleving bij het knooppunt niet is opgenomen in de gewenste status.A script block that DSC uses to enforce compliance when the Node is not in the desired state.
TestScriptTestScript Een scriptblok die bepaalt of het knooppunt in de gewenste status.A script block that determines if the Node is in the desired state.
ReferentieCredential Geeft aan dat de referenties wilt gebruiken voor het uitvoeren van dit script als referenties vereist zijn.Indicates the credentials to use for running this script, if credentials are required.
DependsOnDependsOn Geeft aan dat de configuratie van een andere resource uitvoeren moet voordat deze resource is geconfigureerd.Indicates that the configuration of another resource must run before this resource is configured. Bijvoorbeeld, als de ID van de resourceconfiguratie scriptblok die u wilt uitvoeren eerst is ResourceName en het type ResourceType, de syntaxis voor het gebruik van deze eigenschap is DependsOn = "[ResourceType]ResourceName".For example, if the ID of the resource configuration script block that you want to run first is ResourceName and its type is ResourceType, the syntax for using this property is DependsOn = "[ResourceType]ResourceName".

Ophalen scriptGetScript

DSC maakt geen gebruik van de uitvoer van GetScript.DSC does not use the output from GetScript. De Get-DscConfiguration cmdlet voert de GetScript om op te halen van de huidige status van een knooppunt.The Get-DscConfiguration cmdlet executes the GetScript to retrieve a node's current state. Een retourwaarde hoeft niet uit GetScript.A return value is not required from GetScript. Als u een retourwaarde opgeeft, moet dit een hashtable met een resultaat sleutel waarvan de waarde is een String.If you specify a return value, it must be a hashtable containing a Result key whose value is a String.

TestScriptTestScript

De TestScript wordt uitgevoerd door DSC om te bepalen of de SetScript moet worden uitgevoerd.The TestScript is executed by DSC to determine if the SetScript should be run. Als de TestScript retourneert $false, DSC wordt uitgevoerd de SetScript om het knooppunt terug naar de gewenste status.If the TestScript returns $false, DSC executes the SetScript to bring the node back to the desired state. De App moet retourneren een boolean waarde.It must return a boolean value. Een resultaat van $true geeft aan dat het knooppunt voldoet en SetScript moet niet worden uitgevoerd.A result of $true indicates that the node is compliant and SetScript should not executed.

De Test-DscConfiguration -cmdlet voert de TestScript om op te halen van de naleving van de knooppunten van de Script resources.The Test-DscConfiguration cmdlet, executes the TestScript to retrieve the nodes compliance with the Script resources. Echter, in dit geval de SetScript niet wordt uitgevoerd, ongeacht wat de TestScript retourneert blokkeren.However, in this case, the SetScript does not run, no matter what the TestScript block returns.

Notitie

Alle uitvoer van uw TestScript maakt deel uit van de geretourneerde waarde.All output from your TestScript is part of its return value. PowerShell interpreteert unsuppressed uitvoer als niet-nul, wat dat betekent uw TestScript retourneert $true , ongeacht de status van het knooppunt.PowerShell interprets unsuppressed output as non-zero, which means that your TestScript will return $true regardless of your node's state. Dit leidt tot onvoorspelbare resultaten, fout-positieven, en zorgt ervoor dat problemen tijdens het oplossen van problemen.This results in unpredictable results, false positives, and causes difficulty during troubleshooting.

SetScriptSetScript

De SetScript Hiermee wijzigt u het knooppunt enfore de gewenste status.The SetScript modifies the node to enfore the desired state. Deze wordt aangeroepen door DSC als de TestScript script blok retourneert $false.It is called by DSC if the TestScript script block returns $false. De SetScript moet retourneren geen waarde hebben.The SetScript should have no return value.

VoorbeeldenExamples

Voorbeeld 1: Voorbeeldtekst met behulp van de bron van een Script schrijvenExample 1: Write sample text using a Script resource

In dit voorbeeld test sprake is van C:\TempFolder\TestFile.txt op elk knooppunt.This example tests for the existence of C:\TempFolder\TestFile.txt on each node. Als deze niet bestaat, wordt gemaakt met behulp van de SetScript.If it does not exist, it creates it using the SetScript. De GetScript retourneert de inhoud van het bestand en de geretourneerde waarde wordt niet gebruikt.The GetScript returns the contents of the file, and its return value is not used.

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

Voorbeeld 2: De versie-informatie met behulp van een bron van het Script vergelijkenExample 2: Compare version information using a Script resource

In dit voorbeeld wordt de compatibel versie-informatie uit een tekstbestand op de computer ontwerpen en slaat deze op in de $version variabele.This example retrieves the compliant version information from a text file on the authoring computer and stores it in the $version variable. Bij het genereren van het knooppunt MOF-bestand, DSC vervangt de $using:version variabelen in elk script blokkeren met de waarde van de $version variabele.When generating the node's MOF file, DSC replaces the $using:version variables in each script block with the value of the $version variable. Tijdens de uitvoering, de compatibel versie is opgeslagen in een tekstbestand op elk knooppunt en vergeleken en op de volgende uitvoeringen worden bijgewerkt.During execution, the compliant version is stored in a text file on each Node and compared and updated on subsequent executions.

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