Aracılığıyla paylaş


Set-StrictMode

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

Syntax

Version (Varsayılan)

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

Off

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

Description

Set-StrictMode cmdlet'i geçerli 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 ifadenin, betiğin veya betik bloğunun içeriği temel en iyi uygulama kodlama kurallarını ihlal ettiğinde sonlandırıcı bir hata oluşturur.

Zorunlu kılınacak kodlama kurallarını belirlemek için Sürüm 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.

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

  • Başlatılmamış değişkenlerin türüne bağlı olarak 0 (sıfır) veya $nulldeğerine sahip olduğu varsayılır
  • Varolmayan özelliklere başvurular $null döndürür
  • 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 $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 1.0sürümüne 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 2.0sürümüne ayarlar. 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ı, katı mod 2.0 sürümün etkisini gösterir.

Sürüm 2.0 katı mod olmadan, (3,4) değeri hiçbir şeyin eklenmediği tek bir dizi nesnesi olarak yorumlanır. Sürüm 2.0 katı modda, 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 Ay özelliğine yapılan başvuru yalnızca $nulldöndürür. sürüm 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.

Parametre özellikleri

Tür:SwitchParameter
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

Off
Position:Named
Zorunlu:True
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-Version

Katı modda hataya neden olan koşulları belirtir. Bu parametre geçerli herhangi bir PowerShell sürüm numarasını kabul eder. 3'den yüksek herhangi bir sayı Latestolarak değerlendirilir. Sağlanan değer, Latest dizesi veya System.Version türüne dönüştürülebilen bir 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

Betiklerde Latest için kullanılması belirleyici değildir. powershell'in yeni sürümlerinde Latest 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.

Parametre özellikleri

Tür:Version
Default value:None
Joker karakterleri destekler:False
DontShow:False
Diğer adlar:v

Parametre kümeleri

Version
Position:Named
Zorunlu:True
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

CommonParameters

Bu cmdlet yaygın parametreleri destekler: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction ve -WarningVariable. Daha fazla bilgi için bkz. about_CommonParameters.

Girişler

None

Nesneleri bu cmdlet'e yöneltemezsiniz.

Çıkışlar

None

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

Notlar

Sürüm parametresi 3.0'den büyük değerleri kabul etse de, 3.0daha yüksek bir şey için tanımlanmış ek kural yoktur.

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