Sumber Daya Skrip DSC

Berlaku Untuk: Windows PowerShell 4.0, Windows PowerShell 5.x

Sumber Script daya dalam Windows PowerShell Desired State Configuration (DSC) menyediakan mekanisme untuk menjalankan blok skrip Windows PowerShell pada simpul target. Sumber Script daya menggunakan GetScriptSetScriptproperti , dan TestScript yang berisi blok skrip yang Anda tentukan untuk melakukan operasi status DSC yang sesuai.

Tip

Jika memungkinkan, praktik terbaik adalah menggunakan sumber daya DSC yang ditentukan alih-alih yang satu ini. Sumber Script daya memiliki kelemahan yang membuatnya lebih sulit untuk menguji, memelihara, dan memprediksi.

Tidak seperti sumber daya DSC lainnya, setiap properti untuk Script sumber daya adalah properti kunci dan metode Get untuk sumber daya ini hanya dapat mengembalikan satu string untuk status saat ini. Tidak ada jaminan bahwa sumber daya ini diimplementasikan secara idempotensi atau bahwa sumber daya ini akan berfungsi seperti yang diharapkan pada sistem apa pun karena menggunakan kode kustom. Ini tidak dapat diuji tanpa dipanggil pada sistem target.

Sebelum menggunakan Script sumber daya, pertimbangkan apakah Anda dapat menulis sumber daya sebagai gantinya. Menggunakan sumber daya DSC yang terdefinisi dengan baik membuat konfigurasi Anda lebih mudah dibaca dan dipertahankan.

Catatan

Dokumentasi sumber daya DSC ini mencakup versi yang disertakan dengan PowerShell sebelum versi 7.2. Modul PSDscResources berisi Sumber Daya DSC baru dan yang diperbarui yang secara resmi didukung oleh Microsoft. Modul PSDscResources tersedia dari Galeri PowerShell.

Untuk informasi selengkapnya dan dokumentasi yang diperbarui, lihat dokumentasi referensi PSDscResources.

Sintaks

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

Catatan

GetScriptTestScript, dan SetScript blok disimpan sebagai string.

Properti

Properti Deskripsi
GetScript Blok skrip yang mengembalikan status Simpul saat ini.
SetScript Blok skrip yang digunakan DSC untuk menegakkan kepatuhan saat Node tidak dalam status yang diinginkan.
TestScript Blok skrip yang menentukan apakah Node berada dalam status yang diinginkan.
Kredensial Menunjukkan kredensial yang akan digunakan untuk menjalankan skrip ini, jika kredensial diperlukan.

Properti umum

Properti Deskripsi
DependsOn Menunjukkan bahwa konfigurasi sumber daya lain harus berjalan sebelum sumber daya ini dikonfigurasi.
PsDscRunAsCredential Mengatur kredensial untuk menjalankan seluruh sumber daya sebagai.

Catatan

Properti umum PsDscRunAsCredential ditambahkan dalam WMF 5.0 untuk memungkinkan menjalankan sumber daya DSC apa pun dalam konteks info masuk lainnya. Untuk informasi selengkapnya, lihat Menggunakan Kredensial dengan Sumber Daya DSC.

Informasi Tambahan

GetScript

DSC tidak menggunakan output dari GetScript cmdlet Get-DscConfiguration dijalankan GetScript untuk mengambil status simpul saat ini. Nilai yang dikembalikan tidak diperlukan dari GetScript Jika Anda menentukan nilai yang dikembalikan, nilai tersebut harus berupa hashtable yang berisi kunci Hasil yang nilainya adalah String.

TestScript

DSC dijalankan TestScript untuk menentukan apakah SetScript harus dijalankan. Jika TestScript mengembalikan $false, DSC dijalankan SetScript untuk membawa simpul kembali ke status yang diinginkan. Ini harus mengembalikan nilai boolean. Hasil dari $true menunjukkan bahwa simpul sesuai dan SetScript tidak boleh dijalankan.

Cmdlet Test-DscConfiguration dijalankan TestScript untuk mengambil kepatuhan simpul dengan Script sumber daya. Namun, dalam hal ini, SetScript tidak berjalan, tidak peduli blok apa yang TestScript kembali.

Catatan

Semua output dari Anda TestScript adalah bagian dari nilai pengembaliannya. PowerShell menginterpretasikan output yang tidak tertekan sebagai bukan nol, yang berarti bahwa Anda TestScript mengembalikan $true terlepas dari status simpul Anda. Ini menghasilkan hasil yang tidak dapat diprediksi, positif palsu, dan menyebabkan kesulitan selama pemecahan masalah.

SetScript

SetScript memodifikasi simpul untuk menegakkan status yang diinginkan. DSC memanggil SetScript jika TestScript blok skrip mengembalikan $false. seharusnya SetScript tidak memiliki nilai pengembalian.

Contoh

Contoh 1: Menulis teks sampel menggunakan sumber daya Skrip

Contoh ini menguji keberadaan C:\TempFolder\TestFile.txt pada setiap simpul. Jika tidak ada, ia membuatnya menggunakan SetScript. mengembalikan GetScript konten file, dan nilai yang dikembalikan tidak digunakan.

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

Contoh 2: Membandingkan informasi versi menggunakan sumber daya Skrip

Contoh ini mengambil informasi versi yang sesuai dari file teks di komputer penulisan dan menyimpannya dalam $version variabel. Saat menghasilkan file MOF simpul, DSC mengganti $using:version variabel di setiap blok skrip dengan nilai $version variabel. Selama eksekusi, versi yang sesuai disimpan dalam file teks pada setiap Node dan dibandingkan dan diperbarui pada eksekusi berikutnya.

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

Contoh 3: Menggunakan parameter dalam sumber daya Skrip

Contoh ini mengakses parameter dari dalam sumber daya Skrip dengan menggunakan using cakupan. ConfigurationData dapat diakses dengan cara yang sama. Seperti contoh 2, implementasi mengharapkan versi disimpan di dalam file lokal pada simpul target. Jalur lokal dan versi dapat dikonfigurasi, memisahkan kode dari data konfigurasi.

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

File MOF yang dihasilkan mencakup variabel dan nilainya yang diakses melalui using cakupan. Mereka disuntikkan ke dalam setiap blok skrip, yang menggunakan variabel. Uji dan Atur skrip dihapus untuk keringkasan:

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 = ...;
};

Batasan Umum

  • Kredensial yang diteruskan dalam sumber daya skrip tidak selalu dapat diandalkan saat menggunakan model server penarikan atau pendorongan. Gunakan sumber daya lengkap daripada menggunakan sumber daya skrip dalam kasus ini.