Bagikan melalui


Perubahan perilaku dalam Konfigurasi Status yang Diinginkan PowerShell untuk konfigurasi mesin

Sebelum memulai, sebaiknya baca gambaran umum konfigurasi mesin.

Video panduan untuk dokumen ini tersedia.

Konfigurasi mesin menggunakan PowerShell Desired State Configuration (PSDSC) versi 3 untuk mengaudit dan mengonfigurasi komputer. Konfigurasi DSC menentukan status tempat mesin dijalankan. Ada banyak perbedaan penting terkait bagaimana DSC diimplementasikan ke konfigurasi mesin.

Konfigurasi mesin menggunakan lintas platform PowerShell 7

Konfigurasi mesin dirancang untuk mendapatkan pengalaman pengelolaan Windows dan Linux yang konsisten. Di kedua lingkungan sistem operasi, seseorang dengan pengetahuan DSC PowerShell dapat membuat dan menerbitkan konfigurasi menggunakan keterampilan pembuatan skrip.

Konfigurasi mesin hanya menggunakan PowerShell DSC versi 3 dan tidak bergantung pada implementasi DSC sebelumnya untuk Linux atau penyedia yang disertakan dalam repositori tersebut nx* .

Pada versi 1.26.33, konfigurasi komputer beroperasi di PowerShell 7.1.2 untuk Windows dan PowerShell 7.2 pratinjau 6 untuk Linux. Dimulai dengan versi 7.2, modul PSDesiredStateConfiguration dipindahkan dari menjadi bagian dari penginstalan PowerShell dan sebagai gantinya diinstal sebagai modul dari Galeri PowerShell.

Beberapa konfigurasi

Konfigurasi mesin mendukung penetapan beberapa konfigurasi ke mesin yang sama. Tidak ada langkah khusus yang diperlukan dalam sistem operasi ekstensi konfigurasi mesin. Tidak perlu mengonfigurasi konfigurasi parsial.

Dependensi dikelola per konfigurasi

Saat konfigurasi dibungkus menggunakan alat yang tersedia, dependensi yang diperlukan untuk konfigurasi disertakan dalam .zip file. Mesin mengekstrak isinya ke dalam folder unik untuk setiap konfigurasi. Agen yang dikirimkan oleh ekstensi konfigurasi komputer membuat sesi PowerShell khusus untuk setiap konfigurasi. Ini menggunakan $Env:PSModulePath yang membatasi pemuatan modul otomatis hanya ke jalur tempat paket diekstraksi.

Perubahan ini memiliki beberapa manfaat:

  • Dimungkinkan untuk menggunakan versi modul yang berbeda untuk setiap konfigurasi, pada mesin yang sama.
  • Ketika konfigurasi tidak lagi diperlukan pada komputer, agen dengan aman menghapus seluruh folder tempat konfigurasi diekstrak. Anda tidak perlu mengelola dependensi bersama di seluruh konfigurasi.
  • Tidak perlu mengelola beberapa versi modul apa pun di layanan pusat.

Artefak dikelola sebagai paket

Fitur Azure Automation State Configuration mencakup manajemen artefak modul dan skrip konfigurasi. Setelah keduanya diterbitkan ke layanan, skrip dapat dikompilasi ke format MOF. Demikian pula, Windows Pull Server juga memerlukan pengelolaan konfigurasi dan modul di instans layanan web. Sebaliknya, ekstensi DSC memiliki model yang disederhanakan di mana semua artefak dipaketkan bersama-sama dan disimpan di lokasi yang dapat diakses dari komputer target menggunakan permintaan HTTPS. Azure Blob Storage adalah opsi populer untuk menghosting artefak.

Konfigurasi mesin hanya menggunakan model sederhana tempat semua artefak dikemas bersama dan diakses dari mesin target melalui HTTPS. Anda tidak perlu menerbitkan modul, skrip, atau mengompilasi dalam layanan. Salah satu perubahannya adalah bahwa paket harus selalu menyertakan MOF yang dikompilasi. Tidak dimungkinkan untuk menyertakan file skrip dalam paket dan mengkompilasi pada komputer target.

