about_Operators
Kısa açıklama
PowerShell tarafından desteklenen işleçleri açıklar.
Uzun açıklama
İşleç, bir komut veya ifadede kullanabileceğiniz bir dil öğesidir. PowerShell, değerleri işlemenize yardımcı olmak için çeşitli işleç türlerini destekler.
Aritmetik İşleçler
Bir komut veya ifadedeki değerleri hesaplamak için aritmetik işleçleri (+
, *
-
, , /
, %
) kullanın. Bu işleçlerle, değerleri ekleyebilir, çıkarabilir, çarpabilir veya bölebilir ve bölme işleminin kalan kısmını (modül) hesaplayabilirsiniz.
Toplama işleci öğeleri birleştirir. Çarpma işleci, her öğenin belirtilen sayıda kopyasını döndürür. Aritmetik işleçleri, bunları uygulayan herhangi bir .NET türünde kullanabilirsiniz; örneğin: Int
, String
, DateTime
, Hashtable
ve Dizileri.
Bit düzeyinde işleçler (-band
, -bor
, -bxor
, -bnot
, -shl
, -shr
), değerlerdeki bit desenlerini düzenler.
Daha fazla bilgi için bkz. about_Arithmetic_Operators.
Atama İşleçleri
Değişkenleri atamak, +=
*=
-=
/=
değiştirmek veya değişkenlere değer eklemek için atama işleçlerini (=
, , %=
) kullanın. Aritmetik işlemin sonucunu bir değişkene atamak için aritmetik işleçleri atamayla birleştirebilirsiniz.
Daha fazla bilgi için bkz. about_Assignment_Operators.
Karşılaştırma İşleçleri
Değerleri ve test koşullarını karşılaştırmak için karşılaştırma işleçlerini (-eq
, -ne
-lt
-gt
, , , -le
, -ge
) kullanın. Örneğin, iki dize değerini karşılaştırarak eşit olup olmadıklarını belirleyebilirsiniz.
Karşılaştırma işleçleri, metindeki desenleri bulayan veya değiştiren işleçleri de içerir. (-match
, -notmatch
, -replace
) işleçleri normal ifadeler, (-like
, -notlike
) ise joker karakterler *
kullanır.
Kapsama karşılaştırma işleçleri, bir test değerinin bir başvuru kümesinde (-in
, -notin
, , -notcontains
-contains
) görünüp görünmediğini belirler.
Tür karşılaştırma işleçleri (-is
, -isnot
) bir nesnenin belirli bir türe sahip olup olmadığını belirler.
Daha fazla bilgi için bkz. about_Comparison_Operators.
Mantıksal İşleçler
Koşullu deyimleri tek bir karmaşık koşullu değere bağlamak için mantıksal işleçleri (-and
, -xor
-or
, , -not
, !
) kullanın. Örneğin, mantıksal işleç -and
kullanarak iki farklı koşula sahip bir nesne filtresi oluşturabilirsiniz.
Daha fazla bilgi için bkz. about_Logical_Operators.
Yeniden Yönlendirme İşleçleri
Bir komut veya ifadenin çıkışını bir metin dosyasına göndermek için yeniden yönlendirme işleçlerini (>
, 2>
>>
, , 2>>
ve 2>&1
) kullanın. Yeniden yönlendirme işleçleri cmdlet'i gibi Out-File
çalışır (parametreler olmadan) ancak hata çıkışını belirtilen dosyalara yeniden yönlendirmenize de olanak sağlar. Çıkışı yeniden yönlendirmek için cmdlet'ini de kullanabilirsiniz Tee-Object
.
Daha fazla bilgi için bkz. about_Redirection
Bölme ve Birleştirme İşleçleri
-split
ve -join
işleçleri alt dizeleri böler ve birleştirir. -split
işleci bir dizeyi alt dizelere böler. -join
işleci birden çok dizeyi tek bir dizede birleştirir.
Daha fazla bilgi için bkz. about_Split ve about_Join.
Tür İşleçleri
Bir nesnenin .NET Framework türünü bulmak veya değiştirmek için tür işleçlerini (-is
, -isnot
, -as
) kullanın.
Daha fazla bilgi için bkz. about_Type_Operators.
Birli İşleçler
Değerleri artırmak veya azaltmak ve --
olumsuzlama için birli ++
ve -
işleçlerini kullanın. Örneğin, değişkenini $a
olarak 9
artırmak için 10
yazın $a++
.
Daha fazla bilgi için bkz. about_Arithmetic_Operators.
Özel İşleçler
Özel işleçler, başka bir işleç grubuna sığmayan belirli kullanım örneklerine sahiptir. Örneğin, özel işleçler komutları çalıştırmanıza, bir değerin veri türünü değiştirmenize veya diziden öğe almanıza olanak sağlar.
Gruplandırma işleci ( )
Diğer dillerde olduğu gibi, (...)
ifadelerde işleç önceliğini geçersiz kılmaya hizmet eder. Örnek: (1 + 2) / 3
Ancak PowerShell'de ek davranışlar vardır.
(...)
komutundan gelen çıkışın bir ifadeye katılmasına izin vermenizi sağlar.
Örnek:
PS> (Get-Item *.txt).Count -gt 10
True
Atama deyimlerini gruplandırma
Gruplandırılmamış atama deyimleri değer çıkışı vermez. Atama deyimi gruplandırılırken, atanan değişkenin değeri geçirilir ve daha büyük ifadelerde kullanılabilir. Örnek:
PS> ($var = 1 + 2)
3
PS> ($var = 1 + 2) -eq 3
True
deyimini parantez içinde sarmalama, değerini $var
veren bir ifadeye dönüştürür.
Bu davranış, gibi +=
bileşik işleçler, artım () ve azaltma (++
--
) işleçleri de dahil olmak üzere tüm atama işleçleri için geçerlidir.
Ancak, artırma ve azaltma için işlem sırası konumlarına bağlıdır.
PS> $i = 0
PS> (++$i) # prefix
1
PS> $i = 0
PS> ($i++) # postfix
0
PS> $i
1
Ön ek durumunda, değeri $i
çıkışa geçmeden önce artırılır. Sonek durumunda değeri çıktıdan $i
sonra artırılır.
Bu tekniği deyimi gibi if
bir koşullu deyim bağlamında da kullanabilirsiniz.
if ($textFiles = Get-ChildItem *.txt) {
$textFiles.Count
}
Bu örnekte, eşleşen dosya Get-ChildItem
yoksa komut hiçbir şey döndürmez ve boole bağlamında kabul edilen $false
öğesine hiçbir şey $textFiles
atamaz. bir veya daha fazla FileInfo nesnesi atanmışsa $textFiles
, koşullu olarak değerlendirilir $true
. deyiminin gövdesindeki if
değeriyle $textFiles
çalışabilirsiniz.
Not
Bu teknik kullanışlı ve kısa olsa da, atama işleci () ile eşitlik karşılaştırma işleci (=
-eq
) arasında karışıklığa neden olabilir.
Gruplandırılmış ifadeleri borulama
İşlem hattının ilk kesimi olarak kullanıldığında, bir komutun veya ifadenin parantez içinde kaydırıldığında, ifade sonucunun sabitlenmesine her zaman neden olur. Ayraçlar bir komutu sarmalarsa, sonuçlar işlem hattı üzerinden gönderilmeden önce bellekte toplanan tüm çıktılarla tamamlamaya çalıştırılır.
Alt ifade işleci $( )
Bir veya daha fazla deyimin sonucunu döndürür. Tek bir sonuç için bir skaler döndürür. Birden çok sonuç için bir dizi döndürür. Başka bir ifade içinde bir ifade kullanmak istediğinizde bunu kullanın. Örneğin, komutun sonuçlarını bir dize ifadesine eklemek için.
PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20
PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows
Dizi alt ifade işleci @( )
Bir veya daha fazla deyimin sonucunu dizi olarak döndürür. Sonuç her zaman 0 veya daha fazla nesneden oluşan bir dizidir.
PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting )
PS> $list.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS> $list.Count
0
Karma tablo değişmez değeri söz dizimi @{}
Dizi alt ifadesine benzer şekilde, bu söz dizimi karma tablo bildirmek için kullanılır. Daha fazla bilgi için bkz. about_Hash_Tables.
Çağrı işleci &
Bir komut, betik veya betik bloğu çalıştırır. "Çağırma işleci" olarak da bilinen çağrı işleci, değişkenlerde depolanan ve dizeler veya betik bloklarıyla temsil edilen komutları çalıştırmanıza olanak tanır. Çağrı işleci bir alt kapsamda yürütülür. Kapsamlar hakkında daha fazla bilgi için bkz. about_Scopes.
Bu örnek bir dizede bir komutu depolar ve çağrı işlecini kullanarak yürütür.
PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned
Çağrı işleci dizeleri ayrıştırmaz. Başka bir deyişle, çağrı işlecini kullanırken dize içinde komut parametrelerini kullanamazsınız.
PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.
Invoke-Expression cmdlet'i, çağrı işlecini kullanırken ayrıştırma hatalarına neden olan kodu yürütebilir.
PS> & "1+1"
&: The term '1+1' is not recognized as a name of a cmdlet, function, script
file, or executable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
PS> Invoke-Expression "1+1"
2
Bir betiği dosya adını kullanarak yürütebilirsiniz. Bir betik dosyasının yürütülebilir olması için bir .ps1
dosya uzantısı olmalıdır. Yollarında boşluklar bulunan dosyalar tırnak içine alınmalıdır. Tırnak içine alınmış yolu yürütmeye çalışırsanız PowerShell, betiği çalıştırmak yerine tırnak içine alınmış dizenin içeriğini görüntüler. Çağrı işleci, dosya adını içeren dizenin içeriğini yürütmenize olanak tanır.
PS C:\Scripts> Get-ChildItem
Directory: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 8/28/2018 1:36 PM 58 script name with spaces.ps1
PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!
Betik blokları hakkında daha fazla bilgi için bkz. about_Script_Blocks.
Arka plan işleci &
İşlem hattını arka planda, bir PowerShell işinde çalıştırır. Bu işleç, unix denetim işleci ve işaretine ()&
benzer şekilde davranır ve bu da komutu altshell'de zaman uyumsuz olarak bir iş olarak çalıştırmadan önce çalıştırır.
Bu işleç işlevsel olarak ile Start-Job
eşdeğerdir. Varsayılan olarak, arka plan işleci paralel görevleri başlatan çağıranın geçerli çalışma dizinindeki işleri başlatır. Aşağıdaki örnekte arka plan işi işlecinin temel kullanımı gösterilmektedir.
Get-Process -Name pwsh &
Bu komut işlevsel olarak aşağıdaki kullanımına eşdeğerdir Start-Job
:
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Aynı gibiStart-Job
&
, arka plan işleci de bir Job
nesnesi döndürür. Bu nesne, işi başlatmak için kullandığınız Start-Job
gibi ve Remove-Job
ile Receive-Job
kullanılabilir.
$job = Get-Process -Name pwsh &
Receive-Job $job -Wait
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 221.16 25.90 6988 988 pwsh
0 0.00 140.12 29.87 14845 845 pwsh
0 0.00 85.51 0.91 19639 988 pwsh
Remove-Job $job
&
Arka plan işleci aynı UNIX denetim işleci ve işareti (&
gibi bir deyim sonlandırıcısıdır. Bu, arka plan işlecinden &
sonra ek komutları çağırmanıza olanak tanır. Aşağıdaki örnekte, arka plan işlecinden sonra ek komutların çağrılması &
gösterilmektedir.
$job = Get-Process -Name pwsh & Receive-Job $job -Wait
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 221.16 25.90 6988 988 pwsh
0 0.00 140.12 29.87 14845 845 pwsh
0 0.00 85.51 0.91 19639 988 pwsh
Bu, aşağıdaki betikle eşdeğerdir:
$job = Start-Job -ScriptBlock {Get-Process -Name pwsh}
Receive-Job $job -Wait
Her biri kendi arka plan işlemlerinde ancak tümü tek satırda olmak üzere birden çok komut çalıştırmak istiyorsanız, komutların her biri arasında ve sonrasına yerleştirmeniz &
yeterlidir.
Get-Process -Name pwsh & Get-Service -Name BITS & Get-CimInstance -ClassName Win32_ComputerSystem &
PowerShell işleri hakkında daha fazla bilgi için bkz. about_Jobs.
Atama işleci [ ]
Nesneleri belirtilen türe dönüştürür veya sınırlar. Nesneler dönüştürülemiyorsa PowerShell bir hata oluşturur.
[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'
Atama, bir değişken atama gösterimi kullanılarak atandığında da gerçekleştirilebilir.
Virgül işleci ,
İkili işleç olarak, virgül bir dizi oluşturur veya oluşturulan dizinin sonuna ekler. İfade modunda, birli işleç olarak virgül yalnızca bir üyeye sahip bir dizi oluşturur. Virgüli üyenin önüne yerleştirin.
$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)
Bağımsız Write-Output
değişken beklediğinden, ifadeyi parantez içine koymanız gerekir.
Nokta kaynağını belirleme işleci .
Geçerli kapsamda bir betik çalıştırarak betiğin oluşturduğu tüm işlevlerin, diğer adların ve değişkenlerin geçerli kapsama eklenmesini ve mevcut işlevleri geçersiz kılmasını sağlar. Betik tarafından bildirilen parametreler değişken olur. Değer verilmeyen parametreler, değer içermeyen değişkenler haline gelir. Ancak, otomatik değişken $args
korunur.
. c:\scripts\sample.ps1 1 2 -Also:3
Not
Nokta kaynağını belirleme işlecini bir boşluk izler. Boşluğu, geçerli dizini temsil eden nokta (.
) simgesinden ayırmak için kullanın.
Aşağıdaki örnekte, geçerli dizindeki Sample.ps1 betiği geçerli kapsamda çalıştırılır.
. .\sample.ps1
Biçim işleci -f
Dize nesnelerinin biçim yöntemini kullanarak dizeleri biçimlendirin. İşlecin sol tarafındaki biçim dizesini ve işlecin sağ tarafında biçimlendirilecek nesneleri girin.
"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello 3.14
"0" özel tanımlayıcısı ile sayısal bir değeri sıfırdan ayarlayabilirsiniz. öğesini izleyen :
sıfır sayısı, biçimlendirilmiş dizenin doldurulacak en büyük genişliği belirtir.
"{0:00} {1:000} {2:000000}" -f 7, 24, 365
07 024 000365
Küme ayraçlarını ({}
) biçimlendirilmiş dizede tutmanız gerekiyorsa, küme ayraçlarını iki katına çıkararak küme ayraçlarından kaçabilirsiniz.
"{0} vs. {{0}}" -f 'foo'
foo vs. {0}
Daha fazla bilgi için bkz. String.Format yöntemi ve Bileşik Biçimlendirme.
Dizin işleci [ ]
Dizine alınan koleksiyonlardan diziler ve karma tablolar gibi nesneleri seçer. Dizi dizinleri sıfır tabanlıdır, bu nedenle ilk nesne olarak [0]
dizinlenir. Son değerleri almak için negatif dizinler de kullanabilirsiniz. Karma tablolar anahtar değerine göre dizine eklenir.
Dizin işleci, dizin listesi verüldüğünde bu dizinlere karşılık gelen üyelerin listesini döndürür.
PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...
Bir nesne dizine alınan bir koleksiyon değilse, ilk öğeye erişmek için dizin işlecini kullanmak nesnenin kendisini döndürür. İlk öğesinin dışındaki dizin değerleri döndürür $null
.
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
İşlem hattı işleci |
Kendisinden önceki komutun çıkışını ("kanallar") izleyen komuta gönderir. Çıkış birden fazla nesne ("koleksiyon") içerdiğinde işlem hattı işleci nesneleri birer birer gönderir.
Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}
İşlem hattı zinciri işleçleri &&
ve ||
Sol taraftaki işlem hattının başarısına bağlı olarak sağ taraftaki işlem hattını koşullu olarak yürütebilirsiniz.
# If Get-Process successfully finds a process called notepad,
# Stop-Process -Name notepad is called
Get-Process notepad && Stop-Process -Name notepad
# If npm install fails, the node_modules directory is removed
npm install || Remove-Item -Recurse ./node_modules
Daha fazla bilgi için bkz. About_Pipeline_Chain_Operators.
Aralık işleci ..
Aralık işleci, sıralı tamsayılar veya karakterler dizisini temsil etmek için kullanılabilir. Aralık işleci tarafından birleştirilen değerler, aralığın başlangıç ve bitiş değerlerini tanımlar.
Not
PowerShell 6'da karakter aralıkları desteği eklendi.
1..10
$max = 10
foreach ($a in 1..$max) {Write-Host $a}
Aralıkları ters sırada da oluşturabilirsiniz.
10..1
5..-5 | ForEach-Object {Write-Output $_}
Karakter aralığı oluşturmak için karakterleri tırnak içine alın.
PS> 'a'..'f'
a
b
c
d
e
f
PS> 'F'..'A'
F
E
D
C
B
A
Bir dizeye karakter aralığı atarsanız, dizeye bir karakter dizisi atarken de aynı şekilde değerlendirilir.
PS> [string]$s = 'a'..'e'
$s
a b c d e
$a = 'a', 'b', 'c', 'd', 'e'
$a
a b c d e
Dizideki karakterler bir dizeye katılır. Karakterler tercih değişkeninin değeriyle $OFS
ayrılır. Daha fazla bilgi için bkz. about_Preference_Variables.
Dizideki karakterlerin sırası, karakterin ASCII değeri tarafından belirlenir. Örneğin, ve X
ASCII değerleri c
sırasıyla 99 ve 88'tir. Bu aralık ters sırada gösterilir.
PS> 'c'..'X'
c
b
a
`
_
^
]
\
[
Z
Y
X
Aralığın başlangıç ve bitiş değerleri, bir tamsayı veya karakter olarak değerlendirilen herhangi bir ifade çifti olabilir. Örneğin, başlangıç ve bitiş değerleriniz için bir numaralandırmanın üyelerini kullanabilirsiniz.
PS> enum Food {
Apple
Banana = 3
Kiwi = 10
}
PS> [Food]::Apple..[Food]::Kiwi
0
1
2
3
4
5
6
7
8
9
10
Önemli
Sonuçta elde edilen aralık, numaralandırmanın değerleriyle sınırlı değildir. Bunun yerine, sağlanan iki değer arasındaki değer aralığını temsil eder. Bir numaralandırmanın üyelerini güvenilir bir şekilde temsil etmek için aralık işlecini kullanamazsınız.
Üye erişim işleci .
Bir nesnenin özelliklerine ve yöntemlerine erişir. Üye adı bir ifade olabilir.
$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }
PowerShell 3.0'ı başlatırken, üyesi olmayan bir liste koleksiyonu nesnesinde işlecini kullandığınızda, PowerShell bu koleksiyondaki öğeleri otomatik olarak numaralandırır ve her birinde işlecini kullanır. Daha fazla bilgi için bkz. about_Member-Access_Enumeration.
Statik üye işleci ::
bir .NET Framework sınıfının statik özelliklerini ve yöntemlerini çağırır. Bir nesnenin statik özelliklerini ve yöntemlerini bulmak için cmdlet'in Get-Member
Static parametresini kullanın. Üye adı bir ifade olabilir.
[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }
Üçüncül işleç ? <if-true> : <if-false>
Basit koşullu durumlarda deyiminin yerine if-else
üçüncül işlecini kullanabilirsiniz.
Daha fazla bilgi için bkz. about_If.
Null birleşim işleci ??
Null birleşim işleci ??
, null değilse sol işleneninin değerini döndürür. Aksi takdirde, sağ işleneni değerlendirir ve sonucunu döndürür. ??
Sol işlenen null olmayan olarak değerlendirilirse işleç sağ işlenenini değerlendirmez.
$x = $null
$x ?? 100
100
Aşağıdaki örnekte sağ işlenen değerlendirilmez.
[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020
Null birleşim atama işleci ??=
Null birleşim atama işleci ??=
, sağ işleneninin değerini yalnızca sol işlenen null olarak değerlendirilirse sol işlenenine atar. ??=
Sol işlenen null olmayan olarak değerlendirilirse işleç sağ işlenenini değerlendirmez.
$x = $null
$x ??= 100
$x
100
Aşağıdaki örnekte sağ işlenen değerlendirilmez.
[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
$todaysDate
1/10/2020
Null koşullu işleçler ?.
ve ?[]
Not
Bu özellik PowerShell 7.1'de deneyselden genele taşınmıştır.
Null koşullu işleç, bir üye erişimi, ?.
veya öğe erişimi, ?[]
, işlemini yalnızca işlenen null olmayan olarak değerlendirilirse, işlenene uygular; aksi takdirde null döndürür.
PowerShell ?
değişken adının bir parçası olabileceğinden, bu işleçleri kullanmak için değişken adının resmi belirtimi gereklidir. veya değişken adının ${a?}
bir parçası olduğunda ?
gibi ${a}
değişken adlarının çevresinde küme ayraçları ({}
) kullanmanız gerekir.
Not
değişken adı söz dizimi ${<name>}
, alt ifade işleciyle $()
karıştırılmamalıdır. Daha fazla bilgi için about_Variables Değişken adı bölümüne bakın.
Aşağıdaki örnekte PropName değeri döndürülür.
$a = @{ PropName = 100 }
${a}?.PropName
100
Aşağıdaki örnek , PropName üye adına erişmeye çalışmadan null döndürür.
$a = $null
${a}?.PropName
Bu örnekte, dizine alınan öğenin değeri döndürülür.
$a = 1..10
${a}?[0]
1
Aşağıdaki örnek, dizine alınan öğeye erişmeye çalışmadan null döndürür.
$a = $null
${a}?[0]