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
Öğe koleksiyonlarını depolamak için tasarlanmış veri yapıları olan dizileri açıklar.
Uzun açıklama
Dizi, bir öğe koleksiyonunu depolamak için tasarlanmış bir veri yapısıdır. Öğeler aynı türde veya farklı türlerde olabilir.
Windows PowerShell 3.0'da sıfır veya bir nesneden oluşan bir koleksiyon, dizilerin bazı özelliklerine sahiptir.
Dizi oluşturma ve başlatma
Dizi oluşturmak ve başlatmak için bir değişkene birden çok değer atayın. Dizide depolanan değerler virgülle sınırlandırılır ve değişken adından atama işleci (=) ile ayrılır.
Örneğin, 22, 5, 10, 8, 12, 9 ve 80'in yedi sayısal (tamsayı) değerini içeren $A adlı bir dizi oluşturmak için şunu yazın:
$A = 22,5,10,8,12,9,80
Virgül, virgül tek öğeden önce yerleştirilerek tek bir öğe dizisini başlatmak için de kullanılabilir.
Örneğin, 7'nin tek değerini içeren $B adlı tek bir öğe dizisi oluşturmak için şunu yazın:
$B = ,7
Ayrıca, aralık işlecini (..) kullanarak bir dizi oluşturabilir ve başlatabilirsiniz.
Aşağıdaki örnek, 5 ile 8 arasında değerleri içeren bir dizi oluşturur.
$C = 5..8
Sonuç olarak, $C dört değer içerir: 5, 6, 7 ve 8.
Hiçbir veri türü belirtilmediğinde, PowerShell her diziyi bir nesne dizisi (System.Object[]) olarak oluşturur. Bir dizinin veri türünü belirlemek için GetType() yöntemini kullanın. Mesela:
$A.GetType()
Kesin olarak belirlenmiş bir dizi oluşturmak için, yani yalnızca belirli bir türdeki değerleri içerebilen bir dizi oluşturmak için, değişkenini dize[], long[]veya int32[] gibi bir dizi türü olarak. Diziyi değiştirmek için, değişken adının önüne köşeli ayraç içine alınmış bir dizi türü ekleyin. Mesela:
[Int32[]]$ia = 1500, 2230, 3350, 4000
Sonuç olarak, $ia dizisi yalnızca tamsayılar içerebilir.
.NET'te desteklenen herhangi bir türe yazılan diziler oluşturabilirsiniz. Örneğin, Get-Process işlemleri göstermek üzere alan nesneler System.Diagnostics.Process türündedir. Kesin olarak belirlenmiş bir işlem nesneleri dizisi oluşturmak için aşağıdaki komutu girin:
[Diagnostics.Process[]]$zz = Get-Process
Dizi alt ifade işleci
Dizi alt ifadesi işleci içindeki deyimlerden bir dizi oluşturur. işlecinin içindeki deyimi ne üretirse üretsin, işleç bunu bir diziye yerleştirir. Sıfır veya bir nesne olsa bile.
Dizi işlecinin söz dizimi aşağıdaki gibidir:
@( ... )
Sıfır veya bir nesneden oluşan bir dizi oluşturmak için dizi işlecini kullanabilirsiniz. Mesela:
$a = @("Hello World")
$a.Count
1
$b = @()
$b.Count
0
Dizi işleci, nesneleri alırken betiklerde kullanışlıdır, ancak kaç bekleyebileceğinizi bilmez. Mesela:
$p = @(Get-Process Notepad)
Dizi alt ifadesi işleci hakkında daha fazla bilgi için bkz. about_Operators.
Dizi öğelerine erişme ve bunları kullanma
Dizi okuma
Değişken adını kullanarak bir diziye başvurabilirsiniz. Dizideki tüm öğeleri görüntülemek için dizi adını çağırın. Örneğin, $a 0 ile 9 arasında bir sayı dizisidir:
$a
0
1
2
3
4
5
6
7
8
9
Dizin kullanarak dizideki öğelere başvurabilirsiniz. Dizin numarasını köşeli ayraç içine alın. Dizin değerleri 0başlar. Örneğin, $a dizisindeki ilk öğeyi görüntülemek için şunu yazın:
$a[0]
0
$a dizisindeki üçüncü öğeyi görüntülemek için şunu yazın:
$a[2]
2
Dizinin bir bölümünü dizin için bir aralık işleci kullanarak alabilirsiniz. Örneğin, dizinin ikinci ile beşinci öğelerini almak için şunu yazabilirsiniz:
$a[1..4]
1
2
3
4
Negatif sayılar dizinin sonundan sayılır. Örneğin, -1 dizinin son öğesine başvurur. Dizinin son üç öğesini görüntülemek için dizin artan düzende şunu yazın:
$a = 0 .. 9
$a[-3..-1]
7
8
9
Negatif dizinleri azalan sırada yazarsanız, çıkışınız değişir.
$a = 0 .. 9
$a[-1..-3]
9
8
7
Ancak, bu gösterimi kullanırken dikkatli olun. Gösterimi, bitiş sınırından dizinin başına doğru döngüler.
$a = 0 .. 9
$a[2..-2]
2
1
0
9
8
Ayrıca, en yaygın hatalardan biri, $a[0..-2] dizideki son öğe dışında tüm öğelerine başvurduğu varsaymaktır. Dizideki ilk, son ve ikinci-son öğelerine başvurur.
Bir dizideki öğelerin listesiyle aralıkları birleştirmek için artı işlecini (+) kullanabilirsiniz. Örneğin, 0, 2 ve 4 ile 6 arasında dizin konumlarında öğeleri görüntülemek için şunu yazın:
$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6
Ayrıca, birden çok aralığı ve tek tek öğeleri listelemek için artı işlecini kullanabilirsiniz. Örneğin, sıfırdan ikiye, dört ila altı öğelerini ve sekizinci konum türünde öğeyi listelemek için:
$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8
Dizi öğeleri üzerinde yinelemeler
Dizideki öğelere başvurmak için foreach, forve while döngüleri gibi döngü yapılarını da kullanabilirsiniz. Örneğin, foreach dizisindeki öğeleri görüntülemek üzere bir $a döngüsü kullanmak için şunu yazın:
$a = 0..9
foreach ($element in $a) {
$element
}
0
1
2
3
4
5
6
7
8
9
foreach döngüsü dizide yinelenir ve dizinin sonuna ulaşana kadar dizideki her değeri döndürür.
for döngüsü, dizideki öğeleri incelerken sayaçları artırırken kullanışlıdır. Örneğin, dizideki diğer tüm değerleri döndürmek için bir for döngüsü kullanmak için şunu yazın:
$a = 0..9
for ($i = 0; $i -le ($a.Length - 1); $i += 2) {
$a[$i]
}
0
2
4
6
8
Tanımlanmış bir koşul artık doğru olana kadar dizideki öğeleri görüntülemek için bir while döngüsü kullanabilirsiniz. Örneğin, dizi dizini 4'ten küçükken $a dizisindeki öğeleri görüntülemek için şunu yazın:
$a = 0..9
$i=0
while($i -lt 4) {
$a[$i]
$i++
}
0
1
2
3
Dizilerin özellikleri
Count, Length veya LongLength
PowerShell'de diziler, dizideki öğelerin sayısını gösteren üç özelliğe sahiptir.
Count - Bu özellik, yalnızca bir dizi değil, herhangi bir koleksiyondaki öğe sayısını belirlemek için en yaygın kullanılan özelliktir. Bu bir
[int32]türü değeridir. Windows PowerShell 5.1'de (ve daha eski) Countiçin diğer ad özelliği Length.Length - Bu özellik
[int32]tür değeridir. Bu, Countile aynı değeri içerir.Not
diziler için Count ve Length eşdeğer olsa da, Length diğer türler için farklı bir anlamı olabilir. Örneğin, bir dize için Length dizedeki karakter sayısıdır. Ancak Count özelliği her zaman
1.LongLength - Bu özellik
[int64]tür değeridir. 2.147.483.647'den fazla öğe içeren diziler için bu özelliği kullanın.
$a = 0..9
$a.Count
$a.Length
10
10
Rank
Dizideki boyut sayısını döndürür. PowerShell'deki dizilerin çoğu yalnızca bir boyuta sahiptir. Aşağıdaki örnekte olduğu gibi çok boyutlu bir dizi oluşturduğunuzu düşündüğünüzde bile:
$a = @(
@(0,1),
@("b", "c"),
@(Get-Process)
)
"`$a rank: $($a.Rank)"
"`$a length: $($a.Length)"
"`$a[2] length: $($a[2].Length)"
"Process `$a[2][1]: $($a[2][1].ProcessName)"
Bu örnekte, diğer dizileri içeren tek boyutlu bir dizi oluşturuyorsunuz. Bu, pürüzlü dizi olarak da bilinir.
Rank özelliği bunun tek boyutlu olduğunu kanıtladı. Pürüzlü bir dizideki öğelere erişmek için dizinlerin ayrı köşeli ayraçlarda ([]) olması gerekir.
$a rank: 1
$a length: 3
$a[2] length: 348
Process $a[2][1]: AcroRd32
Çok boyutlu diziler satır-ana sırada depolanır. Aşağıdaki örnekte, gerçekten çok boyutlu bir dizinin nasıl oluşturulacağı gösterilmektedir.
[string[,]]$rank2 = [string[,]]::new(3,2)
$rank2.Rank
$rank2.Length
$rank2[0,0] = 'a'
$rank2[0,1] = 'b'
$rank2[1,0] = 'c'
$rank2[1,1] = 'd'
$rank2[2,0] = 'e'
$rank2[2,1] = 'f'
$rank2[1,1]
2
6
d
Çok boyutlu bir dizideki öğelere erişmek için, tek bir köşeli ayraç kümesinde (,) virgül ([]) kullanarak dizinleri ayırın.
Çoğaltma ve birleştirme gibi çok boyutlu bir dizideki bazı işlemler, bu dizinin düzleştirilmelerini gerektirir. Düzleştirme, diziyi 1 boyutlu bir kısıtlanmamış tür dizisine dönüştürür. Sonuçta elde edilen dizi, tüm öğeleri satır ana sırasına göre alır. Aşağıdaki örneği göz önünde bulundurun:
$a = "red",$true
$b = (New-Object 'int[,]' 2,2)
$b[0,0] = 10
$b[0,1] = 20
$b[1,0] = 30
$b[1,1] = 40
$c = $a + $b
$a.GetType().Name
$b.GetType().Name
$c.GetType().Name
$c
Çıktıda, $c$a ve $b öğelerini satır ana sırasıyla içeren 1 boyutlu bir dizi olduğu gösterilir.
Object[]
Int32[,]
Object[]
red
True
10
20
30
40
Dizi yöntemleri
Clear
Tüm öğe değerlerini dizinin öğe türünün varsayılan değer ayarlar.
Clear() yöntemi dizinin boyutunu sıfırlamaz.
Aşağıdaki örnekte $a bir nesne dizisidir.
$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True
Bu örnekte, $intA açıkça tamsayı içerecek şekilde yazıldı.
[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0
ForEach()
Dizideki tüm öğeler üzerinde yinelemeye ve dizinin her öğesi için belirli bir işlem gerçekleştirmeye olanak tanır.
ForEach() yönteminde farklı işlemler gerçekleştiren birkaç aşırı yükleme vardır.
ForEach(scriptblock expression)
ForEach(scriptblock expression, object[] arguments)
ForEach(type convertToType)
ForEach(string propertyName)
ForEach(string propertyName, object[] newValue)
ForEach(string methodName)
ForEach(string methodName, object[] arguments)
PowerShell 7.6-preview.5, yöntemi için bir diğer ad ve PSForEach() yöntemin ForEach()PSWhere() diğer adı olarak eklenirWhere(). ve ile ForEach() çakışmaları önlemek için bu diğer adları kullanın ve Where() nesnenin temel sınıfında tanımlanabilir. Örneğin, System.Collections.Generic.List<T> sınıfı kendi ForEach() yöntemini tanımlar. Temel sınıf yöntemini çağırmaktan kaçınmak için kullanın PSForEach() .
ForEach(scriptblock ifadesi)
ForEach(scriptblock ifadesi, object[] bağımsız değişkenleri)
Bu yöntem PowerShell v4'e eklendi.
Not
Söz dizimi bir betik bloğunun kullanımını gerektirir. Tek parametre scriptblock ise parantezler isteğe bağlıdır. Ayrıca, yöntem ile açma parantezi veya ayraç arasında boşluk olmamalıdır.
Aşağıdaki örnekte ForEach() yönteminin nasıl kullanıldığı gösterilmektedir. Bu durumda amaç, dizideki öğelerin kare değerini oluşturmaktır.
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
parametresinin ForEach-Objectarguments parametresinde olduğu gibi parametresi de bir dizi bağımsız değişkenin bunları kabul etmek üzere yapılandırılmış bir betik bloğuna geçirilmesine izin verir.
ArgumentListdavranışı hakkında daha fazla bilgi için bkz. about_Splatting.
ForEach(convertToType yazın)
ForEach() yöntemi, öğeleri farklı bir türe dökmek için kullanılabilir; Aşağıdaki örnekte, dize tarihleri listesinin [datetime] türüne nasıl dönüştürüldüğü gösterilmektedir.
("1/1/2017", "2/1/2017", "3/1/2017").ForEach([datetime])
Sunday, January 1, 2017 12:00:00 AM
Wednesday, February 1, 2017 12:00:00 AM
Wednesday, March 1, 2017 12:00:00 AM
ForEach(string propertyName)
ForEach(string propertyName, object[] newValue)
ForEach() yöntemi, koleksiyondaki her öğe için özellik değerlerini almak veya ayarlamak için de kullanılabilir.
# Set all LastAccessTime properties of files to the current date.
(dir 'C:\Temp').ForEach('LastAccessTime', (Get-Date))
# View the newly set LastAccessTime of all items, and find Unique entries.
(dir 'C:\Temp').ForEach('LastAccessTime') | Get-Unique
Wednesday, June 20, 2018 9:21:57 AM
Not
yöntemi, ForEach() numaralandırmadan önce özellikleri bir koleksiyona sarmalar.
kullanmak ForEach() normalde her iki dizideki tüm öğeleri döndürür. Ancak sarmalanan koleksiyonun öğelerine erişmek istiyorsanız iki dizin kullanmanız gerekir.
Nesnenin $myObject tek değere sahip bir özelliği ve 11 tamsayılık bir dizi içeren bir özelliği olduğu aşağıdaki örneği düşünün.
$myObject = [pscustomobject]@{
singleValue = 'Hello'
arrayValue = @(0..10)
}
nesnesinin ForEach() özelliğine erişmek için yöntemini kullandığınızda, özelliği bir koleksiyonda sarmalanır.
PS> $myObject.ForEach('singleValue').GetType().Name
Collection`1
PS> $myObject.ForEach('singleValue')[0].GetType().Name
String
PS> $myObject.ForEach('singleValue') # Enumerate the collection object
Hello
Dizinin bir öğesine erişmek için iki dizin kullanmanız gerekir.
PS> $myObject.ForEach('arrayValue').GetType().Name
Collection`1
# A single Collection item
PS> $myObject.ForEach('arrayValue').Count
1
# First item in the collection is an array of 11 items
PS> $myObject.ForEach('Value')[0].Count
11
# Access the first item in the array of 11 items
PS> $myObject.ForEach('Value')[0][0]
0
Bu, her nesnenin ForEach()Value özelliğine erişmek için betik bloğu ile kullanarak yöntemini kullanmaktan farklıdır.
PS> $myObject.ForEach({$_.Value}).Count # An array of 11 items
11
Diziler veya iç içe nesneler gibi karmaşık özellik türlerine erişmek istediğinizde kaydırma davranışını önlemek için betik bloğu söz dizimini kullanın.
ForEach(string methodName)
ForEach(string methodName, object[] bağımsız değişkenleri)
bir nesnenin yöntemini koleksiyondaki ForEach() her öğede yürütmek için yöntemini kullanabilirsiniz.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
parametresinin ForEach-Objectarguments parametresinde olduğu gibi parametresi de bir değer dizisinin bunları kabul etmek üzere yapılandırılmış bir betik bloğuna geçirilmesine izin verir.
Not
Windows PowerShell 3.0'dan başlayarak bir koleksiyondaki her öğe için özellikleri alma ve yürütme yöntemleri de "Skaler nesne ve koleksiyon yöntemleri" kullanılarak gerçekleştirilebilir. Bu konuda daha fazla bilgiyi burada about_Methodsokuyabilirsiniz.
Where()
Dizi öğelerini filtrelemeye veya seçmeye izin verir. Betiğin, öğesinin $falsesonra gösterilmesi için sıfır (0), boş dize, $null veya Where() dışında bir değer değerlendirmesi gerekir. Boole değerlendirmesi hakkında daha fazla bilgi için bkz. about_Booleans.
Where() yöntemi için bir tanım vardır.
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
Not
Söz dizimi bir betik bloğunun kullanımını gerektirir. Tek parametre scriptblock ise parantezler isteğe bağlıdır. Ayrıca, yöntem ile açma parantezi veya ayraç arasında boşluk olmamalıdır.
Expression filtreleme için gereken bir betik bloğudur, isteğe bağlı mode bağımsız değişkeni ek seçim özelliklerine ve isteğe bağlı numberToReturn bağımsız değişkeni de filtreden kaç öğe döndürüldüğünü sınırlama olanağı sağlar.
mode değeri bir WhereOperatorSelectionMode sabit listesi değeri olmalıdır:
-
Default(0) - Tüm öğeleri döndür -
First(1) - İlk öğeyi döndür -
Last(2) - Son öğeyi döndür -
SkipUntil(3) - Koşul doğru olana kadar öğeleri atlayın, kalan tüm öğeleri döndür (koşulun doğru olduğu ilk öğe dahil) -
Until(4) - Koşul doğru olana kadar tüm öğeleri döndürür -
Split(5) - İki öğeden oluşan bir dizi döndürür- İlk öğe eşleşen öğeler içeriyor
- İkinci öğe kalan öğeleri içerir
Aşağıdaki örnek, dizideki tüm tek sayıların nasıl seç yapılacağını gösterir.
(0..9).Where{ $_ % 2 }
1
3
5
7
9
Sonraki örnek, boş olmayan tüm dizelerin nasıl seç yapılacağını gösterir.
('hi', '', 'there').Where{ $_ }
hi
there
PowerShell 7.6-preview.5, yöntemi için bir diğer ad ve PSForEach() yöntemin ForEach()PSWhere() diğer adı olarak eklenirWhere(). ve ile ForEach() çakışmaları önlemek için bu diğer adları kullanın ve Where() nesnenin temel sınıfında tanımlanabilir. Örneğin, System.Collections.Generic.List<T> sınıfı kendi ForEach() yöntemini tanımlar. Temel sınıf yöntemini çağırmaktan kaçınmak için kullanın PSForEach() .
Default
Default modu, Expression betik bloğu kullanarak öğeleri filtreler.
bir numberToReturn sağlanırsa, döndürülecek en fazla öğe sayısını belirtir.
# Get the zip files in the current users profile, sorted by LastAccessTime
$Zips = dir $Env:USERPROFILE -Recurse '*.zip' | Sort-Object LastAccessTime
# Get the least accessed file over 100MB
$Zips.Where({$_.Length -gt 100MB}, 'Default', 1)
Not
hem Default modu hem de First modu ilk (numberToReturn) öğeleri döndürür ve birbirinin yerine kullanılabilir.
Last
$h = (Get-Date).AddHours(-1)
$logs = dir 'C:\' -Recurse '*.log' | Sort-Object CreationTime
# Find the last 5 log files created in the past hour
$logs.Where({$_.CreationTime -gt $h}, 'Last', 5)
SkipUntil
Mod, SkipUntil bir nesne scriptblock ifade filtresini geçene kadar koleksiyondaki tüm nesneleri atlar. Ardından tüm kalan koleksiyon öğelerini test etmeden döndürür.
yalnızca bir geçiş öğesi test edilmiştir.
Bu, döndürülen koleksiyonun hem geçirme hem de NOT test edilmiş öğeleri içerdiği anlamına gelir.
Döndürülen öğe sayısı, numberToReturn bağımsız değişkenine bir değer geçirilerek sınırlanabilir.
$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost
Until
Until modu, SkipUntil modunu ters çevirir. Bir öğe scriptblock ifadesini geçirene kadar koleksiyondaki ALL öğelerini döndürür. Bir öğe scriptblock ifadesi geçtikten sonra, Where() yöntemi öğeleri işlemeyi durdurur.
Bu, yönteminden ilk Where() öğe kümesini aldığınız anlamına gelir.
Bir öğe geçtikten sonra geri kalanlar TEST EDİlMİP döndürülmüyor.
Döndürülen öğe sayısı, numberToReturn bağımsız değişkenine bir değer geçirilerek sınırlanabilir.
# Retrieve the first set of numbers less than or equal to 10.
(1..50).Where({$_ -gt 10}, 'Until')
# This would perform the same operation.
(1..50).Where({$_ -le 10})
1
2
3
4
5
6
7
8
9
10
Not
Hem Until hem de SkipUntil, bir grup öğeyi TEST ETMEME şirket içinde çalışır.
Until, ilk PASSÖNCE öğeleri döndürür.
SkipUntil, ilk geçiş öğesi de dahil olmak üzere ilk geçişsonra tüm öğeleri döndürür.
Split
Split modu koleksiyon öğelerini iki ayrı koleksiyona böler veya gruplar. Scriptblock ifadesini geçirenler ve geçirmeyenler.
bir numberToReturn belirtilirse, ilk koleksiyon, belirtilen değeri aşmamak için öğeleri geçiren içerir.
İfade filtresi PASS kalan nesneler bile ikinci koleksiyonda döndürülür.
$running, $stopped = (Get-Service).Where({$_.Status -eq 'Running'}, 'Split')
$running
Status Name DisplayName
------ ---- -----------
Running Appinfo Application Information
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
...
$stopped
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
...
Not
Hem ForEach() hem de Where() yöntemleri iç üyelerdir. İç üyeler hakkında daha fazla bilgi için bkz. about_Intrinsic_Members.
Bir dizinin üyelerini alma
Length özelliği ve SetValue yöntemi gibi bir dizinin özelliklerini ve yöntemlerini almak için, cmdlet'in Get-Member parametresini kullanın.
Bir diziyi Get-Memberkanala aktardığınızda, PowerShell öğeleri birer birer gönderir ve Get-Member dizideki her öğenin türünü döndürür (yinelenenleri yoksayma).
InputObject parametresini kullandığınızda, Get-Member dizinin üyelerini döndürür.
Örneğin, aşağıdaki komut $a dizi değişkeninin üyelerini alır.
Get-Member -InputObject $a
Ayrıca, , cmdlet'ine yöneltilen değerden önce virgül (Get-Member) yazarak dizinin üyelerini de alabilirsiniz. Virgül, diziyi dizi dizisindeki ikinci öğe yapar. PowerShell dizileri birer birer işler ve Get-Member dizinin üyelerini döndürür. Sonraki iki örnek gibi.
,$a | Get-Member
,(1,2,3) | Get-Member
Diziyi düzenleme
Dizideki öğeleri değiştirebilir, diziye bir öğe ekleyebilir ve iki dizideki değerleri üçüncü bir dizide birleştirebilirsiniz.
Dizideki belirli bir öğenin değerini değiştirmek için, değiştirmek istediğiniz öğenin dizi adını ve dizinini belirtin ve ardından öğe için yeni bir değer belirtmek üzere atama işlecini (=) kullanın. Örneğin, $a dizisindeki ikinci öğenin değerini (dizin konumu 1) 10 olarak değiştirmek için şunu yazın:
$a[1] = 10
Bir değeri değiştirmek için dizinin SetValue yöntemini de kullanabilirsiniz. Aşağıdaki örnek, $a dizisinin ikinci değerini (dizin konumu 1) 500 olarak değiştirir:
$a.SetValue(500,1)
diziye öğe eklemek için += işlecini kullanabilirsiniz. Aşağıdaki örnekte, $a dizisine bir öğenin nasıl ekleneceği gösterilmektedir.
$a = @(0..4)
$a += 5
Not
+= işlecini kullandığınızda PowerShell aslında özgün dizinin ve eklenen değerin değerleriyle yeni bir dizi oluşturur. İşlem birkaç kez tekrarlanırsa veya dizinin boyutu çok büyükse bu durum performans sorunlarına neden olabilir.
Dizideki öğeleri silmek kolay değildir, ancak var olan bir dizinin yalnızca seçili öğelerini içeren yeni bir dizi oluşturabilirsiniz. Örneğin, dizin konumu 2 dışındaki $t dizideki tüm öğelerle $a dizisi oluşturmak için şunu yazın:
$t = $a[0,1 + 3..($a.Length - 1)]
İki diziyi tek bir dizide birleştirmek için artı işlecini (+) kullanın. Aşağıdaki örnek iki dizi oluşturur, bunları birleştirir ve ardından elde edilen birleştirilmiş diziyi görüntüler.
$x = 1,3
$y = 5,9
$z = $x + $y
Sonuç olarak, $z dizisi 1, 3, 5 ve 9 içerir.
Diziyi silmek için diziye $null değeri atayın. Aşağıdaki komut, $a değişkenindeki diziyi siler.
$a = $null
Remove-Item cmdlet'ini de kullanabilirsiniz, ancak özellikle büyük diziler için $null değeri atamak daha hızlıdır.
Sıfır veya bir dizileri
Windows PowerShell 3.0'da başlayarak, sıfır veya bir nesneden oluşan skaler türler ve koleksiyonlar Count ve Length özelliklerine sahiptir. Ayrıca, tek bir skaler nesnenin değerine erişmek için dizi dizini gösterimini de kullanabilirsiniz. Bu özellik, koleksiyon bekleyen bir komut ikiden az öğe aldığında oluşan betik oluşturma hatalarından kaçınmanıza yardımcı olur.
Aşağıdaki örnekte, nesne içermeyen bir değişkenin Count ve Length 0 olduğu gösterilmektedir.
PS> $a = $null
PS> $a.Count
0
PS> $a.Length
0
Aşağıdaki örnekte, bir nesne içeren bir değişkenin Count ve Length 1 olduğu gösterilmektedir. Nesnenin değerine erişmek için dizi dizini oluşturmayı da kullanabilirsiniz.
PS> $a = 4
PS> $a.Count
1
PS> $a.Length
1
PS> $a[0]
4
PS> $a[-1]
4
Bir koleksiyon veya tek bir nesne döndürebilen bir komut çalıştırdığınızda, Count veya Length özelliklerini test etmek zorunda kalmadan nesnenin değerine erişmek için dizi dizini oluşturmayı kullanabilirsiniz. Ancak, sonuç tek bir nesneyse (singleton) ve bu nesnenin bir Count veya Length özelliği varsa, bu özelliklerin değeri singleton nesnesine aittir ve koleksiyondaki öğe sayısını temsil etmemektedir.
Aşağıdaki örnekte, komut tek bir dize nesnesi döndürür. Bu dizenin Length4.
PS> $result = 'one','two','three','four' | Where-Object {$_ -like 'f*'}
PS> $result.GetType().FullName
System.String
PS> $result
four
PS> $result.Count
1
PS❯ $result.Length
4
$result bir dize dizisi olmasını istiyorsanız, değişkeni dizi olarak bildirmeniz gerekir.
Bu örnekte, $result bir dize dizisidir. Dizinin Count ve Length1ve ilk öğenin Length4.
PS> [string[]]$result = 'one','two','three','four' |
Where-Object {$_ -like 'f*'}
PS> $result.GetType().FullName
System.String[]
PS> $result
four
PS> $result.Count
1
PS> $result.Length
1
PS> $result[0].Length
4
Sistem için dizin oluşturma desteği.Tuple Nesne
PowerShell 6.1, dizilere benzer şekilde Tuple nesnelerine dizinli erişim desteği ekledi. Mesela:
PS> $tuple = [Tuple]::Create(1, 'test')
PS> $tuple[0]
1
PS> $tuple[1]
test
PS> $tuple[0..1]
1
test
PS> $tuple[-1]
test
Dizilerden ve diğer koleksiyon nesnelerinden farklı olarak, Tuple nesneler işlem hattından geçirildiğinde veya nesne dizilerini destekleyen parametreler tarafından tek bir nesne olarak kabul edilir.
Daha fazla bilgi için bkz. sistem .Tuple.
Uygulayan .NET türlerini dizinleme IDictionary<TKey, TValue>
PowerShell, genel IDictionary<TKey, TValue> arabirimini uygulayan türler için bir türün gerçek dizin oluşturucusunu çağırmaz. Bunun yerine, bir anahtar verildiğinde PowerShell, anahtar mevcut olmadığında TryGetValue() döndüren $nullkullanarak anahtarın varlığını test eder.
Buna karşılık, Item(<key>)kullanarak türün true dizin oluşturucusunu çağırırsanız, yöntem anahtar mevcut olmadığında bir özel durum oluşturur.
Aşağıdaki örnekte fark gösterilmektedir.
PS> [Collections.Generic.Dictionary[string, int]]::new()['nosuchkey']
# No output ($null)
PS> [Collections.Generic.Dictionary[string, int]]::new().Item('nosuchkey')
GetValueInvocationException: Exception getting "Item": "The given key
'nosuchkey' was not present in the dictionary."
Üye erişim sabit listesi
PowerShell 3.0'dan başlayarak, liste koleksiyonunda mevcut olmayan bir üyeye erişmek için üye erişim işlecini kullandığınızda, PowerShell koleksiyondaki öğeleri otomatik olarak numaralandırır ve her öğede belirtilen üyeye erişmeye çalışır. Daha fazla bilgi için bkz. about_Member-Access_Enumeration.
Örnekler
Aşağıdaki örnek iki yeni dosya oluşturur ve sonuçta elde edilen nesneleri $filesdizi değişkeninde depolar. Dizi nesnesinin LastWriteTime üyesi olmadığından, dizideki her öğe için LastWriteTime değeri döndürülür.
$files = (New-Item -Type File -Force '/temp/t1.txt'),
(New-Item -Force -Type File '/temp/t2.txt')
$files.LastWriteTime
Friday, June 25, 2021 1:21:17 PM
Friday, June 25, 2021 1:21:17 PM
Üye erişimi numaralandırması, koleksiyondaki öğelerden değerleri almanıza olanak tanır, ancak koleksiyondaki öğelerde değerleri ayarlamanızı sağlamaz. Mesela:
$files.LastWriteTime = (Get-Date).AddDays(-1)
InvalidOperation: The property 'LastWriteTime' cannot be found on this object.
Verify that the property exists and can be set.
Değerleri ayarlamak için bir yöntem kullanmanız gerekir.
$files.set_LastWriteTime((Get-Date).AddDays(-1))
$files.LastWriteTime
Thursday, June 24, 2021 1:23:30 PM
Thursday, June 24, 2021 1:23:30 PM
set_LastWriteTime() yöntemi, FileInfo nesnesinin gizli üyesidir. Aşağıdaki örnekte gizliset yöntemlerini bulma gösterilmektedir.
$files | Get-Member -Force -Name set_*
TypeName: System.IO.FileInfo
Name MemberType Definition
---- ---------- ----------
Attributes Property System.IO.FileAttributes Attributes {get;set;}
CreationTime Property datetime CreationTime {get;set;}
CreationTimeUtc Property datetime CreationTimeUtc {get;set;}
IsReadOnly Property bool IsReadOnly {get;set;}
LastAccessTime Property datetime LastAccessTime {get;set;}
LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;}
LastWriteTime Property datetime LastWriteTime {get;set;}
LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;}
Dikkat
yöntemi koleksiyondaki her öğe için yürütülürken, üye sabit listesi kullanılarak yöntemleri çağırırken dikkatli olunmalıdır.
Ayrıca bakınız
PowerShell