Menggunakan Import-DSCResource

Import-DSCResource adalah kata kunci dinamis, yang hanya dapat digunakan di dalam blok skrip Konfigurasi untuk mengimpor sumber daya apa pun yang diperlukan dalam Konfigurasi Anda. Sumber daya di bawah diimpor $PSHOME secara otomatis, tetapi masih dianggap sebagai praktik terbaik untuk secara eksplisit mengimpor semua sumber daya yang digunakan dalam Konfigurasi Anda.

Sintaks untuk Import-DSCResource ditunjukkan di bawah ini. Saat menentukan modul berdasarkan nama, ini adalah persyaratan untuk mencantumkan masing-masing pada baris baru.

Import-DscResource [-Name <ResourceName(s)>] [-ModuleName <ModuleName>] [-ModuleVersion <ModuleVersion>]

Parameter

  • -Name - Nama sumber daya DSC yang harus Anda impor. Jika nama modul ditentukan, perintah akan mencari sumber daya DSC ini dalam modul ini; jika tidak, perintah mencari sumber daya DSC di semua jalur sumber daya DSC. Penggunaan wildcard didukung.
  • -ModuleName - Nama modul, atau spesifikasi modul. Jika Anda menentukan sumber daya yang akan diimpor dari modul, perintah hanya akan mencoba mengimpor sumber daya tersebut. Jika Anda hanya menentukan modul, perintah mengimpor semua sumber daya DSC dalam modul.
  • -ModuleVersion - Dimulai di PowerShell 5.0, Anda dapat menentukan versi modul mana yang harus digunakan konfigurasi. Untuk informasi selengkapnya, lihat Mengimpor versi tertentu dari sumber daya yang diinstal.
Import-DscResource -ModuleName xActiveDirectory

Contoh: Menggunakan Import-DSCResource dalam konfigurasi