Ukuran maksimum paket konfigurasi kustom

Dalam Konfigurasi Status Azure Automation, konfigurasi DSC berukuran terbatas. Konfigurasi komputer mendukung ukuran paket total 100 MB sebelum pemadatan. Tidak ada batasan khusus pada ukuran file MOF dalam paket.

Mode konfigurasi diatur dalam artefak paket

Saat Anda membuat paket konfigurasi, mode diatur menggunakan opsi berikut:

  • Audit - Memverifikasi kepatuhan mesin. Tidak diperlukan perubahan.
  • AuditandSet - Memverifikasi dan memulihkan status kepatuhan komputer. Perubahan dilakukan jika mesin tidak patuh.

Mode diatur dalam paket daripada di layanan Manajer Konfigurasi Lokal karena setiap konfigurasi dapat diterapkan dengan mode yang berbeda.

Dukungan parameter melalui Azure Resource Manager

Parameter yang diatur oleh array properti configurationParameter dalam penetapan konfigurasi komputer menimpa teks statis dalam file MOF konfigurasi saat file disimpan di komputer. Parameter memungkinkan penyesuaian dan operator untuk mengontrol perubahan dari API layanan tanpa perlu menjalankan perintah dalam komputer.

Parameter dalam Azure Policy yang meneruskan nilai ke penetapan konfigurasi mesin harus berjenis string. Tidak dimungkinkan untuk melewati array melalui parameter, meskipun sumber daya DSC mendukung array.

Set Pemicu dari luar mesin

Tantangan dalam versi DSC sebelumnya adalah mengoreksi penyimpangan berskala besar tanpa banyak kode khusus dan ketergantungannya pada koneksi jarak jauh WinRM. Konfigurasi tamu memecahkan masalah ini. Pengguna konfigurasi mesin memiliki kontrol atas koreksi penyimpangan melalui Remediasi Sesuai Permintaan.

Urutan termasuk metode Get

Saat konfigurasi mesin mengaudit atau mengonfigurasi mesin, urutan peristiwa yang sama digunakan untuk Windows dan Linux. Perubahan perilaku yang penting adalah bahwa Get metode dipanggil oleh layanan untuk mengembalikan detail tentang status komputer.

  1. Agen pertama kali menjalankan Test untuk menentukan apakah konfigurasi dalam status yang benar.
  2. Jika paket diatur ke Audit, nilai boolean yang dikembalikan oleh fungsi menentukan apakah status Azure Resource Manager untuk Penetapan Tamu harus Compliant atau NonCompliant.
  3. Jika paket diatur ke AuditandSet, nilai boolean menentukan apakah akan memulihkan komputer dengan menerapkan konfigurasi menggunakan Set metode . Test Jika metode mengembalikan $false, Set dijalankan. Jika Test mengembalikan $true, maka Set tidak dijalankan.
  4. Terakhir, penyedia menjalankan Get untuk menampilkan status saat ini dari setiap setelan sehingga detail tersedia baik tentang mengapa mesin tidak sesuai syarat dan untuk mengonfirmasi bahwa status saat ini sesuai syarat.

Persyaratan khusus untuk Get

Metode DSC Get memiliki persyaratan khusus untuk konfigurasi komputer yang belum diperlukan untuk DSC.

  • Tabel hash yang dikembalikan harus menyertakan properti bernama Reasons.
  • Properti Alasan harus berupa array.
  • Setiap item dalam array harus berupa tabel hash dengan kunci bernama Kode dan Frasa.
  • Tidak ada nilai selain tabel hash yang harus dikembalikan.

Properti Alasan digunakan oleh layanan untuk menstandarkan bagaimana informasi kepatuhan disajikan. Anda dapat menganggap setiap item dalam Alasan sebagai pesan tentang bagaimana sumber daya tersebut atau tidak sesuai. Properti ini adalah array karena sumber daya bisa tidak sesuai syarat karena lebih dari satu alasan.

