Bagikan melalui


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.