Set-StrictMode
Menetapkan dan memberlakukan aturan pengodean dalam ekspresi, skrip, dan blok skrip.
Sintaks
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Deskripsi
Set-StrictMode
Cmdlet 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 diberlakukan.
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 pengembalian properti yang tidak ada
$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 mode ketat versi 2.0
.
Tanpa mode ketat versi 2.0
, nilai ditafsirkan (3,4)
sebagai objek array tunggal yang tidak ada yang ditambahkan. Dengan mode ketat versi 2.0
, 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 $Null
mengembalikan . Dengan versi 2.0
, ini ditafsirkan dengan benar sebagai kesalahan referensi.
Contoh 3: Aktifkan mode ketat sebagai versi 3.0
Dengan mode ketat diatur ke Nonaktif, indeks 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 yang diatur ke versi atau lebih 3
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.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | 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.
Perhatian
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.
Type: | Version |
Aliases: | v |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
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 ditetapkan dalam dan dalam cakupan anaknya. Untuk informasi selengkapnya tentang cakupan di PowerShell, lihat about_Scopes.
Link Terkait
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