Properti Code dan Phrase diharapkan oleh layanan. Saat menulis sumber daya kustom, atur teks yang ingin Anda tampilkan sebagai alasan sumber daya tidak sesuai sebagai nilai untuk Frasa. Code memiliki persyaratan pemformatan khusus sehingga pelaporan bisa dengan jelas menampilkan informasi tentang sumber daya yang digunakan untuk melakukan audit. Solusi ini membuat konfigurasi tamu dapat diperluas. Perintah apa pun bisa dijalankan selama output bisa ditampilkan sebagai nilai string untuk properti Phrase.

  • Code (string): Nama sumber daya, diulang, lalu nama pendek tanpa spasi sebagai pengidentifikasi karena alasan tersebut. Ketiga nilai ini harus dibatasi dua kali tanpa spasi.
    • Contohnya adalah registry:registry:keynotpresent
  • Phrase (string): Teks yang bisa dibaca manusia untuk menjelaskan mengapa pengaturan tidak sesuai syarat.
    • Contohnya adalah The registry key $key isn't present on the machine.
$reasons = @()
$reasons += @{
  Code   = 'Name:Name:ReasonIdentifer'
  Phrase = 'Explain why the setting is not compliant'
}
return @{
    reasons = $reasons
}

Saat menggunakan alat baris perintah untuk mendapatkan informasi yang kembali di Get, Anda mungkin menemukan alat mengembalikan output yang tidak Anda harapkan. Meskipun Anda mengambil output di PowerShell, output mungkin juga telah ditulis untuk kesalahan standar. Untuk menghindari masalah ini, pertimbangkan untuk mengalihkan output ke null.

Kelas tersemat properti Reasons

Dalam sumber daya berbasis skrip (khusus Windows), kelas Alasan disertakan dalam file MOF skema sebagai berikut.

[ClassVersion("1.0.0.0")]
class Reason
{
  [Read] String Phrase;
  [Read] String Code;
};

[ClassVersion("1.0.0.0"), FriendlyName("ResourceName")]
class ResourceName : OMI_BaseResource
{
  [Key, Description("Example description")] String Example;
  [Read, EmbeddedInstance("Reason")] String Reasons[];
};

Dalam sumber daya berbasis kelas (Windows dan Linux), kelas Alasan disertakan dalam modul PowerShell sebagai berikut. Linux peka huruf besar/kecil, sehingga C masuk Code dan P masuk harus dikapitalisasi Phrase .

enum ensure {
  Absent
  Present
}

class Reason {
  [DscProperty()]
  [string] $Code

  [DscProperty()]
  [string] $Phrase
}

[DscResource()]
class Example {

  [DscProperty(Key)]
  [ensure] $ensure

  [DscProperty()]
  [Reason[]] $Reasons

  [Example] Get() {
    # return current current state
  }

  [void] Set() {
    # set the state
  }

  [bool] Test() {
    # check whether state is correct
  }
}

Jika sumber daya memiliki properti yang diperlukan, properti tersebut juga harus dikembalikan secara Get paralel dengan kelas Alasan . Jika Alasan tidak disertakan, layanan menyertakan perilaku "catch-all" yang membandingkan nilai yang diinput dan Get nilai yang dikembalikan oleh Get, dan memberikan perbandingan terperinci sebagai Alasan.

Nama konfigurasi

Nama konfigurasi kustom harus konsisten di mana saja. Item ini harus memiliki nama yang sama:

  • File .zip untuk paket konten
  • Nama konfigurasi dalam file MOF
  • Nama penetapan konfigurasi komputer di templat Azure Resource Manager

Menjalankan perintah di Windows PowerShell

Menjalankan modul Windows di PowerShell dapat dicapai menggunakan pola di bawah ini di sumber daya DSC Anda. Pola di bawah ini untuk sementara mengatur PSModulePath untuk menjalankan Windows PowerShell alih-alih PowerShell untuk menemukan modul yang diperlukan yang tersedia di Windows PowerShell. Sampel ini adalah cuplikan yang diadaptasi dari sumber daya DSC yang digunakan dalam sumber daya DSC bawaan Server Web Aman.

