redakcji: To pytanie ma skomplikowaną historię, ale sprowadza się do tego:
* Aby dowiedzieć się jak do wyliczyć wpisów hashtable przez ich pary klucz-wartość , patrz the accepted answer.
* Aby dowiedzieć się, jak filtr hashtable przez zbiór kluczowych wartości patrz the other answer. Jak mogę wyliczyć hashtable jako pary klucz-wartość/filtrować hashtable przez zbiór kluczowych wartości
Chyba wpadł problemu X Y ponownie, moje pierwsze pytanie było o Filtrowanie tabeli mieszania. Odkryłem, że łatwiej jest filtrować przed utworzeniem tabeli mieszania. Pytanie odpowiedziało, prawda?
Nie, problem z Y polegał na zapętleniu każdego klawisza i użyciu wartości, które pomogły mi @briantist.
Moim celem jest zapętlenie nazw kluczy, które są sygnaturami czasowymi i zaplanowanie zadania z użyciem nazwy klucza jako nazwy zadania i wyzwalacza.
tworzę tabelę hash z pliku CSV, używając Group-Object -AsHashTable -AsString
-Edycja, to warto wspomnieć, że filtrowanie CSV przed utworzeniem Hashtable tylko sprawia, że rzeczy łatwiej dół Pipeline
lub skryptu.
Jako przykład:
Import-CSV (ls -path D:\ -Filter source*.csv | sort LastWriteTime | Select -Last 1).FullName |
where {$_.TimeCorrected -ne 'ManualRebootServer'} |
group TimeCorrected -AsHashTable -AsString
Próbuję pętli nad kluczowych nazwisk i zdolny do wyświetlania nazwy klawiszy przy użyciu:
$var = Import-Csv csv123.csv | Group-Object Value1 -AsHashTable -AsString
foreach ($key in $var.Keys){"The key name is $key"}
#Create a scheduled task named and triggered based on the HashTable keyname
#test test test
foreach ($key in $var.keys){IF($key -ne 'ManualRebootServer'){"Register-ScheduledJob"}}
ja po prostu nie wiem, jak uzyskać wartości z kluczy, które mnie interesują.
Znalazłem następujące prace, ale tylko wtedy, gdy ręcznie wpisuję Nazwę klawisza. Nie jestem pewien, jak połączyć obie pętle.
($val.GetEnumerator() | Where {$_.key -eq '06-11-16 18:00'} | ForEach-Object { $_.value }).Server
Aby wyjaśnić, filtrowanie (przynajmniej w PowerShell) jest zawsze najlepiej wykonywane przed lub po lewej stronie operatora Pipeline '|', aby skrypty były wydajniejsze. – user4317867
Rzeczywiście; inaczej mówiąc: używanie natywnego filtrowania przez dostawcę za pomocą parametru "-Filter" (jeśli jest dostępny) jest zwykle znacznie szybsze niż przekazywanie niefiltrowanych danych wyjściowych przez potok, w celu umożliwienia późniejszego wykonania polecenia cmdlet 'Where-Object'. – mklement0