about_If
Kısa açıklama
Bir veya daha fazla koşullu testin sonuçlarına göre deyim listelerini çalıştırmak için kullanabileceğiniz bir dil komutunu açıklar.
Uzun açıklama
Belirtilen bir koşullu test true olarak değerlendirilirse kod bloklarını çalıştırmak için deyimini kullanabilirsiniz if
. Ayrıca, önceki tüm testler false olarak değerlendirilirse çalıştırılacak bir veya daha fazla ek koşullu test de belirtebilirsiniz. Son olarak, başka bir koşullu test true olarak değerlendirilmezse çalıştırılacak ek bir kod bloğu belirtebilirsiniz.
Sözdizimi
Aşağıdaki örnekte deyim söz dizimi gösterilmektedir if
:
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
Bir if
deyimi çalıştırdığınızda PowerShell koşullu ifadeyi <test1>
true veya false olarak değerlendirir. <test1>
True ise, <statement list 1>
çalıştırır ve PowerShell deyiminden if
çıkar. False ise <test1>
, PowerShell koşullu deyim tarafından <test2>
belirtilen koşulu değerlendirir.
Boole değerlendirmesi hakkında daha fazla bilgi için bkz . about_Booleans.
<test2>
True ise, <statement list 2>
çalıştırır ve PowerShell deyiminden if
çıkar. Hem hem de <test1>
<test2>
false olarak değerlendirilirse kod <statement list 3
> bloğu çalıştırılır ve PowerShell deyiminden if
çıkar.
Bir dizi koşullu testi zincirleme için birden çok elseif
deyim kullanabilirsiniz. Her test yalnızca önceki tüm testlerin yanlış olması durumunda çalıştırılır. Çok sayıda elseif
deyim içeren bir if
deyim oluşturmanız gerekiyorsa, bunun yerine bir Switch deyimi kullanmayı göz önünde bulundurun.
Örnekler:
En if
basit deyim tek bir komut içerir ve herhangi bir elseif
deyim veya deyim else
içermez. Aşağıdaki örnekte deyiminin en basit biçimi gösterilmektedir if
:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
Bu örnekte değişken değerinden $a
2
büyükse koşul true olarak değerlendirilir ve deyim listesi çalıştırılır. Ancak, küçük veya buna eşitse $a
2
veya var olan bir değişken değilse, if
deyimi bir ileti görüntülemez.
Else deyimi eklendiğinde, $a 2'den küçük veya buna eşit olduğunda bir ileti görüntülenir. Sonraki örnekte gösterildiği gibi:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
else {
Write-Host ("The value $a is less than or equal to 2," +
" is not created or is not initialized.")
}
Bu örneği daha da daraltmak için deyimini elseif
kullanarak değeri $a
değerine eşit 2
olduğunda bir ileti görüntüleyebilirsiniz. Sonraki örnekte gösterildiği gibi:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
elseif ($a -eq 2) {
Write-Host "The value $a is equal to 2."
}
else {
Write-Host ("The value $a is less than 2 or" +
" was not created or initialized.")
}
Üçüncül işleç söz dizimini kullanma
PowerShell 7.0, üçüncül işlecini kullanarak yeni bir söz dizimi kullanıma sunulmuştur. C# üçüncül işleç söz dizimini izler:
<condition> ? <if-true> : <if-false>
Üçüncül işleç, basitleştirilmiş if-else
deyim gibi davranır. İfade <condition>
değerlendirilir ve sonuç, hangi dalın daha sonra değerlendirileceğini belirlemek için boole değerine dönüştürülür:
- İfade
<if-true>
doğruysa<condition>
, ifade yürütülür - İfade
<if-false>
false ise<condition>
, ifade yürütülür
Örneğin:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
Bu örnekte değeri $message
döndürdüğünde Test-Path
$true
değeridirPath exists
. döndürdüğünde Test-Path
$false
değeri $message
şeklindedir Path not found
.
$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)
Bu örnekte, hizmet çalışıyorsa durdurulur ve durumu Çalışıyor değilse başlatılır.
Bir <condition>
, <if-true>
veya <if-false>
ifadesi bir komutu çağırırsa, bunu parantez içinde sarmalamanız gerekir. Bunu yapmazsanız, PowerShell ifadedeki <condition>
komut için bir bağımsız değişken özel durumu oluşturur ve ve <if-false>
ifadeleri için <if-true>
özel durumları ayrıştırıyor.
Örneğin, PowerShell bu üçlü dosyalar için özel durumlar oluşturur:
Test-Path .vscode ? Write-Host 'exists' : Write-Host 'not found'
(Test-Path .vscode) ? Write-Host 'exists' : Write-Host 'not found'
(Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
Test-Path: A positional parameter cannot be found that accepts argument '?'.
ParserError:
Line |
1 | (Test-Path .vscode) ? Write-Host 'exists' : Write-Host 'not found'
| ~
| You must provide a value expression following the '?' operator.
ParserError:
Line |
1 | (Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
| ~
| You must provide a value expression following the ':' operator.
Ve bu örnek şu ayrıştırmalar:
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists
Ayrıca bkz.
PowerShell