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 GetScript
SetScript
properti , 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
GetScript
TestScript
, 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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk