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 $Nullmengembalikan . 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.