Set-StrictMode
Menetapkan dan menerapkan aturan pengodean dalam ekspresi, skrip, dan blok skrip.
Sintaks
Version (Default)
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Off
Set-StrictMode
[-Off]
[<CommonParameters>]
Deskripsi
Cmdlet Set-StrictMode mengonfigurasi mode ketat untuk cakupan saat ini dan semua cakupan anak, dan mengaktifkan dan menonaktifkannya. Saat mode ketat aktif, PowerShell menghasilkan kesalahan penghentian saat konten ekspresi, skrip, atau blok skrip melanggar aturan pengodean praktik terbaik dasar.
Gunakan parameter Versi untuk menentukan aturan pengodean yang akan diterapkan.
Set-PSDebug -Strict cmdlet mengaktifkan mode ketat untuk cakupan global.
Set-StrictMode hanya memengaruhi cakupan saat ini dan cakupan anaknya. Kemudian, Anda dapat menggunakannya dalam skrip atau fungsi untuk mengambil alih pengaturan yang diwarisi dari cakupan global.
Saat Set-StrictMode nonaktif, PowerShell memiliki perilaku berikut:
- Variabel yang tidak diinisialisasi diasumsikan memiliki nilai
0(nol) atau$null, tergantung pada jenis - Referensi ke properti yang tidak ada mengembalikan
$null - Hasil sintaks fungsi yang tidak tepat bervariasi menurut kondisi kesalahan
- Mencoba mengambil nilai menggunakan indeks yang tidak valid dalam array mengembalikan
$null
Contoh
Contoh 1: Aktifkan mode ketat sebagai versi 1.0
# Strict mode is off by default.
$a -gt 5
False
Set-StrictMode -Version 1.0
$a -gt 5
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.
Dengan mode ketat diatur ke versi 1.0, upaya untuk mereferensikan variabel yang tidak diinisialisasi gagal.
Contoh 2: Aktifkan mode ketat sebagai versi 2.0
# Strict mode is off by default.
function add ($a, $b) {
'$a = ' + $a
'$b = ' + $b
'$a+$b = ' + ($a + $b)
}
add 3 4
$a = 3
$b = 4
$a+$b = 7
add(3,4)
$a = 3 4
$b =
$a+$b = 3 4
Set-StrictMode -Version 2.0
add(3,4)
InvalidOperation: The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.
Set-StrictMode -Off
$string = "This is a string."
$null -eq $string.Month
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month
PropertyNotFoundException: The property 'Month' cannot be found on this object. Verify that the property exists.
Perintah ini mengaktifkan mode ketat dan mengaturnya ke versi 2.0. Akibatnya, PowerShell mengembalikan kesalahan jika Anda menggunakan sintaks metode, yang menggunakan tanda kurung dan koma, untuk panggilan fungsi atau referensi variabel yang tidak diinisialisasi atau properti yang tidak ada.
Output sampel menunjukkan efek versi 2.0 mode ketat.
Tanpa versi 2.0 mode ketat, nilai (3,4) ditafsirkan sebagai objek array tunggal yang tidak ada yang ditambahkan. Dengan versi 2.0 mode ketat, ini ditafsirkan dengan benar sebagai sintaks yang salah untuk mengirimkan dua nilai.
Tanpa versi 2.0, referensi ke properti Bulan yang tidak ada dari string hanya mengembalikan $null. Dengan versi 2.0, versi ditafsirkan dengan benar sebagai kesalahan referensi.
Contoh 3: Aktifkan mode ketat sebagai versi 3.0
Dengan mode ketat diatur ke Nonaktif, indeks yang tidak valid atau di luar batas menghasilkan nilai null.
# Strict mode is off by default.
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']
True
True
Set-StrictMode -Version 3.0
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']
OperationStopped: Index was outside the bounds of the array.
InvalidArgument: Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
Dengan mode ketat diatur ke versi 3 atau lebih tinggi, indeks tidak valid atau di luar batas mengakibatkan kesalahan.
Parameter
-Off
Menunjukkan bahwa cmdlet ini mematikan mode ketat untuk cakupan saat ini dan semua cakupan anak.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Kumpulan parameter
Off
| Position: | Named |
| Wajib: | True |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Version
Menentukan kondisi yang menyebabkan kesalahan dalam mode ketat. Parameter ini menerima nomor versi PowerShell yang valid. Angka apa pun yang lebih tinggi dari 3 diperlakukan sebagai Latest. Nilai yang disediakan harus berupa string Latest atau string yang dapat dikonversi ke jenis System.Version. Versi harus cocok dengan versi rilis PowerShell yang valid.
Nilai efektif untuk parameter ini adalah:
1.0- Melarang referensi ke variabel yang tidak diinisialisasi, kecuali untuk variabel yang tidak diinisialisasi dalam string.
2.0- Melarang referensi ke variabel yang tidak diinisialisasi. Ini termasuk variabel yang tidak diinisialisasi dalam string.
- Melarang referensi ke properti objek yang tidak ada.
- Melarang panggilan fungsi yang menggunakan sintaks untuk memanggil metode.
3.0- Melarang referensi ke variabel yang tidak diinisialisasi. Ini termasuk variabel yang tidak diinisialisasi dalam string.
- Melarang referensi ke properti objek yang tidak ada.
- Melarang panggilan fungsi yang menggunakan sintaks untuk memanggil metode.
- Melarang keluar dari batas atau indeks array yang tidak dapat diselesaikan.
Latest- Memilih versi terbaru yang tersedia. Versi terbaru adalah yang paling ketat. Gunakan nilai ini untuk memastikan bahwa skrip menggunakan versi paling ketat yang tersedia, bahkan ketika versi baru ditambahkan ke PowerShell.
Caution
Menggunakan Latest untuk Versi dalam skrip tidak deterministik. Arti Latest dapat berubah dalam rilis baru PowerShell. Skrip yang ditulis untuk versi PowerShell yang lebih lama yang menggunakan Set-StrictMode -Version Latest tunduk pada aturan yang lebih ketat saat dijalankan di versi PowerShell yang lebih baru.
Properti parameter
| Jenis: | Version |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
| Alias: | v |
Kumpulan parameter
Version
| Position: | Named |
| Wajib: | True |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
CommonParameters
Cmdlet ini mendukung parameter umum: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, dan -WarningVariable. Untuk informasi selengkapnya, lihat about_CommonParameters.
Input
None
Anda tidak dapat menyalurkan objek ke cmdlet ini.
Output
None
Cmdlet ini tidak mengembalikan output.
Catatan
Meskipun parameter Versi menerima nilai yang lebih besar dari 3.0, tidak ada aturan tambahan yang ditentukan untuk apa pun yang lebih tinggi dari 3.0.
Set-StrictMode hanya efektif dalam cakupan yang diatur dalam dan dalam cakupan anaknya. Untuk informasi selengkapnya tentang cakupan di PowerShell, lihat about_Scopes.