Aracılığıyla paylaş


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 $a2büyükse koşul true olarak değerlendirilir ve deyim listesi çalıştırılır. Ancak, küçük veya buna eşitse $a2 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 2olduğ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$truedeğeridirPath exists. döndürdüğünde Test-Path$falsedeğ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.