about_Arrays
Krótki opis
Opisuje tablice, które są strukturami danych przeznaczonymi do przechowywania kolekcji elementów.
Długi opis
Tablica to struktura danych przeznaczona do przechowywania kolekcji elementów. Elementy mogą być tego samego typu lub różnych typów.
Począwszy od Windows PowerShell 3.0, kolekcja zera lub jednego obiektu ma pewne właściwości tablic.
Tworzenie i inicjowanie tablicy
Aby utworzyć i zainicjować tablicę, przypisz wiele wartości do zmiennej. Wartości przechowywane w tablicy są rozdzielane przecinkami i oddzielone od nazwy zmiennej przez operatora przypisania (=
).
Aby na przykład utworzyć tablicę o nazwie $A
zawierającą siedem wartości liczbowych (int) 22, 5, 10, 8, 12, 9 i 80, wpisz:
$A = 22,5,10,8,12,9,80
Przecinek może również służyć do inicjowania pojedynczej tablicy elementów przez umieszczenie przecinka przed pojedynczym elementem.
Aby na przykład utworzyć tablicę pojedynczego elementu o nazwie $B
zawierającej pojedynczą wartość 7, wpisz:
$B = ,7
Można również utworzyć i zainicjować tablicę przy użyciu operatora zakresu (..
).
Poniższy przykład tworzy tablicę zawierającą wartości od 5 do 8.
$C = 5..8
W rezultacie $C
zawiera cztery wartości: 5, 6, 7 i 8.
Jeśli nie określono typu danych, program PowerShell tworzy każdą tablicę jako tablicę obiektów (System.Object[]). Aby określić typ danych tablicy, użyj metody GetType(). Aby na przykład określić typ $A
danych tablicy, wpisz:
$A.GetType()
Aby utworzyć silnie typizowana tablica, czyli tablica, która może zawierać tylko wartości określonego typu, rzutować zmienną jako typ tablicy, na przykład ciąg[], long[]lub int32[]. Aby rzutować tablicę, poprzedzaj nazwę zmiennej typem tablicy ujętej w nawiasy. Aby na przykład utworzyć 32-bitową tablicę całkowitą o nazwie $ia
zawierającą cztery liczby całkowite (1500, 2230, 3350 i 4000), wpisz:
[int32[]]$ia = 1500,2230,3350,4000
W rezultacie tablica $ia
może zawierać tylko liczby całkowite.
Tablice rzutowane do dowolnego obsługiwanego typu można utworzyć na platformie .NET. Na przykład obiekty pobierane Get-Process
do reprezentowania procesów są typu System.Diagnostics.Process . Aby utworzyć silnie typizowana tablicę obiektów procesu, wprowadź następujące polecenie:
[Diagnostics.Process[]]$zz = Get-Process
Operator wyrażenia podrzędnego tablicy
Operator wyrażenia podrzędnego tablicy tworzy tablicę z instrukcji wewnątrz niej. Niezależnie od instrukcji wewnątrz operatora, operator umieści go w tablicy. Nawet jeśli istnieje zero lub jeden obiekt.
Składnia operatora tablicy jest następująca:
@( ... )
Możesz użyć operatora tablicy, aby utworzyć tablicę zero lub jeden obiekt. Przykład:
$a = @("Hello World")
$a.Count
1
$b = @()
$b.Count
0
Operator tablicy jest przydatny w skryptach podczas pobierania obiektów, ale nie wiem, ile obiektów otrzymujesz. Przykład:
$p = @(Get-Process Notepad)
Aby uzyskać więcej informacji na temat operatora wyrażenia podrzędnego tablicy, zobacz about_Operators.
Uzyskiwanie dostępu do elementów tablicy i używanie ich
Odczytywanie tablicy
Możesz odwoływać się do tablicy przy użyciu jej nazwy zmiennej. Aby wyświetlić wszystkie elementy w tablicy, wpisz nazwę tablicy. Załóżmy na przykład, że jest $a
to tablica zawierająca liczby całkowite 0, 1, 2, do 9; wpisywanie:
$a
0
1
2
3
4
5
6
7
8
9
Elementy w tablicy można odwoływać się przy użyciu indeksu, zaczynając od pozycji 0. Załącz numer indeksu w nawiasach kwadratowych. Aby na przykład wyświetlić pierwszy element w tablicy $a
, wpisz:
$a[0]
0
Aby wyświetlić trzeci element w tablicy $a
, wpisz:
$a[2]
2
Część tablicy można pobrać przy użyciu operatora zakresu dla indeksu. Aby na przykład pobrać drugi do piątego elementu tablicy, należy wpisać:
$a[1..4]
1
2
3
4
Liczba ujemna z końca tablicy. Na przykład "-1" odnosi się do ostatniego elementu tablicy. Aby wyświetlić ostatnie trzy elementy tablicy, w kolejności rosnącej indeksu wpisz:
$a = 0 .. 9
$a[-3..-1]
7
8
9
Jeśli wpiszesz indeksy ujemne w kolejności malejącej, dane wyjściowe zmienią się.
$a = 0 .. 9
$a[-1..-3]
9
8
7
Należy jednak zachować ostrożność podczas korzystania z tej notacji. Notacja jest cyklem od granicy końcowej do początku tablicy.
$a = 0 .. 9
$a[2..-2]
2
1
0
9
8
Ponadto jednym z typowych błędów jest założenie $a[0..-2]
, że odnosi się do wszystkich elementów tablicy, z wyjątkiem ostatniego. Odwołuje się on do pierwszego, ostatniego i drugiego do ostatniego elementu w tablicy.
Możesz użyć operatora plus (+
), aby połączyć zakresy z listą elementów w tablicy. Aby na przykład wyświetlić elementy na pozycjach indeksu 0, 2 i od 4 do 6, wpisz:
$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6
Ponadto, aby wyświetlić listę wielu zakresów i poszczególnych elementów, możesz użyć operatora plus. Aby na przykład wyświetlić listę elementów zero do dwóch, od czterech do sześciu, a element w ósmym typie pozycyjnym:
$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8
Iteracji nad elementami tablicy
Można również użyć konstrukcji pętli, takich jak ForEach
, For
i While
pętle, aby odwoływać się do elementów w tablicy. Aby na przykład użyć ForEach
pętli do wyświetlenia elementów w tablicy $a
, wpisz:
$a = 0..9
foreach ($element in $a) {
$element
}
0
1
2
3
4
5
6
7
8
9
Pętla Foreach
iteruje tablicę i zwraca każdą wartość w tablicy do momentu osiągnięcia końca tablicy.
Pętla jest przydatna For
w przypadku przyrostowych liczników podczas badania elementów w tablicy. Aby na przykład użyć For
pętli, aby zwrócić każdą inną wartość w tablicy, wpisz:
$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
$a[$i]
}
0
2
4
6
8
Za pomocą While
pętli można wyświetlać elementy w tablicy, dopóki zdefiniowany warunek nie będzie już spełniony. Aby na przykład wyświetlić elementy w $a
tablicy, gdy indeks tablicy jest mniejszy niż 4, wpisz:
$a = 0..9
$i=0
while($i -lt 4) {
$a[$i]
$i++
}
0
1
2
3
Właściwości tablic
Countlub LengthLongLength
Aby określić, ile elementów znajduje się w tablicy, użyj Length właściwości lub jej Count aliasu. Longlength przydaje się, jeśli tablica zawiera więcej niż 2147 483 647 elementów.
$a = 0..9
$a.Count
$a.Length
10
10
Rank
Zwraca liczbę wymiarów w tablicy. Większość tablic w programie PowerShell ma tylko jeden wymiar. Nawet jeśli uważasz, że tworzysz tablicę wielowymiarową, jak w poniższym przykładzie:
$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)"
W tym przykładzie tworzysz tablicę jednowymiarową zawierającą inne tablice. Jest to również nazywane poszarpaną tablicą. Właściwość Rank udowodniła, że jest to jednowymiarowe. Aby uzyskać dostęp do elementów w tablicy poszarpanej, indeksy muszą znajdować się w oddzielnych nawiasach ([]
).
$a rank: 1
$a length: 3
$a[2] length: 348
Process $a[2][1]: AcroRd32
Tablice wielowymiarowe są przechowywane w kolejności głównej wiersza. W poniższym przykładzie pokazano, jak utworzyć naprawdę wielowymiarową tablicę.
[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
Aby uzyskać dostęp do elementów w tablicy wielowymiarowej, rozdziel indeksy przecinkami (,
) w jednym zestawie nawiasów kwadratowych ([]
).
Niektóre operacje na tablicy wielowymiarowej, takie jak replikacja i łączenie, wymagają spłaszczenia tej tablicy. Spłaszczanie zamienia tablicę w tablicę 1-wymiarową typu bez ograniczeń. Wynikowa tablica przyjmuje wszystkie elementy w kolejności głównej wiersza. Rozpatrzmy następujący przykład:
$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
Dane wyjściowe pokazują, że $c
jest to tablica 1-wymiarowa zawierająca elementy z $a
i $b
w kolejności głównej wiersza.
Object[]
Int32[,]
Object[]
red
True
10
20
30
40
Metody tablic
Clear
Ustawia wszystkie wartości elementów na wartość domyślną typu elementu tablicy.
Metoda Clear()
nie resetuje rozmiaru tablicy.
W poniższym przykładzie $a
jest tablica obiektów.
$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True
W tym przykładzie $intA
jawnie wpisana jest liczba całkowita.
[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0
ForEach
Umożliwia iterowanie wszystkich elementów w tablicy i wykonywanie danej operacji dla każdego elementu tablicy.
Metoda ForEach
ma kilka przeciążeń, które wykonują różne operacje.
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(wyrażenie scriptblock)
ForEach(wyrażenie scriptblock, argumenty object[])
Ta metoda została dodana w programie PowerShell w wersji 4.
Uwaga
Składnia wymaga użycia bloku skryptu. Nawiasy są opcjonalne, jeśli blok skryptu jest jedynym parametrem. Ponadto nie może istnieć odstęp między metodą a nawiasem otwierającym lub nawiasem klamrowym.
W poniższym przykładzie pokazano, jak używać ForEach
metody . W takim przypadku intencją jest wygenerowanie wartości kwadratowej elementów w tablicy.
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
Podobnie jak parametr parametru -ArgumentList
ForEach-Object
, arguments
parametr umożliwia przekazywanie tablicy argumentów do bloku skryptu skonfigurowanego do ich akceptowania.
Aby uzyskać więcej informacji na temat zachowania argumentlist, zobacz about_Splatting.
ForEach(typ convertToType)
Metoda ForEach
może służyć do szybkiego rzutowania elementów na inny typ. W poniższym przykładzie pokazano, jak przekonwertować listę dat ciągów na [DateTime]
typ.
@("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)
Metoda ForEach
może być również używana do szybkiego pobierania lub ustawiania wartości właściwości dla każdego elementu w kolekcji.
# 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[] argumenty)
LastForEach
Metody mogą służyć do wykonywania metody na każdym elemencie w kolekcji.
("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE
Podobnie jak parametr parametru -ArgumentList
ForEach-Object
, Arguments
parametr umożliwia przekazywanie tablicy wartości do bloku skryptu skonfigurowanego do ich akceptowania.
Uwaga
Począwszy od Windows PowerShell 3.0 pobierania właściwości i wykonywania metod dla każdego elementu w kolekcji można również wykonać przy użyciu metod "Metody obiektów skalarnych i kolekcji". Więcej informacji na ten temat można znaleźć tutaj about_methods.
Lokalizacja
Umożliwia filtrowanie lub wybieranie elementów tablicy. Skrypt musi mieć wartość inną niż: zero (0), ciąg pusty lub $null
element, $false
który ma być wyświetlany po elemecie Where
. Aby uzyskać więcej informacji na temat oceny logicznej, zobacz about_Booleans.
Istnieje jedna definicja Where
metody .
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
Uwaga
Składnia wymaga użycia bloku skryptu. Nawiasy są opcjonalne, jeśli blok skryptu jest jedynym parametrem. Ponadto nie może istnieć odstęp między metodą a nawiasem otwierającym lub nawiasem klamrowym.
Element Expression
to scriptblock, który jest wymagany do filtrowania, mode
opcjonalny argument umożliwia dodatkowe możliwości wyboru, a numberToReturn
opcjonalny argument umożliwia ograniczenie liczby elementów zwracanych z filtru.
Dopuszczalne wartości to mode
:
- Default (0) — zwracanie wszystkich elementów
- First (1) — zwraca pierwszy element
- Last (2) — zwraca ostatni element
- SkipUntil (3) — Pomiń elementy do momentu, gdy warunek ma wartość true, zwróć wszystkie pozostałe elementy (w tym pierwszy element, dla którego warunek ma wartość true)
- Until (4) — Zwracanie wszystkich elementów do momentu, gdy warunek ma wartość true
- Split (5) — zwraca tablicę dwóch elementów
- Pierwszy element zawiera pasujące elementy
- Drugi element zawiera pozostałe elementy
W poniższym przykładzie pokazano, jak wybrać wszystkie nieparzyste liczby z tablicy.
(0..9).Where{ $_ % 2 }
1
3
5
7
9
W tym przykładzie pokazano, jak wybrać ciągi, które nie są puste.
('hi', '', 'there').Where({$_.Length})
hi
there
Default
Tryb Default
filtruje elementy przy użyciu blokady skryptu Expression
.
numberToReturn
Jeśli element jest podany, określa maksymalną liczbę elementów do zwrócenia.
# 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)
Uwaga
Zarówno tryb, jak Default
i First
tryb zwracają pierwsze (numberToReturn
) elementy i mogą być używane zamiennie.
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
Tryb SkipUntil
pomija wszystkie obiekty w kolekcji, dopóki obiekt nie przekaże filtru wyrażeń blokowych skryptu. Następnie zwraca wszystkie pozostałe elementy kolekcji bez ich testowania. Testowany jest tylko jeden element przekazujący.
Oznacza to, że zwrócona kolekcja zawiera zarówno elementy przekazujące , jak i niezlecane , które nie zostały przetestowane.
Liczba zwracanych elementów może być ograniczona przez przekazanie wartości do argumentu numberToReturn
.
$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost
Until
Tryb Until
odwraca SkipUntil
tryb. Zwraca wszystkie elementy w kolekcji, dopóki element nie przekaże wyrażenia bloku skryptu. Gdy element przekaże wyrażenie scriptblock, Where
metoda przestanie przetwarzać elementy.
Oznacza to, że otrzymasz pierwszy zestaw elementów , które nie przechodzą z Where
metody . Po przejściu jednego elementu reszta nie jest testowana ani zwracana.
Liczba zwracanych elementów może być ograniczona przez przekazanie wartości do argumentu numberToReturn
.
# 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
Uwaga
Zarówno Until
, jak i SkipUntil
działają w środowisku NIE testowania partii elementów.
Until
Metoda zwraca elementy PRZED pierwszym przekazaniem.
SkipUntil
Zwraca wszystkie elementy PO pierwszym przekazaniu, w tym pierwszy element przekazujący.
Split
Tryb Split
dzieli elementy kolekcji lub grupuje je na dwie oddzielne kolekcje. Te, które przekazują wyrażenie scriptblock, i te, które nie.
numberToReturn
Jeśli element jest określony, pierwsza kolekcja zawiera elementy przekazujące, aby nie przekraczać określonej wartości.
Pozostałe obiekty, nawet te, które przekazują filtr wyrażenia, są zwracane w drugiej kolekcji.
$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
...
Uwaga
Obie foreach
metody i where
są elementami członkowskimi wewnętrznymi. Aby uzyskać więcej informacji na temat elementów wewnętrznych, zobacz about_Instrinsic_Members
Pobieranie elementów członkowskich tablicy
Aby uzyskać właściwości i metody tablicy, takie jak Length właściwość i metoda SetValue, użyj parametru Get-Member
InputObject polecenia cmdlet.
Podczas potoku tablicy do Get-Member
programu Program PowerShell wysyła elementy pojedynczo i Get-Member
zwraca typ każdego elementu w tablicy (ignorując duplikaty).
Gdy używasz parametru InputObject , Get-Member
zwraca elementy członkowskie tablicy.
Na przykład następujące polecenie pobiera elementy członkowskie zmiennej $a
tablicy.
Get-Member -InputObject $a
Możesz również pobrać elementy członkowskie tablicy, wpisując przecinek (,) przed wartością potoku Get-Member
do polecenia cmdlet. Przecinek sprawia, że tablica jest drugim elementem w tablicy tablic. Program PowerShell potokuje tablice pojedynczo i Get-Member
zwraca elementy członkowskie tablicy. Podobnie jak w przypadku dwóch następnych przykładów.
,$a | Get-Member
,(1,2,3) | Get-Member
Manipulowanie tablicą
Elementy w tablicy można zmienić, dodać element do tablicy i połączyć wartości z dwóch tablic w trzecią tablicę.
Aby zmienić wartość określonego elementu w tablicy, określ nazwę tablicy i indeks elementu, który chcesz zmienić, a następnie użyj operatora przypisania (=
), aby określić nową wartość elementu. Aby na przykład zmienić wartość drugiego elementu w $a
tablicy (pozycja indeksu 1) na 10, wpisz:
$a[1] = 10
Możesz również użyć metody SetValue tablicy, aby zmienić wartość. Poniższy przykład zmienia drugą wartość (pozycja indeksu $a
1) tablicy na 500:
$a.SetValue(500,1)
Możesz użyć +=
operatora , aby dodać element do tablicy. W poniższym przykładzie pokazano, jak dodać element do tablicy $a
.
$a = @(0..4)
$a += 5
Uwaga
Gdy używasz +=
operatora, program PowerShell faktycznie tworzy nową tablicę z wartościami oryginalnej tablicy i wartością dodaną. Może to spowodować problemy z wydajnością, jeśli operacja jest powtarzana kilka razy lub rozmiar tablicy jest zbyt duży.
Nie jest łatwo usuwać elementy z tablicy, ale można utworzyć nową tablicę zawierającą tylko wybrane elementy istniejącej tablicy. Aby na przykład utworzyć tablicę $t
ze wszystkimi elementami w $a
tablicy z wyjątkiem wartości na pozycji indeksu 2, wpisz:
$t = $a[0,1 + 3..($a.length - 1)]
Aby połączyć dwie tablice w jedną tablicę, użyj operatora plus (+
). Poniższy przykład tworzy dwie tablice, łączy je, a następnie wyświetla wynikową połączoną tablicę.
$x = 1,3
$y = 5,9
$z = $x + $y
W rezultacie tablica $z
zawiera wartości 1, 3, 5 i 9.
Aby usunąć tablicę, przypisz wartość $null
do tablicy. Następujące polecenie usuwa tablicę w zmiennej $a
.
$a = $null
Możesz również użyć Remove-Item
polecenia cmdlet , ale przypisywanie wartości $null
jest szybsze, szczególnie w przypadku dużych tablic.
Tablice o wartości zero lub jednej
Począwszy od Windows PowerShell 3.0, kolekcja zero lub jeden obiekt ma Count właściwości i Length . Ponadto można indeksować do tablicy jednego obiektu. Ta funkcja pomaga uniknąć błędów skryptów występujących, gdy polecenie, które oczekuje kolekcji, otrzymuje mniej niż dwa elementy.
W poniższych przykładach pokazano tę funkcję.
Zero obiektów
$a = $null
$a.Count
$a.Length
0
0
Jeden obiekt
$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4
Obsługa indeksowania dla systemu.Tuple Obiektów
Program PowerShell 6.1 dodał obsługę indeksowanego dostępu do Tuple obiektów, podobnie jak w przypadku tablic. Przykład:
PS> $tuple = [Tuple]::Create(1, 'test')
PS> $tuple[0]
1
PS> $tuple[1]
test
PS> $tuple[0..1]
1
test
PS> $tuple[-1]
test
W przeciwieństwie do tablic i innych obiektów Tuple kolekcji obiekty są traktowane jako pojedynczy obiekt po przekazaniu przez potok lub przez parametry, które obsługują tablice obiektów.
Aby uzyskać więcej informacji, zobacz System.Tuple.
Wyliczenie dostępu do składowych
Począwszy od programu PowerShell 3.0, gdy używasz operatora dostępu do elementu członkowskiego, aby uzyskać dostęp do elementu członkowskiego, który nie istnieje w kolekcji list, program PowerShell automatycznie wylicza elementy w kolekcji i próbuje uzyskać dostęp do określonego elementu członkowskiego w każdym elemencie. Aby uzyskać więcej informacji, zobacz about_Member-Access_Enumeration.
Przykłady
Poniższy przykład tworzy dwa nowe pliki i przechowuje wynikowe obiekty w zmiennej tablicy $files
. Ponieważ obiekt tablicy nie ma Lastelementu członkowskiego WriteTime , wartość LastWriteTime jest zwracana dla każdego elementu w tablicy.
$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
Wyliczanie dostępu do składowych umożliwia pobieranie wartości z elementów w kolekcji, ale nie ustawianie wartości elementów w kolekcji. Przykład:
$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.
Aby ustawić wartości, należy użyć metody .
$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
Metoda set_LastWriteTime()
jest ukrytym elementem członkowskim obiektu FileInfo . W poniższym przykładzie pokazano, jak znaleźć elementy członkowskie, które mają ukrytąset
metodę.
$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;}
Przestroga
Ponieważ metoda jest wykonywana dla każdego elementu w kolekcji, należy zachować ostrożność podczas wywoływania metod przy użyciu wyliczania elementów członkowskich.