Share via


Créez un fichier avec du contenu

Description

Cet exemple montre comment utiliser la Script ressource pour créer un fichier.

Pour utiliser la Script ressource, vous devez spécifier trois blocs de code. GetScript, TestScript et SetScript.

Cet exemple utilise deux paramètres d’entrée utilisateur. FilePath définit le chemin d’accès auquel le fichier doit exister et FileContent définit le contenu du fichier. Ces valeurs sont référencées dans les blocs de script avec la using directive.

GetScript

$fileContent = $null

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

return @{
    Result = $fileContent
}

Dans le scriptblock GetScript , le code vérifie si le fichier spécifié par FilePath existe. Si c’est le cas, le scriptblock retourne le contenu actuel de ce fichier pour le résultat. Si ce n’est pas le cas, le scriptblock retourne $null le résultat.

TestScript

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

Dans le scriptblock TestScript , le code vérifie si le fichier spécifié par FilePath existe. Si ce n’est pas le cas, le scriptblock retourne $false. S’il existe, le code compare le contenu actuel du fichier au contenu spécifié par FileContent. Si le contenu correspond, le scriptblock retourne $true. Si ce n’est pas le cas, le scriptblock retourne $false.

SetScript

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

Dans setScript scriptblock, le code crée un objet System.IO.StreamWriter à écrire dans le fichier spécifié par FilePath. Il écrit le contenu spécifié par FileContent , puis ferme l’objet StreamWriter .

Avec Invoke-DscResource

Ce script montre comment utiliser la Script ressource avec l’applet Invoke-DscResource de commande pour vous assurer qu’un fichier existe avec du contenu spécifique.

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

Avec une configuration

Cet extrait de code montre comment définir un Configuration bloc Script de ressources pour vous assurer qu’un fichier existe avec un contenu spécifique.

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