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, która jest 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 o wartości zero lub jeden obiekt 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 za pomocą operatora przypisania ( = ).

Aby na przykład utworzyć tablicę o nazwie zawierającą siedem $A liczbowych (int) wartości 22, 5, 10, 8, 12, 9 i 80, wpisz:

$A = 22,5,10,8,12,9,80

Przecinka można również użyć do zainicjowania tablicy pojedynczego elementu przez umieszczenie przecinka przed pojedynczym elementem.

Aby na przykład utworzyć tablicę pojedynczego elementu o nazwie $B zawierającą pojedynczą wartość 7, wpisz:

$B = ,7

Tablicę można również utworzyć i zainicjować za pomocą 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 danych $A tablicy, wpisz:

$A.GetType()

Aby utworzyć silnie typizną tablicę, czyli tablicę, która może zawierać tylko wartości określonego typu, rzutuj zmienną jako typ tablicy, taki jak string[], long[] lub int32[]. Aby rzutować tablicę, poprzedzić nazwę zmiennej typem tablicy ujętym w nawiasy kwadratowe. Aby na przykład utworzyć 32-bitową tablicę liczb całkowitych o nazwie zawierającą cztery liczby całkowite $ia (1500, 2230, 3350 i 4000), wpisz:

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

W rezultacie $ia tablica może zawierać tylko liczby całkowite.

W programie .NET można tworzyć tablice rzutowania na dowolny obsługiwany typ. Na przykład obiekty pobierane w celu Get-Process reprezentowania procesów mają typ System.Diagnostics.Process. Aby utworzyć silnie typiętą 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 w tej tablicy. Bez względu na to, co tworzy instrukcja wewnątrz operatora, operator umieszcza ją w tablicy. Nawet jeśli istnieje zero lub jeden obiekt.

Składnia operatora tablicy jest następująca:

@( ... )

Operator tablicy umożliwia utworzenie tablicy o wartości zero lub jednego obiektu. Na przykład:

$a = @("Hello World")
$a.Count
1
$b = @()
$b.Count
0

Operator tablicy jest przydatny w skryptach podczas uzyskiwania obiektów, ale nie wiadomo, ile obiektów można uzyskać. Na 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 korzystanie z nich

Odczytywanie tablicy

Do tablicy można odwoływać się przy użyciu jej nazwy zmiennej. Aby wyświetlić wszystkie elementy w tablicy, wpisz nazwę tablicy. Na przykład przy założeniu, $a że jest tablicą zawierającą liczby całkowite 0, 1, 2 do 9, wpisując:

$a
0
1
2
3
4
5
6
7
8
9

Elementy tablicy można odwoływać się przy użyciu indeksu zaczynającego się od pozycji 0. Ujmij numer indeksu w nawiasy kwadratowe. Aby na przykład wyświetlić pierwszy element w $a tablicy, wpisz:

$a[0]
0

Aby wyświetlić trzeci element w $a tablicy, wpisz:

$a[2]
2

Część tablicy można pobrać za pomocą operatora zakresu dla indeksu. Aby na przykład pobrać od drugiego do piątego elementy tablicy, należy wpisać:

$a[1..4]
1
2
3
4

Liczby ujemne liczą się od końca tablicy. Na przykład "-1" odnosi się do ostatniego elementu tablicy. Aby wyświetlić trzy ostatnie elementy tablicy, w kolejności rosnącej indeksu, wpisz:

$a = 0 .. 9
$a[-3..-1]
7
8
9

Jeśli wpiszemy 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 przechodzi od granicy końcowej do początku tablicy.

$a = 0 .. 9
$a[2..-2]
2
1
0
9
8

Ponadto częstym błędem jest założenie, że odnosi się do $a[0..-2] wszystkich elementów tablicy, z wyjątkiem ostatniego. Odwołuje się do pierwszego, ostatniego i od drugiego do ostatniego elementów w tablicy.

Można użyć operatora plus ( ), aby połączyć zakresy z + listą elementów w tablicy. Aby na przykład wyświetlić elementy w pozycjach indeksu od 0, 2 i 4 do 6, wpisz:

$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6

Ponadto, aby wyświetlić wiele zakresów i poszczególnych elementów, można użyć operatora plus. Aby na przykład wyświetlić listę elementów od zera do dwóch, od czterech do sześciu oraz element o ósmym typie pozysowym:

$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8

Iteracje nad elementami tablicy

Można również użyć konstrukcji pętli, takich jak , i pętli, aby odwoływać się ForEach For do elementów w While tablicy. Aby na przykład użyć pętli ForEach do wyświetlenia elementów w $a tablicy, wpisz:

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

Pętla iteruje po tablicy i zwraca każdą wartość w tablicy do momentu osiągnięcia Foreach końca tablicy.

Pętla For jest przydatna w przypadku zwiększania 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

Pętli można używać While do wyświetlania elementów w tablicy do momentu, gdy zdefiniowany warunek nie będzie już prawdziwy. 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

Count lub Length lub LongLength

