Skip to Content

IT nieuczesane.
archive

> Monthly Archives: Kwiecień 2018

MTS tata PowerShell (:


 

1oo WGUiSW – 1o lat!

już wkrótce SETNE [1oo] spotkanie WGUiSW. 1o lat spotkań. zacna liczba. chętnie podzielę się zaproszeniem, które otrzymałem (:

każdy, kto uczestniczy w spotkaniach – aktywnie, czy jako słuchacz – jest ważną częścią społeczności. o tym, że ta działalność jest ważna świadczy fakt, że niestrudzenie funkcjonuje od dekady i wciąż nie braqje ani słuchaczy ani prezenterów.

serdecznie zapraszam na kolejne, setne już spotkanie, na którym znajdzie się czas na wspominki i celebrację tej znakomitej rocznicy!

PS. nie zapomnijcie zapisać się na meetup żeby nie mieć problemów z wejściem!

eN.

przekazanie zmiennych

przekazanie zmiennej

to w jaki sposób przekazywane są zmienne – przez wartość, czy przez referencję – znacząco wpływa na to, jak łatwo/trudno będzie potem pisać skrypt, oraz żeby nie zrobić sobie krzywdy. oto jak to działa w PS.

najpierw najprostszy możliwy przykład:

co pojawi się na ekranie? będzie to:

czyli zmienna była przekazana przez wartość – $a i $b są niezależnymi zmiennymi, modyfikacja jednej, nie wpływa na drugą.

ALE

inny przykład – tym razem zmienną jest tablica:

i na ekranie pojawi się:

a to oznacza, że $b=$a jest przekazaniem referencji a nie kopią zmiennej. to hiper ważne, bo może zarówno pomóc ale i nieźle rozwalić całą logikę skryptu.

bardziej złożony scenariusz, gdzie takie przekazanie jest przydatne: „jest długa lista elementów. dla tych elementów, które nie mają wartości, trzeba wykonać jakąś [czasochłonną] operację, następnie trzeba wyeksportować całą listę”

przykładowa lista [list.csv]

prosty kawałek skryptu [test-reference.ps1]

podstawowe pytanie: co zwróci $data?

cały myk polega na tym, że:

  • importuję wszystkie dane.
  • tworzę zmienną stanowiącą ich podzbiór czyli elementy bez wartości [$data przefiltrowane -not $_.value]
  • wykonuję operacje na podzbiorze – foreach($d in $partialData)
  • i na końcu chcę wszystkie wartości, a nie tylko część, wyeksportować.

pomimo, że na końcu nie ma nigdzie przepisania $partialData z powrotem do $data, wynik jest:

dzięki temu, że $partialData tylko wskazuje na elementy tej samej tablicy, operacje wykonywały się bezpośrednio. nie muszę nic kombinować i mogę teraz zrobić po prostu „$data|export-csv”.

czasem jednak scenariusz może być zupełnie odwrotny – chcemy zrobić kopię danych i na nich się pobawić, nie wpływając na ‚master copy’. w takim przypadq można użyć kilq metod – np. klonowania:

eN.