Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
Birden çok koşullu deyimi işlemek için anahtarın nasıl kullanılacağını açıklar.
Uzun açıklama
Betik veya işlevdeki bir koşulu denetlemek için deyimini if kullanabilirsiniz.
deyimi if , değişkenlerin değeri ve nesnelerin özellikleri dahil olmak üzere birçok koşul türünü denetleyebilir.
Birden çok koşulu denetlemek için deyimini switch kullanabilirsiniz. deyimi switch , bir dizi if deyime benzer, ancak daha basittir. deyimi her switch koşulu ve buna karşılık gelen eylemi listeler. Bir koşul eşleşirse, eylem gerçekleştirilir.
Önemli
deyimi, switch karşılaştırmadan önce tüm değerleri dizelere dönüştürür.
Sözdizimi
Temel switch deyim aşağıdaki biçime sahiptir:
switch (<test-expression>) {
<result1-to-be-matched> {<action>}
<result2-to-be-matched> {<action>}
}
Bir switch deyiminin söz dizimi aşağıdaki if deyimlere benzer:
if ("$(<result1-to-be-matched>)") -eq ("$(<test-expression>)") {<action>}
if ("$(<result2-to-be-matched>)") -eq ("$(<test-expression>)") {<action>}
İfadeler değişmez değerler (dizeler veya sayılar), değişkenler ve boole değeri döndüren betik blokları içerir. deyimi, switch karşılaştırmadan önce tüm değerleri dizelere dönüştürür. Bir örnek için bu makalenin devamında yer alan Dize dönüştürmenin etkisi bölümüne bakın.
<test-expression> ifadesi ifade modunda değerlendirilir. İfade bir dizi veya başka bir numaralandırılabilir tür gibi birden fazla değer döndürürse, switch deyimi her numaralandırılmış değeri ayrı ayrı değerlendirir.
<result-to-be-matched> ifadesi tek bir değere çözümlenmelidir.
Bu değer giriş değeriyle karşılaştırılır.
Değer default , başka eşleşme olmadığında kullanılan eylem için ayrılmıştır.
deyimi switch ve $_ otomatik değişkenlerini kullanabilir$switch. Otomatik değişken, deyimine switch geçirilen ifadenin değerini içerir ve deyimleri kapsamında <result-to-be-matched> değerlendirme ve kullanım için kullanılabilir. Daha fazla bilgi için bkz . about_Automatic_Variables.
Deyimin tam switch söz dizimi aşağıdaki gibidir:
switch [-Regex | -Wildcard | -Exact] [-CaseSensitive] (<test-expression>) {
string | number | variable | { <value-scriptblock> }
{ <action-scriptblock> }
default { <action-scriptblock> } # optional
}
veya
switch [-Regex | -Wildcard | -Exact] [-CaseSensitive] -File filename {
string | number | variable | { <value-scriptblock> }
{ <action-scriptblock> }
default { <action-scriptblock> } # optional
}
Parametreleri kullanmıyorsanız, switchExact parametresini kullanmakla aynı şekilde davranır. Değer için büyük/küçük harfe duyarlı olmayan bir eşleşme gerçekleştirir. Değer bir koleksiyonsa, her öğe göründüğü sırayla değerlendirilir.
Deyimi en switch az bir koşul deyimi içermelidir.
default yan tümcesi, değer koşullardan herhangi biriyle eşleşmediğinde tetikler.
else deyimindeki bir if yan tümcesine eşdeğerdir. Her default deyimde yalnızca bir switch yan tümceye izin verilir.
switch aşağıdaki parametrelere sahiptir:
- Joker karakter - Koşulun bir joker karakter dizesi olduğunu gösterir. Match yan tümcesi bir dize değilse, parametresi yoksayılır. Karşılaştırma büyük/küçük harfe duyarlı değildir.
- Tam - Bir dizeyse eşleştirme yan tümcesinin tam olarak eşleşmesi gerektiğini gösterir. Match yan tümcesi bir dize değilse, bu parametre yoksayılır. Karşılaştırma büyük/küçük harfe duyarlı değildir.
- CaseSensitive - Büyük/küçük harfe duyarlı bir eşleşme gerçekleştirir. Match yan tümcesi bir dize değilse, bu parametre yoksayılır.
-
Dosya -
<test-expression>yerine bir dosyadan girdi alır. Dosya bir kerede bir satır okunur veswitchdeyimi tarafından değerlendirilir. Varsayılan olarak, karşılaştırma büyük/küçük harfe duyarlı değildir. Dosya parametresi yalnızca bir dosyayı destekler. Birden çok Dosya parametresi dahil edilirse, yalnızca sonuncusu kullanılır. Daha fazla bilgi için bkz. Dosya parametresi örnekleri. -
Regex - Değerin koşulla normal ifade eşleştirmesini gerçekleştirir. Match yan tümcesi bir dize değilse, bu parametre yoksayılır.
Karşılaştırma büyük/küçük harfe duyarlı değildir. Otomatik
$Matchesdeğişken, eşleşen deyim bloğu içinde kullanılabilir.
Not
Regex ve Joker Karakter gibi çakışan değerler belirtilirken, belirtilen son parametre önceliklidir ve çakışan tüm parametreler yoksayılır. Birden çok parametre örneğine de izin verilir. Ancak, yalnızca listelenen son parametre kullanılır.
Örnekler
Aşağıdaki örneklerde deyiminin kullanımı gösterilmektedir switch .
Basit eşleşme örnekleri
Aşağıdaki örnekte, switch deyimi 3 test değerini koşulların her biri ile karşılaştırır. Test değeri koşulla eşleştiğinde eylem gerçekleştirilir.
switch (3) {
1 { "It's one." }
2 { "It's two." }
3 { "It's three." }
4 { "It's four." }
}
It's three.
Bu örnekte, değer listedeki her koşulla karşılaştırılır. Aşağıdaki switch deyimi, tüm koşulların test edilmiş olduğunu gösteren 3 değeri için iki koşula sahiptir.
switch (3) {
1 { "It's one." }
2 { "It's two." }
3 { "It's three." }
4 { "It's four." }
3 { "Three again." }
}
It's three.
Three again.
Akışı denetlemek için ve break kullanın continue
Değer birden çok koşulla eşleşiyorsa, her koşul için eylem yürütülür. Bu davranışı değiştirmek için veya break anahtar sözcüklerini kullanıncontinue.
anahtar break sözcüğü işlemeyi durdurur ve deyiminden switch çıkar.
anahtar continue sözcüğü geçerli değeri işlemeyi durdurur, ancak sonraki değerleri işlemeye devam eder.
Aşağıdaki örnek bir sayı dizisini işler ve tek veya çift olup olmadığını görüntüler. Negatif sayılar anahtar sözcüğüyle continue atlanır. Sayı olmayan bir değerle karşılaşılırsa yürütme anahtar sözcüğüyle break sonlandırılır.
switch (1,4,-1,3,"Hello",2,1) {
{$_ -lt 0} { continue }
{$_ -isnot [int32]} { break }
{$_ % 2} { "$_ is Odd" }
{-not ($_ % 2)} { "$_ is Even" }
}
1 is Odd
4 is Even
3 is Odd
Dize dönüştürmenin etkisi
Hem giriş hem de karşılaştırma değeri olan tüm değerler karşılaştırma için dizelere dönüştürülür. İstenmeyen dize dönüştürmeyi önlemek için anahtar değerini değerlendirmek için betik bloklarını kullanın.
switch ( ([datetime]'1 Jan 1970').DayOfWeek ) {
4 { 'The integer value matches a Thursday.' }
"4" { 'The numeric string matches a Thursday.' }
"Thursday" { 'The string value matches a Thursday.' }
{ 4 -eq $_ } { 'The expression matches a Thursday.' }
}
Date nesnesinin DayOfWeek özelliği bir numaralandırmadır. Numaralandırmalar sayısal veya dize değerleriyle karşılaştırılabilir, switch ancak deyimi değeri numaralandırmanın dize gösterimine dönüştürür.
The string value matches a Thursday.
The expression matches a Thursday.
Bu davranış, bir -eq deyimdeki karşılaştırma davranışından if farklıdır.
if (4 -eq ([datetime]'1 Jan 1970').DayOfWeek) {
'The integer value matches a Thursday.'
}
The value matches a Thursday.
Bu örnekte, deyimine switch bir karma tablo geçirilir. , switch hashtable'ı bir dizeye dönüştürür.
$test = @{
Test = 'test'
Test2 = 'test2'
}
$test.ToString()
System.Collections.Hashtable
Karma tablo dize gösteriminin Test anahtarının değeriyle aynı olmadığını fark edin.
switch -Exact ($test) {
'System.Collections.Hashtable' { 'Hashtable string coercion' }
'test' { 'Hashtable value' }
}
Hashtable string coercion
Karma tablodaki değerleri test etmek için kullanın switch
Bu örnekte deyimi, switch karma tablodaki değerin türünü test etme işlemidir. Değerleri test etmeden önce karma tablodaki öğeleri listelememiz gerekir. Dize dönüştürmenin karmaşıklıklarını önlemek için, yürütülecek eylem betik bloğunu seçmek için boole değeri döndüren bir betik bloğu kullanın.
$var = @{A = 10; B = 'abc'}
foreach ($key in $var.Keys) {
switch ($var[$key].GetType()) {
{ $_ -eq [int32] } { "$key + 10 = $($var[$key] + 10)" }
{ $_ -eq [string] } { "$key = $($var[$key])" }
}
}
A + 10 = 20
B = abc
Joker karakter kullanma switch
Bu örnekte eşleşen bir büyük/küçük harf olmadığından çıkış yoktur.
switch ("fourteen") {
1 { "It's one."; break }
2 { "It's two."; break }
3 { "It's three."; break }
4 { "It's four."; break }
"fo*" { "That's too many." }
}
yan tümcesini default ekleyerek, başka bir koşul başarılı olmadığında bir eylem gerçekleştirebilirsiniz.
switch ("fourteen") {
1 { "It's one."; break }
2 { "It's two."; break }
3 { "It's three."; break }
4 { "It's four."; break }
"fo*" { "That's too many." }
default { "No matches" }
}
No matches
fourteen sözcüğünün bir servis talebiyle eşleşmesi için -Wildcard veya -Regex parametresini kullanmanız gerekir.
switch -Wildcard ("fourteen") {
1 { "It's one."; break }
2 { "It's two."; break }
3 { "It's three."; break }
4 { "It's four."; break }
"fo*" { "That's too many." }
}
That's too many.
ile normal ifadeleri kullanma switch
Aşağıdaki örnekte parametresi kullanılır -Regex .
$target = 'https://bing.com'
switch -Regex ($target) {
'^ftp\://.*$'
{
"$_ is an ftp address"
break
}
'^\w+@\w+\.com|edu|org$'
{
"$_ is an email address"
break
}
'^(http[s]?)\://.*$'
{
"$_ is a web address that uses $($Matches[1])"
break
}
}
https://bing.com is a web address that uses https
Aşağıdaki örnekte betik bloklarının deyim koşulları olarak switch kullanımı gösterilmektedir.
switch ("Test") {
{ $_ -is [string] } { "Found a string" }
"Test" { "This $_ executes as well" }
}
Found a string
This Test executes as well
Aşağıdaki örnek, iki tarih değeri içeren bir diziyi işler. her <value-scriptblock> tarihin Year özelliğini karşılaştırır. , <action-scriptblock> bir karşılama iletisi veya 2022 yılının başına kadar olan gün sayısını görüntüler.
switch ((Get-Date 1-Jan-2022), (Get-Date 25-Dec-2021)) {
{ $_.Year -eq 2021 }
{
$days = ((Get-Date 1/1/2022) - $_).Days
"There are $days days until 2022."
}
{ $_.Year -eq 2022 } { 'Welcome to 2022!' }
}
Dosyasının içeriğini şu şekilde okuma: switch
switch parametresiyle deyimini kullanmak, büyük dosyaları satır satır işlemenin verimli bir yoludur. PowerShell, dosyanın satırlarını switch deyimine akışla aktarır. Her satır ayrı ayrı işlenir.
eylem deyimindeki break anahtar sözcüğünü kullanarak dosyanın sonuna ulaşmadan önce işlemeyi sonlandırabilirsiniz.
switch deyimi, büyük dosyaları satır satır işlemek için Get-Content kullanmaktan daha verimlidir.
Esnek ve verimli satır satır desen eşleştirme için switch -File-Wildcard veya -Regex birleştirebilirsiniz.
Aşağıdaki örnek, PowerShell-Docs deposundaki README.md okur.
##ile başlayan satıra ulaşana kadar her satırın çıkışını alır.
switch -Regex -File .\README.md {
'^##\s' { break }
default { $_; continue }
}
<filename> bağımsız değişkeni joker karakter ifadelerini kabul eder, ancak yalnızca bir dosyayla eşleşmesi gerekir. Aşağıdaki örnek, <filename> bağımsız değişkeninde joker karakter kullanması dışında öncekiyle aynıdır. Joker karakter deseni yalnızca bir dosyayla eşleştiğinden bu örnek çalışır.
switch -Regex -File .\README.* {
'^##\s' { break }
default { $_; continue }
}
Sabit değer olarak değerlendirilmelerini istiyorsanız joker karakter olarak yorumlanacak kaçış karakterleri kullanmanız gerekir.
$file = (New-Item -Path 'Temp:\Foo[0]' -Value Foo -Force).FullName
switch -File $file { Foo { 'Foo' } }
# No files matching '...\Temp\Foo[0]' were found.
$fileEscaped = [WildcardPattern]::Escape($file)
switch -File $fileEscaped { foo { 'Foo' } }
# Foo
Ayrıca bakınız
PowerShell