about_Arrays

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 adlı $A 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 adlı $B 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 dört $C 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 yöntemini kullanın GetType() . Örneğin:

$A.GetType()

Kesin olarak yazılan bir dizi oluşturmak için, yani yalnızca belirli bir türdeki değerleri içerebilen bir dizi, değişkeni dize[], long[] veya int32[] gibi bir dizi türü olarak yayınlar. 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. Örneğin:

[int32[]]$ia = 1500, 2230, 3350, 4000

Sonuç olarak, $ia dizi yalnızca tamsayılar içerebilir.

.NET'te desteklenen herhangi bir türe yazılan diziler oluşturabilirsiniz. Örneğin, işlemleri göstermek için alınan nesneler Get-Process 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 ifadesi 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. Örneğin:

$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. Örneğin:

$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 konumundan 0başlar. Örneğin, dizideki $a ilk öğeyi görüntülemek için şunu yazın:

$a[0]
0

Dizideki üçüncü öğeyi $a 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, dizinin son öğesi dışında tüm öğelerine başvurduğu varsaymaktır $a[0..-2] . 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

Bir dizideki öğelere başvurmak için , forve while döngüleri gibi foreachdöngü yapılarını da kullanabilirsiniz. Örneğin, dizideki $a öğeleri görüntülemek için bir foreach döngü kullanmak için şunu yazın:

$a = 0..9
foreach ($element in $a) {
  $element
}
0
1
2
3
4
5
6
7
8
9

Döngü dizide foreach yinelenir ve dizinin sonuna ulaşana kadar dizideki her değeri döndürür.

Döngü for , dizideki öğeleri incelerken sayaçları artırırken kullanışlıdır. Örneğin, bir for dizideki diğer tüm değerleri döndürmek için bir döngü 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ımlı bir while koşul artık doğru olmayana kadar dizideki öğeleri görüntülemek için bir döngü kullanabilirsiniz. Örneğin, dizi dizini 4'ten küçükken dizideki $a öğ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

Countveya veya LengthLongLength

Dizide kaç öğe olduğunu belirlemek için özelliğini veya diğer adını Count kullanınLength. Uzun boy , dizi 2.147.483.647'den fazla öğe içeriyorsa kullanışlıdır.

$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. özelliği bunun Rank 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, birincil satır sırasına göre 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, dizinleri tek bir köşeli ayraç[] () kümesi içinde virgül (,) kullanarak 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 inceleyin:

$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

Çıkış, öğeleri satır ana sırasına $a$b göre içeren 1 boyutlu bir dizi olduğunu $c gösterir.

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ğerine ayarlar. Clear() yöntemi dizinin boyutunu sıfırlamaz.

Aşağıdaki örnekte $a bir nesne dizisi verilmiştir.

$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True

Bu örnekte, $intA tamsayılar içerecek şekilde açıkça 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önteminin farklı işlemler gerçekleştiren birkaç aşırı yüklemesi 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)

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 yönteminin nasıl kullanıldığı gösterilmektedir ForEach() . Bu durumda amaç, dizideki öğelerin kare değerini oluşturmaktır.

$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9

parametresinin ForEach-Objectarguments ArgumentList parametresinde olduğu gibi parametresi de bir bağımsız değişken dizisinin bunları kabul etmek üzere yapılandırılmış bir betik bloğuna geçirilmesine izin verir.

ArgumentList'in davranışı hakkında daha fazla bilgi için bkz. about_Splatting.

ForEach(type convertToType)

ForEach() yöntemi, öğeleri farklı bir türe dönüştürmek için kullanılabilir; aşağıdaki örnekte, dize tarihleri listesinin yazılacak şekilde nasıl dönüştürüldüğü [DateTime] 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)

yöntemi, koleksiyondaki ForEach() 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

ForEach(string methodName)

ForEach(string methodName, object[] bağımsız değişkenleri)

Lastly, ForEach() yöntemler koleksiyondaki her öğede bir yöntem yürütmek için kullanılabilir.

