Bagikan melalui


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 elemen pertama 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 dihitung dari akhir array. Misalnya, -1 mengacu pada elemen terakhir array. Untuk menampilkan tiga elemen terakhir 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 yang terakhir. Ini mengacu pada elemen pertama, terakhir, dan kedua ke terakhir dalam 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, , fordan 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 hingga 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 hingga 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 nilai default dari 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-Objectarguments 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[] )

Lastly, 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-Objectarguments 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 item
  • First (1) - Mengembalikan item pertama
  • Last (2) - Mengembalikan item terakhir
  • SkipUntil (3) - Lewati item hingga kondisi benar, kembalikan semua item yang tersisa (termasuk item pertama yang kondisinya benar)
  • Until (4) - Mengembalikan semua item hingga kondisi benar
  • Split (5) - Mengembalikan array dari dua elemen
    • Elemen pertama 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 item (numberToReturn) pertama, 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 hingga 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 hingga item melewati ekspresi blok skrip. Setelah item melewati ekspresi skripblock, Where() metode berhenti memproses item.

Ini berarti Anda menerima set pertama 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.

Untilmengembalikan item SEBELUM PASS pertama. SkipUntilmengembalikan semua item SETELAH pass pertama, termasuk item pertama yang 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, koleksi pertama, berisi item yang melewati, 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_Instrinsic_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 dari elemen pertama 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 $filesarray . Karena objek array tidak memiliki Lastanggota WriteTime , 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.

Lihat juga