PowerShell Hashtable Ultimate Průvodce s příklady
Hashtable PowerShellu je sbírka položek a jejich hodnot. Položky se označují jako klíče. Navíc má každý klíč v hashovací tabulce ekvivalentní hodnotu.
Hashtable PowerShellu je v podstatě „tabulka“ úložiště klíč/hodnota.
V této S zóně vás naučím vše, co potřebujete vědět o hashtables PowerShell. První část zkoumá rozdíl mezi Hashtable a Array.
Poté ve druhé části pomocí Staňte se členem Cmdlet, vezmu vás za kapotu hashtables.
Nakonec prozkoumám různé způsoby použití hashtables ve skriptování.
Procházet témata příspěvků
- PowerShell Hashtable vs PowerShell Array
- PowerShell Hashtable metody a vlastnosti
- Jak vytvořit prázdnou hashtable PowerShell a přidat klíče
- Jak vytvořit hashtable PowerShell s více hodnotami a jedním klíčem
- Jak iterovat hashtable PowerShell s ForEach Loop
- Jak přizpůsobit sestavu pomocí hashtable PowerShell a výběru objektu
- Jak exportovat hashtable PowerShell do CSV
- Reference a další čtení
PowerShell Hashtable vs PowerShell Array
Než se ponořím do Hashtables, chci vysvětlit rozdíl mezi Hashtables a Arrays. Toto rozlišení je důležité, protože tyto dva pojmy se mohou snadno zaměnit.
V úvodu této příručky jsem vysvětlil, že hashtable je úložiště klíčů a hodnot. Navíc hashtable je jako tabulka s klíči a hodnotami.
Naopak PowerShell Array je kolekce hodnot nebo objektů.
Primární rozdíl mezi hashovací tabulkou PowerShellu a polem PowerShell je v tom, že hashovací tabulka je kolekce položek (klíčů) a jejich hodnot – zatímco pole je pouze seznam položek.
Pro rychlý příklad jsou níže uvedené kódy příklady hashtables a pole – první kód vytvoří hashtables, zatímco druhý kód vytvoří pole:
|_+_| |_+_| Z příkladů kódu můžete vidět, že zatímco hashtable je uzavřen v {}, pole je uzavřeno v ().Snímek obrazovky níže zobrazuje výsledky těchto dvou kódů.
Část snímku obrazovky označená (1) je výsledkem hashovací tabulky. Viděli jste pár klíč/hodnota?
Ve výše uvedeném příkladu má klíč Root hodnotu C:UsersvictoDocuments. Klíč PSProvider má také hodnotu nazvanou FileSystem.
Nakonec má Name hodnotu Document.
Kromě toho část snímku obrazovky označená (2) obsahuje výsledek kódu pole. Jak bylo vysvětleno dříve, je to pouze seznam.
PowerShell Hashtable metody a vlastnosti
V úvodu jsem slíbil, že vás vezmu za kapotu PowerShell Hashtables. To je ono!
V této části vás naučím, jak používat rutinu Get-Member Cmdlet, abyste se podívali za hashtables.
Když převedete výsledek hashtable PowerShell do Staňte se členem , budete moci zkontrolovat dostupné Metody a Vlastnosti z Hashtable.
Vraťme se k našemu prvnímu rychlému příkladu výše:
|_+_|Zkopírujte kód do nového dokumentu PowerShell ISE. Poté spusťte kód.
Poté, abyste viděli dostupné Metody a Vlastnosti v této hashtable spusťte tento příkaz na stejném PowerShell ISE.
|_+_|Chcete-li spustit výše uvedený příkaz, vložte jej pod poslední kód. Poté jej zvýrazněte a stiskněte F8 nebo klikněte na zvýrazněnou ikonu.
Příkaz zobrazí výsledky v podokně konzoly PowerShell.
Prozatím se podívejte na výsledek. Má TypeName: System.Collections.Hashtable.
To potvrzuje, že objekty vložené do rutiny Get-Member jsou hashtable!
V následujících podsekcích této části vám ukážu, jak používat běžné metody a vlastnosti hashtable PowerShell.
Jak přidat nebo odebrat položky do existující hashtable
V této části se naučíte přidávat nové položky do existující hashovací tabulky PowerShellu. Kromě toho se také dozvíte, jak odebrat položku z existující hashovací tabulky PowerShellu.
Než se do toho vrhnu, chci zmínit, že můžete vytvořit i prázdný hashtable. Poté přidejte klíče/hodnoty do hashtable – více o tom později.
Zpět k přidávání nebo odebírání položek do stávajících hastable PowerShell – když jsme spustili $hashtable | Staňte se členem jednou z metod zobrazených ve výsledku je Přidat . Existuje také metoda, Odstranit .
Podívejte se na zvýrazněné části snímku obrazovky níže:
Než vám ukážu, jak používat tyto dvě metody, podívejme se na původní kód hashtable PowerShell:
|_+_|Hashovací tabulka má 3 položky. V tomto příkladu přidám další klíč s názvem Popis s hodnotou Maps do mé složky ‚Moje dokumenty‘.
K dokončení tohoto úkolu spustím příkaz níže (na stejné konzole PowerShell ISE, na které jsem spustil předchozí příkazy)
|_+_| Všimněte si, jak jsem použil Add Metoda . Přidám tečku (.) vedle proměnné, která obsahuje hashovací tabulku. Pak jsem zahrnul metodu, Přidat , následován (). Nakonec jsem zahrnul nový pár klíč/hodnota, který chci přidat do hashtable.Po spuštění příkazu zvýrazněním potvrďte, že byl přidán další klíč $hashtable a stiskněte F8.
|_+_|Zde je snímek obrazovky s výsledkem – potvrzující, že byl přidán nový klíč/hodnota.
Stejný přístup můžete použít k odebrání hodnoty z hashtable PowerShell.
Chcete-li odstranit poslední klíč, který jsme přidali do hashtable, spusťte příkaz podobný poslednímu příkazu. Tentokrát však nahradit Přidat Metoda s Odstranit Metoda.
Zde je příkaz:
|_+_| The Odstranit Metoda zahrnuje pouze klíč . Nemusíte přidávat klíč hodnota v příkazu.Nejprve spusťte výše uvedený příkaz. Poté zvýrazněním potvrďte, že byl klíč odstraněn $hashtable a stiskněte F8.
|_+_|Výsledek příkazu potvrzuje, že klíč byl odstraněn!
Jak zkontrolovat, zda hashtable PowerShell obsahuje klíč
Když jsme převedli hastable níže do Staňte se členem Rutina, jednou ze zobrazených metod je ContainsKey Metoda – viz snímek obrazovky níže.
|_+_|
The ContainsKey Metodu lze použít mnoha způsoby. Jednou z běžných aplikací této metody je však její použití ke kontrole, zda klíč v hashtable existuje, a pokud ne, přidejte klíč.
Další aplikace ContainsKey Metodou hashtable PowerShell je jednoduše jej použít ke kontrole, zda v hashtable existuje název klíče.
jak přidat kodi do smart tv
Chcete-li zkontrolovat, zda existuje klíč v hashtable PowerShell, pomocí ContainsKey Metoda, spusťte příkaz níže:
|_+_|Tento příkaz zkontroluje, zda v hashtable uložené v proměnné $hashtable existuje klíč s názvem Popis. Výsledek příkazu zobrazí False.
Abychom před přidáním do hashtable PowerShellu zkontrolovali, zda klíč Description existuje, budeme k předchozímu příkazu potřebovat další řádek kódů.
Zde je vylepšený kód.
|_+_|Kód používá podmíněný příkaz IF ke kontrole, zda v hashovací tabulce existuje klíč s názvem Popis.
Pak, pokud je výsledek False, v části provádění příkazu příkazu IF použijeme Přidat Metoda hashtable PowerShell pro přidání klíče do hashtable.
Pokud však klíč v hashtable existuje, v části Else příkazu IF zobrazíme zprávu informující osobu, která spustila příkaz, že klíč již existuje.
Po spuštění posledního příkazu zvýrazněte $hashtable proměnnou a spustit ji samostatně. Výsledek potvrzuje, že klíč Popis byl přidán do proměnné, protože neexistoval.
Chcete-li otestovat, zda tento skript funguje, spusťte jej znovu…
|_+_|Tentokrát skript nepřidal klíč. Místo toho vrátil informace v části Else příkazu IF – Klíč již v hashtable existuje .
Jak převést hashtable PowerShell na řetězec
Prvním krokem k převodu hashtable PowerShell na řetězec je vrácení hodnot klíčů v hashtable. Jinými slovy, převedete hashtable PowerShell na pole PowerShell.
Chcete-li vrátit hodnoty v hashovací tabulce, zavolejte Hodnoty vlastnost hashtable.
Zde je příkaz, který vrací hodnoty v hashtable:
|_+_|Jakmile vrátíte hodnoty v hashtable PowerShell, dalším krokem je převedení $hashtable.Values do Out-String Příkaz…
|_+_| Později v této příručce oceníte důležitost převodu hashtable PowerShell na řetězec. Chcete-li vidět praktickou aplikaci tohoto skriptu v reálném světě SysAdmin, čtěte dále.Jak používat PowerShell Hashtable GetEnumerator Metoda
Další důležitou metodou hashtable PowerShell je GetEnumerator Metoda.
Tuto metodu můžete použít k oddělení klíčů v hashtable do jednotlivých řetězců. Zde je ukázkový příkaz GetEnumerator Metoda hashtable:
|_+_|Jak je vidět z výsledku výše uvedeného příkazu, klíče a hodnoty se vracejí v jednotlivých hlavičkách. Teď mě nenapadá žádná aplikace, ale pokud někdy potřebujete rozdělit klíče v hashtable PowerShell, víte, jak na to!
Jak počítat hashtable položky PowerShellu
Existuje ještě další užitečná hashovatelná vlastnost, Počet . Jak název napovídá, tato vlastnost vrací počet klíčů v hashovací tabulce.
Jako Hodnoty Vlastnost, chcete-li zavolat vlastnost Count, použijte příkaz podobný tomu níže:
|_+_|Příkaz potvrzuje, že hashtable $hashtable má 4 klíče.
Jak vytvořit prázdnou hashtable PowerShell a přidat klíče
Dosud se všechny příklady v této S zóně zaměřovaly na manipulaci hashtable PowerShell s existujícími klíči. V této části se dozvíte, jak vytvořit prázdný hashtable.
Poté přidejte klíče do hashtable.
Chcete-li vytvořit prázdnou hashtable PowerShell, jednoduše zadejte @ znak, za nímž následuje {} závorky. Zde je příklad prázdné hashtable uložené v proměnné, Prázdná tabulka hash :
|_+_|Chcete-li potvrdit, že je hashovací tabulka vytvořena bez hodnot, spusťte předchozí příkaz. Poté spusťte proměnnou samostatně.
|_+_|Dalším krokem je použití Přidat metoda, která je popsána dříve v této příručce, pro přidání klíčů/hodnot do hashtable. V tomto příkladu přidám klíč, tzv název , s hodnotou Dokument .
Zde je příkaz k provedení tohoto úkolu.
|_+_|Nakonec, abyste potvrdili, že hodnoty byly úspěšně přidány, spusťte proměnnou $Emptyhashtable:
|_+_|Poslední příkaz potvrzuje, že hodnoty byly přidány úspěšně:
Jak vytvořit hashtable PowerShell s více hodnotami a jedním klíčem
Ve všech příkladech, které jsme dosud probrali, má hashtable PowerShell jeden pár klíč/hodnota. Existují však okolnosti, kdy možná budete potřebovat mít jeden klíč v hashtable s více hodnotami.
V tomto případě chcete efektivně vytvořit hashtable s poli jako hodnotami.
Pro začátek si myslím, že je lepší ukázat vám kódy, které jsem použil k rozlišení hashtable od pole.
|_+_| |_+_|Chcete-li tedy vytvořit hashtable PowerShell s jedním klíčem a více hodnotami, spusťte skript podobný tomuto:
|_+_|Ve skriptu výše LogName je hashtable key, zatímco hodnoty System, Application a Security jsou přiřazeny ke klíči. Efektivně jsme vytvořili jeden hastable klíč s více hodnotami.
Chcete-li vypsat jednotlivé hodnoty v LogName klíč, spusťte příkaz níže:
|_+_|Část níže uvedeného snímku obrazovky označená (1) je výsledkem hashtable, $hashtableWithArrays . Kromě toho část označená (2) ukazuje výsledek testu $hashtableWithArrays.Values příkaz.
Pokud jste obeznámeni s protokoly událostí systému Windows – systém, aplikace a zabezpečení – jsou názvy protokolů událostí systému Windows.
V další části vám ukážu, jak používat smyčku PowerShell ForEach k iteraci výše uvedené hashovací tabulky – a spuštění Get-EventLog příkaz na těchto 3 protokolech událostí – pomocí jediného skriptu PowerShell.
Jak iterovat hashtable PowerShell s ForEach Loop
V poslední části jsem vytvořil hashtable PowerShell s jedním klíčem s více hodnotami.
Pro příklad v této části jsem změnil proměnnou, která ukládala hashtable LogNameKeys . Zde je aktualizovaný skript.
|_+_|V této sekci vás naučím používat Pro každého procházet hodnoty uložené v LogName klíč a spusťte Get-EventLog příkaz.
Pro rychlý opakovací kurz o PowerShell ForEach je níže uvedena obecná syntaxe příkazu PowerShell ForEach:
|_+_|Pokud použijete výše uvedenou syntaxi na náš LogNames hashtable, aktualizovaný příkaz bude vypadat takto:
Řádky začínající # jsou komentáře PowerShellu. |_+_|První část skriptu je stejný skript, který vytváří hashtable PowerShell s jedním klíčem s více hodnotami. Zde je skript:
|_+_|Ve druhé části skriptu jsem převedl hodnoty uložené v ($LogNameKeys.Values) na řetězce a výsledek uložil do jiné proměnné, LogNameKeysAsStrings .
|_+_|Nakonec ve třetí části skriptu je zavedena smyčka ForEach:
|_+_|V této části skriptu říkáme PowerShellu, aby převzal každou hodnotu uloženou v LogName klíč ( $LogNameKeysAsStrings ) – tuto individuální hodnotu dočasně uloží do proměnné LogNameKey – pak použijte časovou proměnnou ke spuštění Get-EventLog příkaz.
Zahrnul jsem Nejnovější parametru Get-EventLog příkaz s hodnotou 5, takže příkaz vrátí posledních 5 záznamů každého protokolu událostí. Když se podíváte na skript PowerShellu, může vypadat složitě. Pokud se však podíváte pozorně, je to obvykle velmi snadné.Nyní zkopírujte níže uvedený skript do nového dokumentu PowerShell ISE a spusťte jej.
Otevřete PowerShell ISE jako správce. Pokud neotevřete PowerShell ISE jako správce, obdržíte chybové zprávy o přístupu. |_+_|Níže uvedený snímek obrazovky zobrazuje výsledek skriptu. V podokně výsledků je 15 řádků – představuje 5 protokolů událostí systému, aplikace a zabezpečení.
Jak přizpůsobit sestavu pomocí hashtable PowerShell a výběru objektu
V poslední části jsme vytvořili skript PowerShell, který stáhne zprávu protokolu událostí systému Windows. Zde je snímek obrazovky zprávy
Výchozí výstup skriptu má 5 sloupců – Index , Čas , EntryType , Zdroj , ID instance , a Zpráva . Pokud to posíláte jako zprávu, možná budete chtít změnit názvy sloupců na názvy, které budou snadno srozumitelné.
Zde je skript z poslední části.
Scénář byl mírně upraven. Nyní mám proměnnou, EventLogReport který ukládá výstup smyčky ForEach. Proč je to nutné, vysvětlím později. |_+_|Chcete-li upravit názvy záhlaví sloupců z tohoto skriptu, použijeme kanál Get-EventLog příkaz k a Select-Object příkaz.
Poté vytvořte hashtable PowerShell v rámci Select-Object příkaz, který upravuje názvy sloupců. Zde je upravený skript, který provádí kouzlo.
|_+_|Scénář se zdá mnohem složitější, než ve skutečnosti je. Pokud se však zaměříte na část skriptu po Select-Object, bude snadné rozpoznat rozdíl mezi tímto skriptem a předchozí kopií.
Konkrétně jsem zahrnul hashtables do Select-Object blok kódu. Každá hashtable přizpůsobuje výstup Get-EventLog příkaz.
Zde je ukázka hashtable z Select-Object blok:
|_+_|Jako obvykle má hashtable PowerShell dva prvky. Klíčem je název , hodnota je Výraz .
Další důležitá věc, kterou je třeba poznamenat, je, že na konci každého hashtable v Select-Object bloku, je tam čárka (,).
Nakonec zde je výsledek konečného skriptu v PowerShellu:
Dříve jsem slíbil, že vysvětlím, proč jsem se představil $EventLogReport proměnnou pro uložení výstupu smyčky ForEach. Bez této proměnné bude konečný výsledek zobrazovat 3 jednotlivé výsledky pro každý ze 3 protokolů událostí. Uložením celých výsledků do proměnné jsem však mohl tuto proměnnou přenést do Format-Table – to zobrazí celý výsledek jako jedinou tabulku. Zde je příkaz, který provedl kouzlo. |_+_|Jak exportovat hashtable PowerShell do CSV
V této poslední části se dozvíte, jak exportovat hashtable PowerShell do CSV.
V mém prvním příkladu pro tuto sekci vám ukážu, jak exportovat tuto hashtabe do CSV.
|_+_|Chcete-li úspěšně exportovat tuto hashtable PowerShell do souboru CSV, musíte použít GetEnumerator Metoda (diskutována dříve) pro výpis hodnot. V opačném případě nebudou skutečné páry klíč/hodnota exportovány.
Zde je upravený skript, který exportuje hashovací tabulku uloženou v hashtable proměnné do souboru CSV.
|_+_|V představení skript níže:
|_+_|Skript obsahuje GetEnumerator Metoda v hashtable. Poté potrubím výstup do Select-Object příkaz.
Nakonec jsem potrubí výstup Select-Object příkaz k Export-Csv příkaz. Chcete-li si přečíst více o tom, jak používat Export-Csv Rutina, přečtěte si naši příručku – Powershell NoTypeInformation: Aplikace a příklady .
Když spustíte tento skript, vytvoří soubor CSV s názvem hashtable.csv , ve vámi zadané cestě. Viz snímek obrazovky níže pro výstup souboru CSV.
|_+_|
V mém druhém příkladu exportuji výstup skriptu, který jsme vytvořili v poslední sekci – skript protokolu událostí – do souboru CSV.
ipod se nezobrazuje v itunes
Zde je scénář. Pro export sestavy do CSV jsem přidal kód pod tento na konec tohoto skriptu.
|_+_| |_+_|Kód přenáší výstup z Pro každého smyčka – uloženo v EventLogReport proměnná – k Příkaz Export-Csv . Vygenerovaný soubor CSV je zobrazen na níže uvedeném snímku obrazovky.
To je vše – komplexní průvodce hashtable PowerShell! Doufám, že vám to pomohlo?
Pokud vám to pomohlo, hlasujte Ano na otázku Byl tento příspěvek užitečná níže.
Případně můžete položit otázku, zanechat komentář nebo poskytnout další zpětnou vazbu pomocí formuláře Zanechat odpověď, který najdete na konci této stránky.
A nakonec, pro další PowerShell tech S Zones, navštivte naši stránku průvodce Windows PowerShell How-To. Velmi užitečná vám může být také naše stránka Práce z domova.


