Share via


Erstellen einer Datei mit Inhalt

Beschreibung

In diesem Beispiel wird gezeigt, wie Sie die Script Ressource zum Erstellen einer Datei verwenden können.

Um die Script Ressource zu verwenden, müssen Sie drei Codeblöcke angeben. GetScript, TestScript und SetScript.

In diesem Beispiel werden zwei Parameter der Benutzereingabe verwendet. FilePath legt den Pfad fest, auf dem die Datei vorhanden sein soll, und FileContent legt den Inhalt der Datei fest. Diese Werte werden in den Skriptblocks mit der using Richtlinie verwiesen.

GetScript

$fileContent = $null

if (Test-Path -Path $using:FilePath) {
    $fileContent = Get-Content -Path $using:filePath -Raw
}

return @{
    Result = $fileContent
}

Im GetScript-Skriptblock überprüft der Code, ob die von FilePath angegebene Datei vorhanden ist. Wenn dies der Fall ist, gibt der Skriptblock den aktuellen Inhalt dieser Datei für das Ergebnis zurück. Wenn dies nicht der Fehler ist, gibt der Skriptblock für das Ergebnis zurück $null .

TestScript

if (Test-Path -Path $using:FilePath) {
    $fileContent = Get-Content -Path $using:filePath -Raw
    return ($fileContent -eq $using:FileContent)
} else {
    return $false
}

Im TestScript-Skriptblock überprüft der Code, ob die von FilePath angegebene Datei vorhanden ist. Wenn dies nicht der Fehler ist, gibt der Skriptblock zurück $false. Wenn es vorhanden ist, vergleicht der Code den aktuellen Inhalt der Datei mit dem von FileContent angegebenen Inhalt. Wenn der Inhalt übereinstimmen, gibt der Skriptblock zurück $true. Wenn sie nicht sind, gibt der Skriptblock zurück $false.

SetScript

$streamWriter = New-Object -TypeName 'System.IO.StreamWriter' -ArgumentList @(
    $using:FilePath
)
$streamWriter.WriteLine($using:FileContent)
$streamWriter.Close()

Im SetScript-Skriptblock erstellt der Code ein System.IO.StreamWriter-Objekt , um in die von FilePath angegebene Datei zu schreiben. Es schreibt den von FileContent angegebenen Inhalt und schließt dann das StreamWriter-Objekt .

Mit Invoke-DscResource

Dieses Skript zeigt, wie Sie die Script Ressource mit dem Invoke-DscResource Cmdlet verwenden können, um sicherzustellen, dass eine Datei mit bestimmten Inhalten vorhanden ist.

[CmdletBinding()]
param(
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [String]
    $FilePath,

    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [String]
    $FileContent
)

begin {
    $SharedParameters = @{
        Name       = 'Script'
        ModuleName = 'PSDscResource'
        Properties = @{
            SetScript = {
                $streamWriter = New-Object -TypeName 'System.IO.StreamWriter' -ArgumentList @(
                    $using:FilePath
                )
                $streamWriter.WriteLine($using:FileContent)
                $streamWriter.Close()
            }
            TestScript = {
                if (Test-Path -Path $using:FilePath) {
                    $fileContent = Get-Content -Path $using:filePath -Raw
                    return ($fileContent -eq $using:FileContent)
                } else {
                    return $false
                }
            }
            GetScript = {
                $fileContent = $null

                if (Test-Path -Path $using:FilePath) {
                    $fileContent = Get-Content -Path $using:filePath -Raw
                }

                return @{
                    Result = $fileContent
                }
            }
        }
    }
}

process {
    $TestResult = Invoke-DscResource -Method Test @SharedParameters

    if ($TestResult.InDesiredState) {
        Invoke-DscResource -Method Get @SharedParameters
    } else {
        Invoke-DscResource -Method Set @SharedParameters
    }
}

Mit einer Konfiguration

In diesem Codeausschnitt wird gezeigt, wie Sie einen ConfigurationScript Ressourcenblock definieren können, um sicherzustellen, dass eine Datei mit bestimmten Inhalten vorhanden ist.

Configuration ScriptExample {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $FilePath,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $FileContent
    )

    Import-DscResource -ModuleName 'PSDscResources'

    Node localhost {
        Script ScriptExample {
            SetScript = {
                $streamWriter = New-Object -TypeName 'System.IO.StreamWriter' -ArgumentList @(
                    $using:FilePath
                )
                $streamWriter.WriteLine($using:FileContent)
                $streamWriter.Close()
            }
            TestScript = {
                if (Test-Path -Path $using:FilePath) {
                    $fileContent = Get-Content -Path $using:filePath -Raw
                    return ($fileContent -eq $using:FileContent)
                } else {
                    return $false
                }
            }
            GetScript = {
                $fileContent = $null

                if (Test-Path -Path $using:FilePath) {
                    $fileContent = Get-Content -Path $using:filePath -Raw
                }

                return @{
                    Result = $fileContent
                }
            }
        }
    }
}