Aby określić, ile elementów znajduje się w tablicy, użyj Length właściwości lub jej Count aliasu. Longlength jest przydatne, jeśli tablica zawiera więcej niż 2 147 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 wtedy, gdy myślisz, że budować 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 tworzymy tablicę jednowymiarową zawierającą inne tablice. Ta tablica jest również znana jako tablica oflagowana. Właściwość Rank udowodniła, że jest to jednowymiarowa. Aby uzyskać dostęp do elementów w tablicy oflagowanej, indeksy muszą być w oddzielnych nawiasach kwadratowych ( [] ).

$a rank: 1
$a length: 3
$a[2] length: 348
Process $a[2][1]: AcroRd32

Tablice wielowymiarowe są przechowywane w kolejności głównych wierszy. 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, należy oddzielić indeksy za pomocą przecinka ( ) w jednym , zestawie nawiasów kwadratowych ( [] ).

Niektóre operacje na tablicy wielowymiarowej, takie jak replikacja i konkatenacja, wymagają spłaszczenia tej tablicy. Spłaszczenie zmienia tablicę w tablicę 1-wymiarową nieprzetrenowanej tablicy. Wynikowa tablica przyjmuje wszystkie elementy w kolejności głównych wierszy. 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ą, $c że jest to tablica 1-wymiarowa zawierająca elementy z $a i w kolejności głównych $b wierszy.

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 tablicą obiektów .

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

W tym przykładzie $intA typ jest jawnie wpisyowany tak, aby zawierał liczby całkowite.

[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0

ForEach

Umożliwia iterować wszystkie elementy w tablicy i wykonywać 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 scriptblock jest jedynym parametrem. Ponadto nie może być spacji między metodą a nawiasem otwierającym ani nawiasem klamrowy.

W poniższym przykładzie pokazano, jak używać ForEach metody . W tym przypadku intencją jest wygenerowanie wartości kwadratowej elementów w tablicy.

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

Podobnie jak parametr parametru , parametr umożliwia przekazywanie tablicy argumentów do bloku skryptu skonfigurowanego -ArgumentList ForEach-Object do ich arguments akceptowania.

Aby uzyskać więcej informacji o zachowaniu argumentList, zobacz about_Splatting.

ForEach(typ convertToType)

Metoda może służyć do szybkiego rzutowania elementów na inny typ. W poniższym przykładzie pokazano, jak przekonwertować listę dat ForEach ciągu 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 może również służyć do szybkiego pobierania lub ustawienia wartości ForEach 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[] arguments)

Lastly, ForEach metody mogą służyć do wykonywania metody dla każdego elementu w kolekcji.

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

Podobnie jak parametr , parametr umożliwia przekazywanie tablicy wartości do bloku skryptu skonfigurowanego -ArgumentList ForEach-Object do ich Arguments akceptowania.

Uwaga

Począwszy od Windows PowerShell 3.0 pobieranie właściwości i wykonywanie metod dla każdego elementu w kolekcji można również wykonać przy użyciu "Metody skalarnych obiektów 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), pusty ciąg lub element musi być pokazywany $false $null po Where elemencie . Aby uzyskać więcej informacji na temat oceny wartości logicznych, zobacz about_Booleans.

Istnieje jedna definicja metody Where .

Where(scriptblock expression[, WhereOperatorSelectionMode mode
                            [, int numberToReturn]])

Uwaga

Składnia wymaga użycia bloku skryptu. Nawiasy są opcjonalne, jeśli scriptblock jest jedynym parametrem. Ponadto nie może być spacji między metodą a nawiasem otwierającym ani nawiasem klamrowy.

Parametr to scriptblock wymagany do filtrowania, opcjonalny argument umożliwia dodatkowe możliwości wyboru, a opcjonalny argument umożliwia ograniczenie liczby elementów zwracanych Expression mode z numberToReturn filtru.

Dopuszczalne wartości dla mode to:

  • Default (0) — zwracanie wszystkich elementów
  • First (1) — zwracanie pierwszego elementu
  • Last (2) — zwraca ostatni element
  • SkipUntil (3) — pomiń elementy do momentu, aż warunek będzie prawdziwy, zwraca pozostałe elementy
  • 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 liczby nieparzyste z tablicy.

(0..9).Where{ $_ % 2 }
1
3
5
7
9

W tym przykładzie popisano, jak wybrać ciągi, które nie są puste.

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

Default

Tryb Default filtruje elementy przy użyciu Expression scriptblock.

Jeśli zostanie numberToReturn 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 Default tryb, jak First i tryb zwracają pierwsze elementy numberToReturn () 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 pomija wszystkie obiekty w kolekcji, dopóki obiekt nie przejdzie przez SkipUntil filtr wyrażenia bloku skryptu. Następnie zwraca WSZYSTKIE pozostałe elementy kolekcji bez ich testowania. Testowany jest tylko jeden element przekazujący.

Oznacza to, że zwracana kolekcja zawiera zarówno elementy przekazujące, jak i nieprzekazywające, które NIE zostały przetestowane.

