2025-08-30

Çok satırlı powershell komutları

Powershell'de işimizi tek satırda bitiremediğimiz durumlar olduğunda alt satırda kaldığımız yerden devam edebilmek için bir backtick ya da backquote olarak bilinen " ` " karakteri kullanılır. Ama dikkat, bu tek tırnak " ' " (veya apostrof olarak bilinen) karakterinden farklı bir karakterdir. Yalnız bu karakterden sonra hemen enter (carriage return / line feed) gelmelidir.

Örnek şu olabilir:

Get-WinEvent -ComputerName UZAKPC -Filterhashtable ` @{LogName="System";StartTime=(Get-Date).AddDays(-7)}

Ama şu adreste bahsedildiği gibi, bu karakterin bazı olumsuz yanları var. Aslında bu karakteri kullanmadan da alt satıra geçerek devam edilebiliyor. Alternatif yöntemler (aynı siteden alıntı):

1. Aritmetik işleçler

Dört işleme ilave olarak bit olarak sağa/sola kaydırma işleçleri sonrasında alt satıra geçilebilir. Örnek:

$GunlukToplamOlaySayisi =
$HaftalikToplamOlaySayisi /
$BirHaftadakiGunSayisi

2. Atama operatörleri

En çok bilinen atama operatörü olarak eşittirden başka artırarak eşittir, çarparak eşittir gibi dört işlemein de oldğu eşittirler var. Ve birkaç tane daha:

=    +=    -+    *=    /=    %=    ++    -- 
$ToplamVarilanNokta+=
$HerSeferdeArtisMiktari

Yukarıdaki örnekte de eşittirden sonra alt satıra geçmiştim.

3. Karşılaştırma işleçleri

Karşılaştırma için kullanılan aşağıdaki işleçler

-eq   -ne   -gt   -lt   -le   -ge   -match   -like   -in   -contains   -replace

Örnek olarak

$event[0].properties[0].Value -eq
$event[1].properties[0].Value
 

4. Mantıksal işleçler

Mantıksal VE, VEYA ve diğer işleçler:

-and   -or    -xor    -not   ! 
$LogonType -eq 2 -and
$EventId -eq 4624

5. Ayırma ve birleştirme işleçleri

-split   -join
"pazartesi, sali, carsamba, persembe, cuma, cumartesi, pazar" -split
", " 

veya bazıları -split operatörünü (sadece ayırma karakteri belirtmeyecekse, ki bu da sadece boşlukla ayrılmış veriler için işe yarar) başta kullanır:

-split
"pazartesi sali carsamba persembe cuma cumartesi pazar"

6. Tip işleçleri

Tip karşılaştırması için kullanılan aşağıdaki işleçler

-is   -isnot   -as
$HaftaninGunleri -is
[System.Array]

7. Alt ifade işleçleri (subexpression operators) 

Paranteze alınmış bir ifadeyi çalıştırmak için kullanılan $( ... ) ifadesi.

$(
[Math]::PI
)

8. Dizi oluşturma işleci

Bir dizi oluşturmak için @(...) kullanılıyor. Bu ve içindeki öğelerin her biri ayrı satırlara gelebilir, aşağıdaki gibi.

$3BuyukSehir = @(
'Istanbul',
'Ankara',
'Izmir'
)
 

9. Hash table işleci

Dizi işlecine benzer şekilde hash table işleci @{ ... } ile de alt satıra geçilebilir.

Get-WinEvent -FilterHashtable @{
LogName='System';
ID=6006};
StartTime=(Get-Date).AddDays(-7)
}

10. Virgül

Dizi öğelerini ayırmak için ya da parametreleri ayırmak için kullanılan virgüller sonrasında da yeni satıra geçilebilir. 8'dekine benzer şekilde:

$HaftaninGunleri="Pazartesi",
"Sali",
"Carsamba",
"Persembe",
"Cuma",
"Cumartesi",
"Pazar"

11. Biçimlendirme işleci

Karakter dizilerini biçimlendirmek için kullanılan -f işleci, söz konusu olan.

"{0:f2}" -f
>> [Math]::PI

12. Köşeli parantezler

Genel olarak indekslemek için kullanıldığı durumlarda.

$HaftaninGunleri[
$BirSekildeBugununHaftaninKacinciGunuOldugunuTutanDegisken
]

13. Betik bloğu işleci

İşletilmek üzere bir küme parantezleri içinde oluşturulan bir betik bloğu için küme parantezleri öncesinde ve sonrasında. Örnek:

Invoke-Command -ComputerName UZAKPC -ScriptBlock {
hostname
}

14. Özellik ayırma işleci

Bir nesnenin içindeki özelliğe başvuru yapmamızı sağlayan nokta, burada kastedilen. Noktadan sonra da yeni satıra geçilebilir. Örnek.

$event[0].
Properties[0].
Value

 15. Static Member Operator

Sadece örnek:

$Rule = [Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.AvoidUsingConvertToSecureStringWithPlainText]::
    New()
veya daha bilindik bir örnek
[Math]::
PI

15. Menzil işleci

Art arda gelen iki nokta " .. ", başlangıç ve sonu verilen aralıkta düzenli aran veya azalan dizi oluşturmak için kullanılır. 

1..
125 | foreach { $_ }

16. Boru işleci

Bir komudun çıktısını başka bir komuda giriş olarak veren " | " işleci.

Get-ADUser -Filter * |
Where-Object { $_.Name -like "Ahm*" }

17. Splatting

Splatting aslında alt satıra geçme işleci değil ama çok satırlı yapıdan kurtulmak için kullanılabilir.

$smtpParams = @{
From = "gonderen@firma.com"
To = "alici@firma.com"
Subject = "deneme mesajı"
}

Send-MailMessage $smtpParam

Tüm bunlardan bağımsız, birden çok satırda olması gereken karakter dizesi değişkenler için @" ... "@ notasyonu var. Yalnız başlangıç işaretçisi olan @" ikilisinden sonra ve bitiş işaretçisi olan "@ ikilisinden önce bir karakter olmamalı.

$Alınti=@"
Halk içinde muteber bir nesne yok devlet gibi
Olmaya devlet cihânda bir nefes sıhhat gibi
"@

Hiç yorum yok: