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 0
başlar. Örneğin, dizideki first $a
öğesini 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
Dizinin sonundaki negatif sayılar count . Örneğin, -1
dizinin öğesine başvurur last . Dizinin üç öğesini görüntülemek last 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, yaygın bir hata, dizi dışındaki last tüm öğelerine başvurduğu varsaymaktır$a[0..-2]
. Dizideki first, lastve ikinci öğe öğelerinelast 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 , for
ve while
döngüleri gibi foreach
dö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 dizideki until her değeri dizinin sonuna ulaşana kadar 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
Bir dizideki until öğeleri görüntülemek için bir döngü kullanabilirsinizwhile
. Tanımlı bir koşul artık doğru değildir. Ö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. Longlength 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 default dizinin öğe türünün 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-Object
arguments
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)
Son olarak, 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-Object
arguments
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ürFirst
(1
) - Öğeyi first iadeLast
(2
) - Öğeyi last iadeSkipUntil
(3
) - Öğe until atlama koşulu true, kalan tüm öğeleri döndür (koşulun first doğru olduğu öğe dahil)Until
(4
) - Tüm öğeleri until döndür koşulu trueSplit
(5
) - İki öğeden oluşan bir dizi döndürür- first öğesi 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
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 (numberToReturn
) öğelerini döndürür first 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 koleksiyondaki until tüm nesneleri atlar ve bir nesne betik bloğu ifade filtresini geçirir. 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 koleksiyondaki until ALL öğelerini döndürür ve bir öğe betik bloğu ifadesini geçirir. Bir öğe scriptblock ifadesini geçtikten sonra yöntemi öğeleri işlemeyi Where()
durdurur.
Bu, yöntemden Where()
geçirilmeyen öğeler kümesini aldığınız first 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
, PASS'in ÖNCESİndeki first öğeleri döndürür. SkipUntil
geçiş öğesi de dahil olmak üzere geçiş sonrasındaki first firsttü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, first 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_Intrinsic_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-Member
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 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, Length 1
öğesinin first 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 $files
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ğ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 gizli set
yöntemlerin nasıl bulunu olduğu 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 bkz.
PowerShell