Liczbę zwracanych elementów można ograniczyć, przekazując wartość do numberToReturn argumentu.

$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 przejdzie przez wyrażenie blokowe skryptu. Gdy element przekazuje wyrażenie scriptblock, Where metoda zatrzymuje przetwarzanie elementów.

Oznacza to, że otrzymujesz pierwszy zestaw nieprzekazywalnych elementów z Where metody . Po zakończeniu jednego elementu pozostałe NIE są testowane ani zwracane.

Liczbę zwracanych elementów można ograniczyć, przekazując wartość do numberToReturn argumentu.

# 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 działają SkipUntil lokalnie, NIE testując partii elementów.

Until Zwraca elementy PRZED pierwszym przebiegu.

SkipUntil Zwraca wszystkie elementy po pierwszym przebiegu, w tym pierwszy element przekazujący.

Split

Tryb Split dzieli elementy kolekcji lub grupuje je na dwie oddzielne kolekcje. Te, które przekażą wyrażenie scriptblock, i te, które tego nie robią.

Jeśli określono wartość , pierwsza kolekcja zawiera elementy przekazujące, aby numberToReturn nie przekraczać określonej wartości.

Pozostałe obiekty, nawet te, które PRZEKAŻĄ filtr wyrażeń, 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

Metody foreach i where są elementami wewnętrznymi. Aby uzyskać więcej informacji na temat wewnętrznych elementów członkowskich, zobacz about_Instrinsic_Members

Uzyskiwanie elementów członkowskich tablicy

Aby uzyskać właściwości i metody tablicy, takie jak właściwość i metoda Length SetValue, użyj parametru InputObject polecenia Get-Member cmdlet .

Podczas potoku tablicy do programu program PowerShell wysyła elementy po jednym na raz i zwraca typ każdego elementu w tablicy Get-Member Get-Member (ignorując duplikaty).

W przypadku użycia parametru InputObject funkcja 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

Elementy członkowskie tablicy można również pobrać, wpisując przecinek (,) przed wartością, która jest potokowana do Get-Member polecenia cmdlet. Przecinek sprawia, że tablica jest drugim elementem w tablicy tablic. Program PowerShell potokuje tablice po jednym na raz i Get-Member zwraca elementy członkowskie tablicy. Podobnie jak w dwóch następnych przykładach.

,$a | Get-Member

,(1,2,3) | Get-Member

Manipulowanie tablicą

Możesz zmienić elementy w tablicy, 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ść dla = 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ść. W poniższym przykładzie druga wartość tablicy (pozycja indeksu 1) jest $a zmieniana 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 $a tablicy.

$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 usunąć elementy z tablicy, ale można utworzyć nową tablicę zawierającą tylko wybrane elementy istniejącej tablicy. Aby na przykład utworzyć tablicę ze wszystkimi elementami w tablicy z wyjątkiem wartości na pozycji $t $a 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 $z tablica zawiera wartości 1, 3, 5 i 9.

Aby usunąć tablicę, przypisz do $null tablicy wartość . Następujące polecenie usuwa tablicę w $a zmiennej .

$a = $null

Można również użyć polecenia cmdlet , ale przypisanie wartości jest Remove-Item $null szybsze, szczególnie w przypadku dużych tablic.

Tablice zerowe lub jedno

Począwszy od Windows PowerShell 3.0, kolekcja o wartości zero lub jeden obiekt ma właściwość Count Length i . Ponadto można indeksować do tablicy jednego obiektu. Ta funkcja pomaga uniknąć błędów skryptów, które występują, gdy polecenie, które oczekuje kolekcji, pobiera 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 — obiekty

W programie PowerShell 6.1 dodano obsługę indeksowanego dostępu Tuple do obiektów, podobnie jak w przypadku tablic. Na 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 kolekcji obiekty są traktowane jako pojedynczy obiekt, gdy są przekazywane przez potok lub przez parametry, które Tuple obsługują tablice obiektów.

Aby uzyskać więcej informacji, zobacz System. Tuple .

Wyliczenie członków

Wyliczenie elementów członkowskich umożliwia pobieranie wartości właściwości ze wszystkich elementów członkowskich kolekcji. W przypadku użycia operatora dostępu do elementu członkowskiego ( ) z nazwą elementu członkowskiego w obiekcie kolekcji, takim jak tablica, jeśli obiekt kolekcji nie ma elementu członkowskiego tej nazwy, elementy kolekcji są wyliczane, a program PowerShell szuka tego elementu członkowskiego w każdym z . elementów. Dotyczy to zarówno elementów członkowskich właściwości, jak i metody.

Poniższy przykład tworzy dwa nowe pliki i przechowuje wynikowe obiekty w zmiennej tablicowej $files . Ponieważ obiekt tablicy nie ma elementu Last członkowskiego WriteTime, wartość Last WriteTime 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

Wyliczenie elementów członkowskich może służyć do pobierania wartości z elementów w kolekcji, ale nie może służyć do ustawienia wartości elementów w kolekcji. Na 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 członkiem 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 wyliczenia elementów członkowskich.

Zobacz też