about_Arrays
Deskripsi singkat
Menjelaskan array, yang merupakan struktur data yang dirancang untuk menyimpan koleksi item.
Deskripsi panjang
Array adalah struktur data yang dirancang untuk menyimpan kumpulan item. Item dapat berupa jenis yang sama atau tipe yang berbeda.
Dimulai di Windows PowerShell 3.0, kumpulan nol atau satu objek memiliki beberapa properti array.
Membuat dan menginisialisasi array
Untuk membuat dan menginisialisasi array, tetapkan beberapa nilai ke variabel. Nilai yang disimpan dalam array dibatasi dengan koma dan dipisahkan dari nama variabel oleh operator penugasan (=
).
Misalnya, untuk membuat array bernama $A
yang berisi tujuh nilai numerik (bilangan bulat) 22, 5, 10, 8, 12, 9, dan 80, ketik:
$A = 22,5,10,8,12,9,80
Koma juga dapat digunakan untuk menginisialisasi array item tunggal dengan menempatkan koma sebelum item tunggal.
Misalnya, untuk membuat array item tunggal bernama $B
yang berisi nilai tunggal 7, ketik:
$B = ,7
Anda juga dapat membuat dan menginisialisasi array menggunakan operator rentang (..
).
Contoh berikut membuat array yang berisi nilai 5 hingga 8.
$C = 5..8
Akibatnya, $C
berisi empat nilai: 5, 6, 7, dan 8.
Ketika tidak ada tipe data yang ditentukan, PowerShell membuat setiap array sebagai array objek (System.Object[]). Untuk menentukan jenis data array, gunakan GetType()
metode . Contohnya:
$A.GetType()
Untuk membuat array yang diketik dengan kuat, yaitu array yang hanya dapat berisi nilai dari jenis tertentu, mentransmisikan variabel sebagai jenis array, seperti string[], long[], atau int32[]. Untuk mentransmisikan array, awali nama variabel dengan jenis array yang diapit dalam tanda kurung. Contohnya:
[int32[]]$ia = 1500, 2230, 3350, 4000
Akibatnya, $ia
array hanya dapat berisi bilangan bulat.
Anda dapat membuat array yang dilemparkan ke jenis apa pun yang didukung di .NET. Misalnya, objek yang Get-Process
diambil untuk mewakili proses adalah dari jenis System.Diagnostics.Process . Untuk membuat array objek proses yang ditik dengan kuat, masukkan perintah berikut:
[Diagnostics.Process[]]$zz = Get-Process
Operator sub-ekspresi array
Operator sub-ekspresi array membuat array dari pernyataan di dalamnya. Apa pun pernyataan di dalam operator, operator menempatkannya dalam array. Bahkan jika ada nol atau satu objek.
Sintaks operator array adalah sebagai berikut:
@( ... )
Anda dapat menggunakan operator array untuk membuat array nol atau satu objek. Contohnya:
$a = @("Hello World")
$a.Count
1
$b = @()
$b.Count
0
Operator array berguna dalam skrip saat Anda mendapatkan objek, tetapi tidak tahu berapa banyak yang diharapkan. Contohnya:
$p = @(Get-Process Notepad)
Untuk informasi selengkapnya tentang operator sub-ekspresi array, lihat about_Operators.
Mengakses dan menggunakan elemen array
Membaca array
Anda dapat merujuk ke array menggunakan nama variabelnya. Untuk menampilkan semua elemen dalam array, panggil nama array. Misalnya, $a
adalah array angka 0 hingga 9:
$a
0
1
2
3
4
5
6
7
8
9
Anda dapat merujuk ke elemen dalam array menggunakan indeks. Sertakan nomor indeks dalam tanda kurung siku. Nilai indeks dimulai dari 0
. Misalnya, untuk menampilkan first elemen dalam $a
array, ketik:
$a[0]
0
Untuk menampilkan elemen ketiga dalam $a
array, ketik:
$a[2]
2
Anda dapat mengambil bagian dari array menggunakan operator rentang untuk indeks. Misalnya, untuk mengambil elemen kedua hingga kelima dari array, Anda akan mengetik:
$a[1..4]
1
2
3
4
Angka negatif count dari akhir array. Misalnya, -1
mengacu pada last elemen array. Untuk menampilkan last tiga elemen array, dalam urutan naik indeks, ketik:
$a = 0 .. 9
$a[-3..-1]
7
8
9
Jika Anda mengetik indeks negatif dalam urutan menurun, output Anda akan berubah.
$a = 0 .. 9
$a[-1..-3]
9
8
7
Namun, berhati-hatilah saat menggunakan notasi ini. Notasi siklus dari batas akhir ke awal array.
$a = 0 .. 9
$a[2..-2]
2
1
0
9
8
Selain itu, salah satu kesalahan umum adalah mengasumsikan $a[0..-2]
mengacu pada semua elemen array, kecuali untuk last yang satu. Ini mengacu pada firstelemen , last, dan kedua ke dalamlast array.
Anda dapat menggunakan operator plus (+
) untuk menggabungkan rentang dengan daftar elemen dalam array. Misalnya, untuk menampilkan elemen pada posisi indeks 0, 2, dan 4 hingga 6, ketik:
$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6
Selain itu, untuk mencantumkan beberapa rentang dan elemen individual, Anda dapat menggunakan operator plus. Misalnya, untuk mencantumkan elemen nol hingga dua, empat hingga enam, dan elemen pada jenis posisi kedelapan:
$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8
Iterasi atas elemen array
Anda juga dapat menggunakan konstruksi perulangan, seperti foreach
, , for
dan while
perulangan, untuk merujuk ke elemen dalam array. Misalnya, untuk menggunakan perulangan foreach
untuk menampilkan elemen dalam $a
array, ketik:
$a = 0..9
foreach ($element in $a) {
$element
}
0
1
2
3
4
5
6
7
8
9
Perulangan foreach
berulang melalui array dan mengembalikan setiap nilai dalam array until yang mencapai akhir array.
Perulangan for
berguna ketika Anda meningkatkan penghitung saat memeriksa elemen dalam array. Misalnya, untuk menggunakan perulangan for
untuk mengembalikan setiap nilai lain dalam array, ketik:
$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
$a[$i]
}
0
2
4
6
8
Anda dapat menggunakan perulangan while
untuk menampilkan elemen dalam array until kondisi yang ditentukan tidak lagi benar. Misalnya, untuk menampilkan elemen dalam $a
array sementara indeks array kurang dari 4, ketik:
$a = 0..9
$i=0
while($i -lt 4) {
$a[$i]
$i++
}
0
1
2
3
Properti array
Count atau Length atau LongLength
Untuk menentukan berapa banyak item dalam array, gunakan Length properti atau aliasnya Count . Longlength berguna jika array berisi lebih dari 2.147.483.647 elemen.
$a = 0..9
$a.Count
$a.Length
10
10
Rank
Mengembalikan jumlah dimensi dalam array. Sebagian besar array di PowerShell hanya memiliki satu dimensi. Bahkan ketika Anda berpikir Anda sedang membangun array multidmensional seperti contoh berikut:
$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)"
Dalam contoh ini, Anda membuat array dimensi tunggal yang berisi array lain. Ini juga dikenal sebagai array jagged. Properti Rank membuktikan bahwa ini adalah dimensi tunggal. Untuk mengakses item dalam array berjatuh, indeks harus dalam tanda kurung terpisah ([]
).
$a rank: 1
$a length: 3
$a[2] length: 348
Process $a[2][1]: AcroRd32
Array multidirmansional disimpan dalam urutan besar baris. Contoh berikut menunjukkan cara membuat array yang benar-benar multidampingan.
[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
Untuk mengakses item dalam array multidendamional, pisahkan indeks menggunakan koma (,
) dalam satu set tanda kurung siku ([]
).
Beberapa operasi pada array multidarisional, seperti replikasi dan perangkaian, mengharuskan array tersebut diratakan. Meratakan mengubah array menjadi array 1 dimensi dari jenis yang tidak dibatasi. Array yang dihasilkan mengambil semua elemen dalam urutan besar baris. Pertimbangkan contoh berikut:
$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
Output menunjukkan bahwa $c
adalah array 1 dimensi yang berisi item dari $a
dan $b
dalam urutan utama baris.
Object[]
Int32[,]
Object[]
red
True
10
20
30
40
Metode array
Clear
Mengatur semua nilai elemen ke default nilai jenis elemen array. Metode Clear()
ini tidak mengatur ulang ukuran array.
Dalam contoh $a
berikut adalah array objek.
$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True
Dalam contoh ini, $intA
secara eksplisit ditik untuk berisi bilangan bulat.
[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0
ForEach()
Memungkinkan untuk melakukan iterasi atas semua elemen dalam array dan melakukan operasi tertentu untuk setiap elemen array.
Metode ini ForEach()
memiliki beberapa kelebihan beban yang melakukan operasi yang berbeda.
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(Ekspresi blokir skrip)
ForEach(ekspresi skripblock, argumen object[] )
Metode ini ditambahkan di PowerShell v4.
Catatan
Sintaks memerlukan penggunaan blok skrip. Tanda kurung bersifat opsional jika blokir skrip adalah satu-satunya parameter. Selain itu, tidak boleh ada ruang antara metode dan tanda kurung buka atau kurung kurawal.
Contoh berikut menunjukkan cara menggunakan ForEach()
metode . Dalam hal ini niatnya adalah untuk menghasilkan nilai kuadrat elemen dalam array.
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
Sama seperti parameter ArgumentList , ForEach-Object
arguments
parameter memungkinkan lolosnya array argumen ke blok skrip yang dikonfigurasi untuk menerimanya.
Untuk informasi selengkapnya tentang perilaku ArgumentList, lihat about_Splatting.
ForEach(jenis convertToType)
Metode ForEach()
ini dapat digunakan untuk mentransmisikan elemen ke jenis yang berbeda; contoh berikut menunjukkan cara mengonversi daftar tanggal string ke [DateTime]
jenis.
("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)
Metode ini ForEach()
juga dapat digunakan untuk mengambil, atau mengatur nilai properti untuk setiap item dalam koleksi.
# 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(methodName string)
ForEach(string methodName, argumen object[] )
Terakhir, ForEach()
metode dapat digunakan untuk menjalankan metode pada setiap item dalam koleksi.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
Sama seperti parameter ArgumentList , ForEach-Object
arguments
parameter memungkinkan lolosnya array nilai ke blok skrip yang dikonfigurasi untuk menerimanya.
Catatan
Mulai Windows PowerShell 3.0 mengambil properti dan menjalankan metode untuk setiap item dalam koleksi juga dapat dicapai menggunakan "Metode objek dan koleksi skalar". Anda dapat membaca lebih lanjut tentang itu di sini about_Methods.
Where()
Memungkinkan untuk memfilter atau memilih elemen array. Skrip harus mengevaluasi ke sesuatu yang berbeda dari: nol (0), string kosong, $false
atau $null
agar elemen ditampilkan setelah Where()
. Untuk informasi selengkapnya tentang evaluasi boolean, lihat about_Booleans.
Ada satu definisi untuk metode ini Where()
.
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
Catatan
Sintaks memerlukan penggunaan blok skrip. Tanda kurung bersifat opsional jika blokir skrip adalah satu-satunya parameter. Selain itu, tidak boleh ada ruang antara metode dan tanda kurung buka atau kurung kurawal.
Expression
adalah blok skrip yang diperlukan untuk pemfilteran, mode
argumen opsional memungkinkan kemampuan pemilihan tambahan, dan numberToReturn
argumen opsional memungkinkan kemampuan untuk membatasi berapa banyak item yang dikembalikan dari filter.
Nilai mode
harus berupa nilai enum WhereOperatorSelectionMode :
Default
(0
) - Mengembalikan semua itemFirst
(1
) - Mengembalikan first itemLast
(2
) - Mengembalikan last itemSkipUntil
(3
) - Lewati kondisi item until benar, kembalikan semua item yang tersisa (termasuk first item yang kondisinya benar)Until
(4
) - Mengembalikan semua kondisi item until adalah trueSplit
(5
) - Mengembalikan array dari dua elemen- Elemen first berisi item yang cocok
- Elemen kedua berisi item yang tersisa
Contoh berikut menunjukkan cara memilih semua angka ganjil dari array.
(0..9).Where{ $_ % 2 }
1
3
5
7
9
Contoh berikutnya menunjukkan cara memilih semua string yang tidak kosong.
('hi', '', 'there').Where{ $_ }
hi
there
Default
Mode memfilter Default
item menggunakan Expression
blokir skrip.
numberToReturn
Jika disediakan, item menentukan jumlah maksimum item yang akan dikembalikan.
# 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)
Catatan
Default
Mode dan First
mode mengembalikan first item (numberToReturn
), dan dapat digunakan secara bergantian.
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
SkipUntil
Mode melompati semua objek dalam koleksi until objek melewati filter ekspresi blok skrip. Kemudian mengembalikan SEMUA item koleksi yang tersisa tanpa mengujinya. Hanya satu item yang lolos yang diuji.
Ini berarti koleksi yang dikembalikan berisi item passing dan non-passing yang BELUM diuji.
Jumlah item yang dikembalikan dapat dibatasi dengan meneruskan nilai ke numberToReturn
argumen.
$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost
Until
Mode Until
ini akan menginversi SkipUntil
mode. Ini mengembalikan SEMUA item dalam koleksi until item melewati ekspresi blok skrip. Setelah item melewati ekspresi skripblock, Where()
metode berhenti memproses item.
Ini berarti Anda menerima first serangkaian item yang tidak lulus dari Where()
metode . Setelah satu item lolos, sisanya TIDAK diuji atau dikembalikan.
Jumlah item yang dikembalikan dapat dibatasi dengan meneruskan nilai ke numberToReturn
argumen.
# 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
Catatan
Baik Until
dan SkipUntil
beroperasi di bawah premis TIDAK menguji batch item.
Until
mengembalikan item SEBELUM firstPASS. SkipUntil
mengembalikan semua item SETELAHfirst pass, termasuk item yang first lolos.
Split
Split
Mode memisahkan, atau mengelompokkan item koleksi menjadi dua koleksi terpisah. Mereka yang melewati ekspresi blok skrip, dan yang tidak.
numberToReturn
Jika ditentukan, first koleksi, berisi item yang diteruskan, tidak melebihi nilai yang ditentukan.
Objek yang tersisa, bahkan objek yang MELEWATI filter ekspresi, dikembalikan dalam koleksi kedua.
$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
...
Catatan
Kedua ForEach()
metode dan Where()
adalah anggota intrinsik. Untuk informasi selengkapnya tentang anggota intrinsik, lihat about_Intrinsic_Members.
Mendapatkan anggota array
Untuk mendapatkan properti dan metode array, seperti Length properti dan metode SetValue , gunakan parameter InputObject cmdlet Get-Member
.
Saat Anda menyalurkan array ke Get-Member
, PowerShell mengirim item satu per satu dan Get-Member
mengembalikan jenis setiap item dalam array (mengabaikan duplikat).
Saat Anda menggunakan parameter InputObject , Get-Member
mengembalikan anggota array.
Misalnya, perintah berikut mendapatkan anggota $a
variabel array.
Get-Member -InputObject $a
Anda juga bisa mendapatkan anggota array dengan mengetik koma (,
) sebelum nilai yang disalurkan ke Get-Member
cmdlet. Koma menjadikan array sebagai item kedua dalam array array. PowerShell menyalurkan array satu per satu dan Get-Member
mengembalikan anggota array. Seperti dua contoh berikutnya.
,$a | Get-Member
,(1,2,3) | Get-Member
Memanipulasi array
Anda dapat mengubah elemen dalam array, menambahkan elemen ke array, dan menggabungkan nilai dari dua array menjadi array ketiga.
Untuk mengubah nilai elemen tertentu dalam array, tentukan nama array dan indeks elemen yang ingin Anda ubah, lalu gunakan operator penugasan (=
) untuk menentukan nilai baru untuk elemen. Misalnya, untuk mengubah nilai item kedua dalam $a
array (posisi indeks 1) menjadi 10, ketik:
$a[1] = 10
Anda juga dapat menggunakan metode SetValue array untuk mengubah nilai. Contoh berikut mengubah nilai kedua (posisi indeks 1) dari $a
array menjadi 500:
$a.SetValue(500,1)
Anda dapat menggunakan +=
operator untuk menambahkan elemen ke array. Contoh berikut menunjukkan cara menambahkan elemen ke $a
array.
$a = @(0..4)
$a += 5
Catatan
Saat Anda menggunakan +=
operator, PowerShell benar-benar membuat array baru dengan nilai array asli dan nilai tambah. Ini dapat menyebabkan masalah performa jika operasi diulang beberapa kali atau ukuran array terlalu besar.
Tidak mudah untuk menghapus elemen dari array, tetapi Anda dapat membuat array baru yang hanya berisi elemen yang dipilih dari array yang ada. Misalnya, untuk membuat $t
array dengan semua elemen dalam $a
array kecuali untuk nilai pada posisi indeks 2, ketik:
$t = $a[0,1 + 3..($a.length - 1)]
Untuk menggabungkan dua array ke dalam satu array, gunakan operator plus (+
). Contoh berikut membuat dua array, menggabungkannya, lalu menampilkan array gabungan yang dihasilkan.
$x = 1,3
$y = 5,9
$z = $x + $y
Akibatnya, $z
array berisi 1, 3, 5, dan 9.
Untuk menghapus array, tetapkan nilai $null
ke array. Perintah berikut menghapus array dalam $a
variabel.
$a = $null
Anda juga dapat menggunakan Remove-Item
cmdlet, tetapi menetapkan nilai $null
lebih cepat, terutama untuk array besar.
Array nol atau satu
Dimulai di Windows PowerShell 3.0, kumpulan nol atau satu objek memiliki Count properti dan Length . Selain itu, Anda dapat mengindeks ke dalam array dari satu objek. Fitur ini membantu Anda menghindari kesalahan pembuatan skrip yang terjadi ketika perintah yang mengharapkan koleksi mendapatkan kurang dari dua item.
Catatan
Di Windows PowerShell, objek yang dibuat dengan mentransmisikan Hashtable untuk [pscustomobject]
tidak memiliki Length properti atau Count .
Mencoba mengakses anggota ini mengembalikan $null
.
Contoh berikut menunjukkan bahwa variabel yang tidak berisi objek memiliki Count dan Length 0.
PS> $a = $null
PS> $a.Count
0
PS> $a.Length
0
Contoh berikut menunjukkan bahwa variabel yang berisi satu objek memiliki Count dan Length 1. Anda juga dapat menggunakan pengindeksan array untuk mengakses nilai objek.
PS> $a = 4
PS> $a.Count
1
PS> $a.Length
1
PS> $a[0]
4
PS> $a[-1]
4
Saat Anda menjalankan perintah yang dapat mengembalikan koleksi atau satu objek, Anda dapat menggunakan pengindeksan array untuk mengakses nilai objek tanpa harus menguji Count properti atau Length . Namun, jika hasilnya adalah objek tunggal (singleton), dan objek tersebut memiliki Count properti atau Length , nilai properti tersebut milik objek singleton dan tidak mewakili jumlah item dalam koleksi.
Dalam contoh berikut, perintah mengembalikan satu objek string. Dari Length string itu adalah 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
Jika Anda ingin $result
menjadi array string, Anda perlu mendeklarasikan variabel sebagai array.
Dalam contoh ini, $result
adalah array string. Count Dan Length dari array adalah 1
, dan Length elemennya first adalah 4
.
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
Mengindeks jenis .NET yang mengimplementasikan IDictionary<TKey, TValue>
PowerShell tidak memanggil pengindeks sejati jenis untuk jenis yang mengimplementasikan antarmuka generik IDictionary<TKey, TValue>
. Sebagai gantinya, ketika diberikan kunci, PowerShell menguji keberadaan kunci menggunakan TryGetValue()
, yang mengembalikan $null
ketika kunci tidak ada.
Sebaliknya, jika Anda memanggil pengindeks benar jenis menggunakan Item(<key>)
, metode melemparkan pengecualian ketika kunci tidak ada.
Contoh berikut mengilustrasikan perbedaannya.
PS> [Collections.Generic.Dictionary[string, int]]::new()['nosuchkey']
# No output ($null)
PS> [Collections.Generic.Dictionary[string, int]]::new().Item('nosuchkey')
Exception getting "Item": "The given key 'nosuchkey' was not present in the dictionary."
At line:1 char:1
+ [Collections.Generic.Dictionary[string, int]]::new().Item('nosuchkey' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], GetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenGetting
Enumerasi akses anggota
Dimulai di PowerShell 3.0, saat Anda menggunakan operator akses anggota untuk mengakses anggota yang tidak ada di kumpulan daftar, PowerShell secara otomatis menghitung item dalam koleksi dan mencoba mengakses anggota yang ditentukan pada setiap item. Untuk informasi selengkapnya, lihat about_Member-Access_Enumeration.
Contoh
Contoh berikut membuat dua file baru dan menyimpan objek yang dihasilkan dalam variabel $files
array . Karena objek array tidak memiliki anggota LastWriteTime , nilai LastWriteTime dikembalikan untuk setiap item dalam array.
$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
Enumerasi akses anggota memungkinkan Anda mendapatkan nilai dari item dalam koleksi, tetapi tidak mengatur nilai pada item dalam koleksi. Contohnya:
$files.LastWriteTime = (Get-Date).AddDays(-1)
The property 'LastWriteTime' cannot be found on this object. Verify that the
property exists and can be set.
At line:1 char:1
+ $files.LastWriteTime = (Get-Date).AddDays(-1)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
Untuk mengatur nilai, Anda harus menggunakan metode .
$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
Metode set_LastWriteTime()
ini adalah anggota tersembunyi dari objek FileInfo . Contoh berikut menunjukkan cara menemukan metode tersembunyiset
.
$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;}
Perhatian
Karena metode dijalankan untuk setiap item dalam koleksi, perawatan harus diambil saat memanggil metode menggunakan enumerasi anggota.