Pola ini untuk sementara mengatur jalur eksekusi PowerShell untuk dijalankan dari Windows PowerShell dan menemukan cmdlet yang diperlukan, yang dalam hal ini adalah Get-WindowsFeature. Output perintah dikembalikan dan kemudian distandarkan untuk persyaratan kompatibilitas. Setelah cmdlet dijalankan, $env:PSModulePath diatur kembali ke jalur asli.

# The Get-WindowsFeature cmdlet needs to be run through Windows PowerShell
# rather than through PowerShell, which is what the Policy engine runs.
$null = Invoke-Command -ScriptBlock {
    param ([string]$FileName)

    $InitialPSModulePath   = $env:PSModulePath
    $WindowsPSFolder       = "$env:SystemRoot\System32\WindowsPowershell\v1.0"
    $WindowsPSExe          = "$WindowsPSFolder\powershell.exe"
    $WindowsPSModuleFolder = "$WindowsPSFolder\Modules"
    $GetFeatureScriptBlock = {
        param([string]$FileName)

        if (Get-Command -Name Get-WindowsFeature -ErrorAction SilentlyContinue) {
            Get-WindowsFeature -Name Web-Server |
                ConvertTo-Json |
                Out-File $FileName
        } else {
            Add-Content -Path $FileName -Value 'NotServer'
        }
    }

    try {
        # Set env variable to include Windows Powershell modules so we can find
        # the Get-WindowsFeature cmdlet.
        $env:PSModulePath = $WindowsPSModuleFolder
        # Call Windows PowerShell to get the info about the Web-Server feature
        & $WindowsPSExe -command $WindowsFeatureScriptBlock -args $FileName
    } finally {
        # Reset the env variable even if there's an error.
        $env:PSModulePath = $InitialPSModulePath
    }
}

Fitur DSC umum tidak tersedia selama konfigurasi mesin dalam pratinjau umum

Selama pratinjau publik, konfigurasi komputer tidak mendukung penentuan dependensi lintas komputer menggunakan WaitFor* sumber daya. Tidak dimungkinkan bagi satu komputer untuk menonton dan menunggu komputer lain mencapai status sebelum maju.

Penanganan reboot tidak tersedia dalam rilis pratinjau umum konfigurasi mesin, termasuk, $global:DSCMachineStatus tidak tersedia. Konfigurasi tidak dapat memulai ulang node selama atau di akhir konfigurasi.

Masalah kompatibilitas yang diketahui dengan modul yang didukung

Modul PsDscResources di Galeri PowerShell dan modul PSDesiredStateConfiguration yang dikirim dengan Windows didukung oleh Microsoft dan telah menjadi sekumpulan sumber daya yang umum digunakan untuk DSC. Hingga modul PSDscResources diperbarui untuk DSCv3, ketahui masalah kompatibilitas yang diketahui berikut ini.

  • Jangan gunakan sumber daya dari modul PSDesiredStateConfiguration yang dikirimkan dengan Windows. Sebagai gantinya, beralihlah ke PSDscResources.
  • Jangan gunakan WindowsFeaturesumber daya , , WindowsFeatureSetWindowsOptionalFeature, dan WindowsOptionalFeatureSet di PsDscResources. Ada masalah yang diketahui saat memuat modul DISM di PowerShell 7.1.3 di Windows Server yang memerlukan pembaruan.

Sumber nx* daya untuk Linux yang disertakan dalam repositori DSC untuk Linux ditulis dalam kombinasi bahasa C dan Python. Karena jalur maju untuk DSC di Linux adalah menggunakan PowerShell, sumber daya yang ada nx* tidak kompatibel dengan DSCv3. Sebelum modul baru yang berisi sumber daya yang didukung untuk Linux tersedia, sumber daya kustom harus ditulis.

Digunakan bersama dengan DSC versi 3 dan versi sebelumnya

DSC versi 3 dalam konfigurasi mesin dapat digunakan bersama dengan versi lama yang terpasang di Windows dan Linux. Implementasinya terpisah. Namun, tidak ada deteksi konflik di seluruh versi DSC, jadi jangan mencoba mengelola pengaturan yang sama.

Langkah berikutnya