Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku Untuk: Windows PowerShell 4.0, Windows PowerShell 5.x
Sumber daya Script di Windows PowerShell Desired State Configuration (DSC) menyediakan mekanisme untuk menjalankan blok skrip Windows PowerShell pada simpul target. Sumber daya Script menggunakan properti GetScriptSetScript, dan TestScript yang berisi blok skrip yang Anda tentukan untuk melakukan operasi status DSC yang sesuai.
Ujung
Jika memungkinkan, praktik terbaik adalah menggunakan sumber daya DSC yang ditentukan alih-alih yang satu ini. Sumber daya Script memiliki kelemahan yang membuatnya lebih sulit untuk menguji, memelihara, dan memprediksi.
Tidak seperti sumber daya DSC lainnya, setiap properti untuk sumber daya Script adalah properti kunci dan metode Dapatkan untuk sumber daya ini hanya dapat mengembalikan satu string untuk status saat ini. Tidak ada jaminan bahwa sumber daya ini diimplementasikan secara idempotensi atau akan berfungsi seperti yang diharapkan pada sistem apa pun karena menggunakan kode kustom. Ini tidak dapat diuji tanpa dipanggil pada sistem target.
Sebelum menggunakan sumber daya Script, 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.
Nota
Dokumentasi sumber daya DSC ini mencakup versi yang disertakan dengan PowerShell sebelum versi 7.2. Modul
Untuk informasi selengkapnya dan dokumentasi yang diperbarui, lihat dokumentasi referensi PSDscResources.
Sintaksis
Script [string] #ResourceName
{
GetScript = [string]
SetScript = [string]
TestScript = [string]
[ Credential = [PSCredential] ]
[ DependsOn = [string[]] ]
[ PsDscRunAsCredential = [PSCredential] ]
}
Nota
GetScript
TestScript, dan blok SetScript disimpan sebagai string.
Properti
| Harta benda | Deskripsi |
|---|---|
| GetScript | Blok skrip yang mengembalikan status Simpul saat ini. |
| SetScript | Blok skrip yang digunakan DSC untuk memberlakukan kepatuhan saat Node tidak dalam status yang diinginkan. |
| TestScript | Blok skrip yang menentukan apakah Node berada dalam status yang diinginkan. |
| Credential | Menunjukkan kredensial yang digunakan untuk menjalankan skrip ini, jika kredensial diperlukan. |
Properti umum
| Harta benda | Deskripsi |
|---|---|
| DependsOn | Menunjukkan bahwa konfigurasi sumber daya lain harus berjalan sebelum sumber daya ini dikonfigurasi. |
| PsDscRunAsCredential | Mengatur kredensial untuk menjalankan seluruh sumber daya sebagai. |
Nota
Properti umum PsDscRunAsCredential ditambahkan di 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
TestScript
DSC menjalankan TestScript untuk menentukan apakah SetScript harus dijalankan. Jika TestScript mengembalikan $false, DSC menjalankan SetScript untuk membawa simpul kembali ke status yang diinginkan. Ini harus mengembalikan nilai boolean. Hasil $true menunjukkan bahwa simpul sesuai dan SetScript tidak boleh dijalankan.
Cmdlet Test-DscConfiguration SetScript tidak berjalan, tidak peduli apa TestScript pengembalian blok.
Nota
Semua output dari TestScript Anda adalah bagian dari nilai pengembaliannya. PowerShell menginterpretasikan output yang tidak tertekan sebagai bukan nol, yang berarti bahwa TestScript Anda 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 memberlakukan status yang diinginkan. DSC memanggil SetScript jika blok skrip TestScript mengembalikan $false.
SetScript seharusnya 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, itu membuatnya menggunakan SetScript.
GetScript mengembalikan konten file, dan nilai pengembaliannya 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 $using:version di setiap blok skrip dengan nilai variabel $version. Selama eksekusi, versi
$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 cakupan using.
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 cakupan using.
Mereka disuntikkan ke dalam setiap blok skrip, yang menggunakan variabel. Uji dan Atur skrip dihapus untuk brevity:
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 yang Diketahui
- 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.