("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE

parametresinin ForEach-Objectarguments ArgumentList 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_Methods okuyabilirsiniz.

Where()

Dizi öğelerini filtrelemeye veya seçmeye izin verir. Betiğin sıfırdan (0), boş dizeden $false veya $null öğesinin öğesinden sonra Where()gösterilmesinden farklı bir değer değerlendirmesi gerekir. Boole değerlendirmesi hakkında daha fazla bilgi için bkz . about_Booleans.

yöntemi için Where() 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, mode isteğe bağlı bağımsız değişken ek seçim özelliklerine ve numberToReturn isteğe bağlı bağımsız değişken de filtreden kaç öğe döndürüldüğünü sınırlamaya olanak tanır.

değeri mode 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
  • 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

Bu örnek, boş olmayan dizelerin nasıl seçildiğini gösterir.

('hi', '', 'there').Where({$_.Length})
hi
there

Default

Mod, Default betik bloğu kullanarak Expression öğeleri filtreler.

numberToReturn sağlanmışsa, 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

Default Hem mod hem First de mod 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 betik bloğu ifade filtresini geçene kadar koleksiyondaki tüm nesneleri atlar. Ardından kalan TÜM koleksiyon öğelerini test etmeden döndürür. Yalnızca bir geçiş öğesi test edilir.

Bu, döndürülen koleksiyonun test EDILMEYEN hem de geçirilmeyen öğeleri içerdiği anlamına gelir.

Döndürülen öğe sayısı, bağımsız değişkene numberToReturn 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

Mod Until , modu tersine çevirir SkipUntil . Bir öğe betik bloğu ifadesini geçene kadar koleksiyondaki ALL öğelerini döndürür. Bir öğe scriptblock ifadesini geçtikten sonra yöntemi öğeleri işlemeyi Where() durdurur.

Bu, yönteminden Where() ilk geçirilmeyen öğe kümesini aldığınız anlamına gelir. Bir öğe geçtikten sonra geri kalanı TEST EDİlMEDİ veya döndürülür .

Döndürülen öğe sayısı, bağımsız değişkene numberToReturn 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

SkipUntil Hem hem de Until bir grup öğeyi TEST ETMEYİN şirket içinde çalışır.

Until, ilk PASS'in ÖNCESİndeki öğeleri döndürür. SkipUntil, ilk geçiş öğesi de dahil olmak üzere ilk geçişten sonra tüm öğeleri döndürür.

Split

Mod Split , koleksiyon öğelerini iki ayrı koleksiyona böler veya gruplar. Scriptblock ifadesini geçirenler ve geçirmeyenler.

numberToReturn belirtilirse, ilk koleksiyon, belirtilen değeri aşmamak için geçen öğeleri içerir.

İfade filtresini GEÇENler bile kalan nesneler 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 hem de ForEach()Where() yöntemleri iç üyelerdir. İç üyeler hakkında daha fazla bilgi için bkz . about_Instrinsic_Members.

Bir dizinin üyelerini alma

Özelliği ve SetValue yöntemi gibi Length bir dizinin özelliklerini ve yöntemlerini almak için cmdlet'in Get-Member InputObject parametresini kullanın.

Bir diziyi öğesine Get-Memberaktardığı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 dizi değişkeninin üyelerini $a alır.

Get-Member -InputObject $a

Ayrıca, cmdlet'ine yöneltilen değerden önce virgül (,) yazarak dizinin üyelerini Get-Member 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 atama işlecini (=) kullanarak öğe için yeni bir değer belirtin. Örneğin, dizideki $a 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 dizinin ikinci değerini (dizin konumu 1) $a 500 olarak değiştirir:

$a.SetValue(500,1)

bir diziye += öğe eklemek için işlecini kullanabilirsiniz. Aşağıdaki örnekte diziye bir öğenin nasıl ekleneceği gösterilmektedir $a .

$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, dizinin 2. konumundaki değer dışında dizideki $a tüm öğelerle diziyi oluşturmak $t 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 dizi 1, 3, 5 ve 9 içerir.

Bir diziyi silmek için dizisine değerini $null atayın. Aşağıdaki komut değişkendeki diziyi $a siler.

$a = $null

Cmdlet'ini Remove-Item de kullanabilirsiniz, ancak değerini $null atamak özellikle büyük diziler için daha hızlıdır.

Sıfır veya bir dizileri

Windows PowerShell 3.0'da sıfır veya bir nesneden oluşan koleksiyon ve Length özelliklerine Count sahiptir. Ayrıca, bir nesne dizisine dizin oluşturabilirsiniz. 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 örnek, nesne içermeyen bir değişkenin ve Length değerinin 0 olduğunu Count gösterir.

PS> $a = $null
PS> $a.Count
0
PS> $a.Length
0

Aşağıdaki örnek, bir nesne içeren bir değişkenin ve Length değerinin 1 olduğunu Count gösterir. 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, veya Length özelliklerini test Count etmek zorunda kalmadan nesnenin değerine erişmek için dizi dizini oluşturmayı kullanabilirsiniz. Ancak, sonuç tek bir nesneyse (tekil) ve bu nesnenin bir Count veya Length özelliği varsa, bu özelliklerin değeri tekil nesneye aittir ve koleksiyondaki öğe sayısını temsil etmemektedir.

Aşağıdaki örnekte, komut tek bir dize nesnesi döndürür. Bu Length dizenin adıdır 4.

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

Dize dizisi olmak istiyorsanız $result , değişkenini dizi olarak bildirmeniz gerekir.

Bu örnekte, $result dize dizisidir. dizinin ve Length değeri, 1Length ilk öğesinin ise değeridir4.Count

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 nesnelere dizinli erişim Tuple desteği ekledi. Örneğin:

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> arabirimi uygulayan türler için bir türün gerçek dizin oluşturucusunu çağırmaz. Bunun yerine, bir anahtar verildiğinde PowerShell kullanarak TryGetValue()anahtarın varlığını test eder ve anahtar mevcut olmadığında döndürür $null .

Buna karşılık, kullanarak Item(<key>)türün true dizin oluşturucusunu çağırırsanız, anahtar mevcut olmadığında yöntemi 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 dizi değişkeninde $filesdepolar. Dizi nesnesinin WriteTime üyesi olmadığındanLast, dizideki her öğe için WriteTime değeri Lastdö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ğer almanıza olanak tanır, ancak koleksiyondaki öğelerde değer ayarlamamanızı sağlar. Örneğin:

$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

yöntemi FileInfo set_LastWriteTime() nesnesinin gizli bir üyesidir. Aşağıdaki örnekte gizliset yöntemi olan üyelerin nasıl bulunduğunu gösterilmektedir.

$files | Get-Member | Where-Object Definition -like '*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 bkz.