to pytanie pojawia się dość często, więc pomyślałem, że napiszę o nim artykuł. Jak sugeruje tytuł, pokażę jak można dodawać lub usuwać elementy do tablicy PowerShell po jej utworzeniu.
Tablice PowerShell
zacznijmy od definicji tablicy, ponieważ pochodzi ona z Dokumentacji PowerShell:
tablica jest strukturą danych zaprojektowaną do przechowywania kolekcji elementów., Elementy mogą być tego samego typu lub różnych typów.Począwszy od Windows PowerShell 3.0, zbiór zero lub jeden obiekt ma pewne właściwości tablic.
tworzenie tablicy w PowerShell jest naprawdę proste i najprawdopodobniej już to zrobiłeś, gdy na przykład uzyskasz listę użytkowników z Active Directory
$adUsers = Get-AdUser -Filter '*' -Server $adDomainController
powyższe zwróci tablicę obiektów reklam zawierających wszystkich użytkowników pasujących do używanego filtra.,
oczywiście możesz zainicjować pustą tablicę za pomocą następującej składni
$myArray = @()# Specify object type$myArray = @()
powyższe spowoduje zainicjowanie pustej tablicy, którą możemy na przykład wypełnić zapytaniem reklamowym lub dodać statyczne elementy w ten sposób
$myArray = (1,2,3,4,5)
powyższe spowoduje dodanie elementów od 1 do 5 do obiektu myarray tworząc instancję nowego obiektu o długości 5
PowerShell dodaje elementy do tablicy
mamy zobacz jak tworzyć i przypisywać wartości do tablicy, ale co jeśli chcemy dodać szósty element do MYARRAY?, Jeśli spróbujesz następującego
$myArray.Add(6)
to się nie powiedzie z następującym wyjątkiem
powyższy wyjątek jest wyrzucany jako tablica PowerShell jest zbiorem o stałym rozmiarze i błąd mówi tylko, że nie można jej rozszerzyć.,
jednym z powszechnych rozwiązań jest użycie operatora+=, jak na przykład
$myArray += 6# Print array's length$myArray.length6
podczas korzystania z operatora += to, co dzieje się pod maską, to
- PowerShell tworzy nową tablicę z tymi samymi elementami, co stara oraz nowy element
- PowerShell nadpisze istniejącą tablicę z nową zawartością
wszystko to jest przejrzyste dla użytkownika, więc nie zobaczysz żadnej różnicy.,
dodawanie elementów do tablicy – wprowadź ArrayList
Jeśli chcesz uniknąć kopiowania/przenoszenia danych, możesz utworzyć instancję myArray jako dynamiczną tablicę, która pozwoli Ci na dodawanie elementów w locie
podobnie możesz usunąć elementy z tablicy, takie jak ta
# Will corresponding item by index$myArrayList.RemoveAt(1)
uwaga: metoda remove zaakceptuje wartość elementu, więc 1 w powyższym przykładzie odnosi się do wartości, a nie do indeksu elementu.,
Cast to supported Add method printing new array ' s length
Create Array List the alternate way
powyższy przykład wywoła metodę New-Object w celu utworzenia nowej ArrayList, ale jest to stosunkowo drogie pod względem zasobów obliczeniowych, więc powyższe można przepisać jako
iv
$myArray = @()
oprócz tego, że jest krótszy, ma dodatkową zaletę, jaką jest unikanie negatywnego wpływu nowego obiektu na wydajność, a optymalizacja kodu jest zawsze dobrym pomysłem, szczególnie w przypadku większych skryptów.,34f072bc0″>
Uwagi końcowe
podczas pisania kodu, mimo że nie jest to wymagane przez PowerShell, staram się zawsze zadeklarować typ obiektu jako pomocny w Poznaniu w danym momencie właściwości i metod obsługiwanych przez obiekt, więc zawsze zapisuję
$myString = 'Some Text'
zamiast
$myString = 'Some Text'
nie jest to wymagane przez PowerShell, ale uważam, że pomaga to w czytelności kodu i upraszcza pracę z obiektem zadeklarowanym 800/900 linii w kodzie bez konieczności przeskakiwania z powrotem do deklaracji zmiennej.,
Leave a Reply