Aracılığıyla paylaş


Set-StrictMode

İfadelerde, betiklerde ve betik bloklarında kodlama kuralları oluşturur ve uygular.

Syntax

Set-StrictMode
   -Version <Version>
   [<CommonParameters>]
Set-StrictMode
   [-Off]
   [<CommonParameters>]

Description

Cmdlet geçerli Set-StrictMode kapsam ve tüm alt kapsamlar için katı modu yapılandırarak açar ve kapatır. Katı mod açık olduğunda PowerShell, bir ifade, betik veya betik bloğunun içeriği temel en iyi uygulama kodlama kurallarını ihlal ettiğinde sonlandırıcı bir hata oluşturur.

Uygulanacak kodlama kurallarını belirlemek için Version parametresini kullanın.

Set-PSDebug -Strict cmdlet'i genel kapsam için katı modu açar. Set-StrictMode yalnızca geçerli kapsamı ve alt kapsamlarını etkiler. Ardından, genel kapsamdan devralınan ayarı geçersiz kılmak için bunu bir betikte veya işlevde kullanabilirsiniz.

Kapalı olduğunda Set-StrictMode PowerShell aşağıdaki davranışlara sahiptir:

  • Başlatılmamış değişkenlerin türüne bağlı olarak (sıfır) veya $Nulldeğerine 0 sahip olduğu varsayılır
  • Var olmayan özelliklere başvurular döndürülecek $Null
  • Hatalı işlev söz diziminin sonuçları hata koşullarına göre değişir
  • Dizide geçersiz bir dizin kullanarak bir değer almaya çalışmak sonuç verir $Null

Örnekler

Örnek 1: Katı modu sürüm 1.0 olarak açma

# 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.

Katı mod sürümü 1.0olarak ayarlandığında başlatılmamış değişkenlere başvurma girişimi başarısız olur.

Örnek 2: Katı modu sürüm 2.0 olarak açma

# 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.

Bu komut katı modu açar ve sürümüne 2.0ayarlar. Sonuç olarak PowerShell, bir işlev çağrısı için parantez ve virgül kullanan yöntem söz dizimi kullanırsanız veya başlatılmamış değişkenlere veya var olmayan özelliklere başvuruda bulunursanız bir hata döndürür.

Örnek çıktı, sürüm 2.0 katı modunun etkisini gösterir.

Sürüm 2.0 katı modu olmadan değer, (3,4) hiçbir şeyin eklenmediği tek bir dizi nesnesi olarak yorumlanır. Sürüm 2.0 katı moduyla, iki değer göndermek için hatalı söz dizimi olarak doğru yorumlanır.

sürümü 2.0olmadan, bir dizenin var olmayan Month özelliğine yapılan başvuru yalnızca $Nulldöndürür. sürümüyle 2.0, başvuru hatası olarak doğru yorumlanır.

Örnek 3: Katı modu sürüm 3.0 olarak açma

Katı mod Kapalı olarak ayarlandığında, geçersiz veya sınır dışı dizinler null değerler döndürür.

# 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."

Katı mod sürüm 3 veya üzeri olarak ayarlandığında geçersiz veya sınır dışı dizinler hatalara neden olur.

Parametreler

-Off

Bu cmdlet'in geçerli kapsam ve tüm alt kapsamlar için katı modu kapattığını gösterir.

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Version

Katı modda hataya neden olan koşulları belirtir. Bu parametre geçerli herhangi bir PowerShell sürüm numarasını kabul eder. değerinden 3 yüksek herhangi bir sayı olarak Latestdeğerlendirilir. Sağlanan değer, System.Version türüne Latest dönüştürülebilecek dize veya dize olmalıdır. Sürüm, PowerShell'in geçerli bir sürüm sürümüyle eşleşmelidir.

Bu parametre için geçerli değerler şunlardır:

  • 1.0
    • Dizelerdeki başlatılmamış değişkenler dışında başlatılmamış değişkenlere başvuruları yasaklar.
  • 2.0
    • Başlatılmamış değişkenlere başvuruları yasaklar. Bu, dizelerdeki başlatılmamış değişkenleri içerir.
    • Bir nesnenin var olmayan özelliklerine başvuruları yasaklar.
    • Yöntemleri çağırmak için söz dizimini kullanan işlev çağrılarını yasaklar.
  • 3.0
    • Başlatılmamış değişkenlere başvuruları yasaklar. Bu, dizelerdeki başlatılmamış değişkenleri içerir.
    • Bir nesnenin var olmayan özelliklerine başvuruları yasaklar.
    • Yöntemleri çağırmak için söz dizimini kullanan işlev çağrılarını yasaklar.
    • Sınırların dışında veya çözümlenemeyen dizi dizinlerini yasakla.
  • Latest
    • Kullanılabilir en son sürümü seçer. En son sürüm en katıdır. PowerShell'e yeni sürümler eklendiğinde bile betiklerin kullanılabilir en katı sürümü kullandığından emin olmak için bu değeri kullanın.

Dikkat

Latest Betiklerde Sürüm için kullanmak belirleyici değildir. PowerShell'in Latest yeni sürümlerinde anlamı değişebilir. PowerShell'in Set-StrictMode -Version Latest kullanan eski bir sürümü için yazılmış bir betik, PowerShell'in daha yeni bir sürümünde çalıştırıldığında daha kısıtlayıcı kurallara tabidir.

Type:Version
Aliases:v
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Girişler

None

Nesneleri bu cmdlet'e yöneltemezsiniz.

Çıkışlar

None

Bu cmdlet çıkış döndürmez.

Notlar

Version parametresi değerinden 3.0büyük değerleri kabul etse de, değerinden 3.0yüksek bir şey için tanımlanmış ek kural yoktur.

Set-StrictMode yalnızca içinde ve alt kapsamlarında ayarlandığı kapsamda etkilidir. PowerShell'deki kapsamlar hakkında daha fazla bilgi için bkz . about_Scopes.