Nota del redattore: Questa domanda ha una storia complicata, ma si riduce a questo:
* Per imparare come elencare le voci di una tabella hash dalle sue coppie di valori-chiave , vedere the accepted answer.
* per imparare a filtro una tabella hash da una collezione di valori chiave, vedere the other answer. Come posso elencare una tabella hash come coppie chiave-valore/filtrare una tabella hash da un insieme di valori chiave
penso Sono caduto nella problema X Y di nuovo, la mia domanda iniziale era su come filtrare una tabella hash. Ho scoperto che è più facile filtrare prima di creare la tabella hash. Domanda risposta, giusto?
No, il problema Y era il looping di ogni chiave e l'utilizzo dei valori con cui @briantist mi ha aiutato.
Il mio obiettivo è eseguire il looping dei nomi delle chiavi, che sono timestamp, e pianificare un'attività utilizzando il nome della chiave come nome dell'attività e trigger.
Sto creando una tabella di hash da un file CSV utilizzando Group-Object -AsHashTable -AsString
-edit, vale la pena ricordare qui che il filtraggio del CSV prima di creare il HashTable fa solo le cose più facili lungo il Pipeline
o lo script.
Per fare un esempio:
Import-CSV (ls -path D:\ -Filter source*.csv | sort LastWriteTime | Select -Last 1).FullName |
where {$_.TimeCorrected -ne 'ManualRebootServer'} |
group TimeCorrected -AsHashTable -AsString
Sto cercando di ciclo sui nomi chiave e in grado di visualizzare i nomi dei tasti utilizzando:
$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"}}
io non sono solo sicuro di come ottenere i valori delle chiavi che mi interessano.
Ho trovato i seguenti lavori, ma solo quando inserisco manualmente il nome di una chiave. Sono solo sicuro di come combinare entrambi i loop.
($val.GetEnumerator() | Where {$_.key -eq '06-11-16 18:00'} | ForEach-Object { $_.value }).Server
Solo per offrire una spiegazione, il filtraggio (almeno in PowerShell) viene sempre eseguito prima o alla sinistra dell'operatore Pipeline '|' per rendere gli script più efficienti. – user4317867
Infatti; per dirla in modo diverso: l'utilizzo del filtro nativo del provider con il parametro '-Filter' (se disponibile) è in genere molto più rapido del passaggio dell'output non filtrato attraverso la pipeline per consentire al cmdlet' Where-Object' di eseguire il filtro in un secondo momento. – mklement0