Configuration MSDSCConfiguration
{
    # Search for and imports Service, File, and Registry from the module PSDesiredStateConfiguration.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration -Name Service, File, Registry

    # Search for and import Resource1 from the module that defines it.
    # If only –Name parameter is used then resources can belong to different PowerShell modules as well.
    # TimeZone resource is from the ComputerManagementDSC module which is not installed by default.
    # As a best practice, list each requirement on a different line if possible.  This makes reviewing
    # multiple changes in source control a bit easier.
    Import-DSCResource -Name File
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the module PSDesiredStateConfiguration.
    # When specifying the modulename parameter, it is a requirement to list each on a new line.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration
    # In PowerShell 5.0 and later, you can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

Catatan

Menentukan beberapa nilai untuk Nama sumber daya dan nama modul dalam perintah yang sama tidak didukung. Ini dapat memiliki perilaku non-deterministik tentang sumber daya mana yang akan dimuat dari modul mana jika sumber daya yang sama ada di beberapa modul. Perintah di bawah ini akan mengakibatkan kesalahan selama kompilasi.

Import-DscResource -Name UserConfigProvider*,TestLogger1 -ModuleName UserConfigProv,PsModuleForTestLogger

Hal-hal yang perlu dipertimbangkan saat hanya menggunakan parameter Nama:

  • Ini adalah operasi intensif sumber daya tergantung pada jumlah modul yang diinstal pada komputer.
  • Ini akan memuat sumber daya pertama yang ditemukan dengan nama yang diberikan. Dalam kasus di mana ada lebih dari satu sumber daya dengan nama yang sama diinstal, sumber daya tersebut dapat memuat sumber daya yang salah.

Penggunaan yang disarankan adalah menentukan –ModuleName dengan parameter , seperti yang -Name dijelaskan di bawah ini.

Penggunaan ini memiliki manfaat berikut:

  • Ini mengurangi dampak performa dengan membatasi cakupan pencarian untuk sumber daya yang ditentukan.
  • Ini secara eksplisit mendefinisikan modul yang menentukan sumber daya, memastikan sumber daya yang benar dimuat.

Catatan

Di PowerShell 5.0, sumber daya DSC dapat memiliki beberapa versi, dan versi dapat diinstal di komputer secara berdampingan. Ini diimplementasikan dengan memiliki beberapa versi modul sumber daya yang terkandung dalam folder modul yang sama. Untuk informasi selengkapnya, lihat Menggunakan sumber daya dengan beberapa versi.

Intellisense dengan Import-DSCResource

Saat menulis konfigurasi DSC di ISE, PowerShell menyediakan IntelliSense untuk sumber daya dan properti sumber daya. Definisi sumber daya di $pshome bawah jalur modul dimuat secara otomatis. Saat Anda mengimpor sumber daya menggunakan Import-DSCResource kata kunci , definisi sumber daya yang ditentukan ditambahkan dan Intellisense diperluas untuk menyertakan skema sumber daya yang diimpor.

Intellisense di ISE untuk Sumber Daya DSC

Catatan

Dimulai di PowerShell 5.0, penyelesaian tab ditambahkan ke ISE untuk sumber daya DSC dan propertinya. Untuk mengetahui informasi selengkapnya, lihat Sumber daya.

Saat mengkompilasi Konfigurasi, PowerShell menggunakan definisi sumber daya yang diimpor untuk memvalidasi semua blok sumber daya dalam konfigurasi. Setiap blok sumber daya divalidasi, menggunakan definisi skema sumber daya, untuk aturan berikut.

  • Hanya properti yang ditentukan dalam skema yang digunakan.
  • Jenis data untuk setiap properti sudah benar.
  • Properti kunci ditentukan.
  • Tidak ada properti baca-saja yang digunakan.
  • Validasi pada jenis peta nilai.

Pertimbangkan konfigurasi berikut:

Configuration SchemaValidationInCorrectEnumValue
{
    # It is best practice to explicitly import all resources used in your Configuration.
    # This includes resources that are imported automatically, like WindowsFeature.
    Import-DSCResource -Name WindowsFeature
    Node localhost
    {
        WindowsFeature ROLE1
        {
            Name = "Telnet-Client"
            Ensure = "Invalid"
        }
    }
}

Mengkompilasi Konfigurasi ini menghasilkan kesalahan.

PSDesiredStateConfiguration\WindowsFeature: At least one of the values 'Invalid' is not supported or
valid for property 'Ensure' on class 'WindowsFeature'. Please specify only supported values:
Present, Absent.

Validasi Intellisense dan skema memungkinkan Anda menangkap lebih banyak kesalahan selama penguraian dan waktu kompilasi, menghindari komplikasi pada durasi.

Catatan

Setiap sumber daya DSC dapat memiliki nama, dan FriendlyName yang ditentukan oleh skema sumber daya. Di bawah ini adalah dua baris pertama "MSFT_ServiceResource.shema.mof".

[ClassVersion("1.0.0"),FriendlyName("Service")]
class MSFT_ServiceResource : OMI_BaseResource

Saat menggunakan sumber daya ini dalam Konfigurasi, Anda dapat menentukan MSFT_ServiceResource atau Layanan.

Perbedaan PowerShell v4 dan v5

Ada beberapa perbedaan yang Anda lihat saat menulis Konfigurasi di PowerShell 4.0 vs. PowerShell 5.0 dan yang lebih baru. Bagian ini akan menyoroti perbedaan yang Anda lihat relevan dengan artikel ini.

Beberapa Versi Sumber Daya

Menginstal dan menggunakan beberapa versi sumber daya secara berdampingan tidak didukung di PowerShell 4.0. Jika Anda melihat masalah saat mengimpor sumber daya ke Konfigurasi, pastikan Anda hanya memiliki satu versi sumber daya yang terinstal.

Pada gambar di bawah ini, dua versi modul xPSDesiredStateConfiguration diinstal.

Beberapa Versi Sumber Daya terinstal dalam folder

Salin konten versi modul yang Anda inginkan ke tingkat atas direktori modul.

Salin versi yang diinginkan ke direktori modul tingkat atas

Lokasi sumber daya

Saat menulis dan mengkompilasi Konfigurasi, sumber daya Anda dapat disimpan di direktori apa pun yang ditentukan oleh PSModulePath Anda. Di PowerShell 4.0, LCM mengharuskan semua modul sumber daya DSC disimpan di bawah "Program Files\WindowsPowerShell\Modules" atau $pshome\Modules. Dimulai di PowerShell 5.0, persyaratan ini dihapus, dan modul sumber daya dapat disimpan di direktori apa pun yang ditentukan oleh PSModulePath.

ModuleVersion ditambahkan

Dimulai di PowerShell 5.0, -ModuleVersion parameter memungkinkan Anda menentukan versi modul mana yang akan digunakan dalam konfigurasi Anda.

Lihat juga