PowerShell Hashtable Ultimate -opas esimerkkeineen
PowerShell-hashtable on kokoelmaesineet ja niiden arvot. Tavaroita kutsutaan avaimille. Lisäksi jokaisella hash-taulukon avaimella on vastaava arvo.
Pohjimmiltaan PowerShell-hashtable on avain-/arvosäilön 'taulukko'.
Tässä S-vyöhykkeessä opetan sinulle kaiken, mitä sinun tulee tietää PowerShell-hashtableeista. Ensimmäinen osa tutkii eroa Hashtable- ja Array-taulukon välillä.
Käytä sitten toisessa osassa Liity jäseneksi Cmdlet, vien sinut hashtables-hupun taakse.
Lopuksi tutkin erilaisia tapoja käyttää hashtables-tiedostoja komentosarjassa.
Selaa viestien aiheita
- PowerShell Hashtable vs PowerShell Array
- PowerShell Hashtable -menetelmät ja -ominaisuudet
- Kuinka luoda tyhjä PowerShell-hashtable ja lisätä avaimia
- Kuinka luoda PowerShell Hashtable useilla arvoilla ja yhdellä avaimella
- Kuinka iteroida PowerShell Hashtable ForEach Loopin kanssa
- Raportin mukauttaminen PowerShell Hashtablella ja Select-Objectilla
- Kuinka viedä PowerShell Hashtable CSV-muotoon
- Viitteet ja lisätietoa
PowerShell Hashtable vs PowerShell Array
Ennen kuin sukellan Hashtablesiin, haluan selittää eron Hashtablesien ja Arrayiden välillä. Tämä erottelu on tärkeä, koska nämä kaksi käsitettä voivat helposti sekoittua.
Tämän oppaan johdannossa selitin, että hashtable on avain-/arvovarasto. Lisäksi hashtable on kuin taulukko, jossa on avaimet ja arvot.
Päinvastoin, PowerShell-taulukko on kokoelma arvoja tai objekteja.
Ensisijainen ero PowerShell-hashtable ja PowerShell-taulukon välillä on se, että hashtable on kokoelma kohteita (avaimia) ja niiden arvoja – kun taas taulukko on vain luettelo kohteista.
Pikaesimerkkinä alla olevat koodit ovat esimerkkejä hashtaulukoista ja taulukoista – ensimmäinen koodi luo hashtables, kun taas toinen koodi luo taulukon:
|_+_| |_+_| Koodiesimerkeistä voit nähdä, että vaikka hashtable on {}:n sisällä, taulukko on () sisällä.Alla oleva kuvakaappaus näyttää kahden koodin tulokset.
Kuvakaappauksen osa, joka on merkitty (1), on hajautustaulukon tulos. Oletko nähnyt avain/arvo-parin?
Yllä olevassa esimerkissä avaimen Root arvo on C:UsersvictoDocuments. Myös PSProvider-avaimella on arvo nimeltä FileSystem.
Lopuksi Nimen arvo on Asiakirja.
Lisäksi kuvakaappauksen (2) osassa on taulukkokoodin tulos. Kuten aiemmin selitettiin, se on vain luettelo.
PowerShell Hashtable -menetelmät ja -ominaisuudet
Johdannossa lupasin viedä sinut PowerShell Hashtablesin konepellin taakse. Tämä se on!
Tässä osiossa opetan sinulle, kuinka voit käyttää Get-Member Cmdlet-komentoa hashtabletien taakse katsomiseen.
Kun siirrät PowerShell Hashtable -tuloksen kohteeseen Liity jäseneksi , voit tarkastella saatavilla olevia menetelmät ja Ominaisuudet Hashtablesta.
huawei ascend mate 2 syanogeeni
Palataan ensimmäiseen yllättävään esimerkkiimme:
|_+_|Kopioi koodi uuteen PowerShell ISE -asiakirjaan. Suorita sitten koodi.
Sitten nähdäksesi käytettävissä menetelmät ja Ominaisuudet tässä hash-taulukossa, suorita tämä komento samassa PowerShell ISE:ssä.
|_+_|Suorita yllä oleva komento liittämällä se viimeisen koodin alle. Korosta sitten se ja paina F8 tai napsauta korostettua kuvaketta.
Komento näyttää tulokset PowerShell-konsoliruudussa.
Katso toistaiseksi tuloksen päälle. Siinä on TypeName: System.Collections.Hashtable.
Tämä vahvistaa, että Get-Member Cmdletiin ohjatut objektit ovat Hashtable!
Tämän osion seuraavissa alaosissa näytän sinulle, kuinka voit käyttää PowerShell-hashtablen yleisiä menetelmiä ja ominaisuuksia.
Kohteiden lisääminen tai poistaminen olemassa olevaan hashtablettiin
Tässä osiossa opit lisäämään uusia kohteita olemassa olevaan PowerShell-hashtaulukkoon. Lisäksi opit myös poistamaan kohteen olemassa olevasta PowerShell-hashtableista.
Ennen kuin sukeltan siihen, haluan mainita, että voit myös luoda tyhjän hashtablen. Lisää sitten avaimia/arvoja hash-taulukkoon – tästä lisää myöhemmin.
Takaisin kohteiden lisäämiseen tai poistamiseen olemassa oleviin PowerShellin hastables-tiedostoihin – kun suoritimme $hashtable | Liity jäseneksi komento, yksi tuloksessa näytetyistä menetelmistä on Lisätä . On myös menetelmä, Poista .
Katso alla olevan kuvakaappauksen korostetut osat:
Ennen kuin näytän sinulle, kuinka näitä kahta menetelmää käytetään, tarkastellaan alkuperäistä PowerShell-hashtable-koodia:
|_+_|Hash-taulukossa on 3 merkintää. Tässä esimerkissä lisään Omat asiakirjat -kansioon toisen avaimen nimeltä Kuvaus, jonka arvo on Maps.
Suorittaakseni tämän tehtävän suorittamalla alla olevan komennon (samassa PowerShell ISE -konsolissa, jossa suoritin aiemmat komennot)
|_+_| Huomaa, kuinka käytin Lisää Menetelmä . Lisään pisteen (.) hajataulukon sisältävän muuttujan viereen. Sitten lisäsin menetelmän, Lisätä , jonka jälkeen (). Lopuksi lisäsin uuden avain/arvo-parin, jonka haluan lisätä hash-taulukkoon.Kun olet suorittanut komennon, vahvista, että lisäavain on lisätty, korostamalla $hashtable ja paina F8.
|_+_|Tässä on kuvakaappaus tuloksesta - vahvistaa, että uusi avain/arvo on lisätty.
Jatkossa voit käyttää samaa lähestymistapaa arvon poistamiseen PowerShell-hashtableista.
Poistaaksesi viimeisen hashtable-taulukkoon lisäämämme avaimen suorittamalla viimeistä komentoa vastaava komento. Tällä kertaa kuitenkin vaihda Lisätä Menetelmä kanssa Poista Menetelmä.
Tässä on komento:
|_+_| The Poista Menetelmä sisältää vain avain . Avainta ei tarvitse laittaa mukaan arvo komennossa.Suorita ensin yllä oleva komento. Vahvista sitten, että avain on poistettu, korostamalla $hashtable ja paina F8.
|_+_|Komennon tulos vahvistaa, että avain on poistettu!
Kuinka tarkistaa, sisältääkö PowerShell Hashtable avaimen
Kun ohjasimme alla olevan hastablen Liity jäseneksi Cmdlet, yksi näytetyistä tavoista on Sisältää Avaimen Menetelmä – katso alla oleva kuvakaappaus.
|_+_|
The Sisältää Avaimen Menetelmää voidaan käyttää niin monella tapaa. Yksi tämän menetelmän yleisimmistä sovelluksista on kuitenkin sen avulla tarkistaa, onko hash-taulukossa avain, ja jos ei ole, lisää avain.
Toinen sovellus Sisältää Avaimen PowerShell-hashtable on yksinkertaisesti käyttää sitä tarkistaaksesi, onko avaimen nimi olemassa hashtaulukossa.
Voit tarkistaa, onko PowerShell-hashtableissa avainta käyttämällä Sisältää Avaimen Menetelmä, suorita alla oleva komento:
|_+_|Tämä komento tarkistaa, onko $hashtable-muuttujaan tallennetussa hash-taulukossa avain nimeltä Kuvaus. Komennon tulos näyttää False.
Tarvitsemme ylimääräisen koodirivin edelliseen komentoon tarkistaaksemme, onko kuvausavain olemassa ennen sen lisäämistä PowerShell-hashtable-taulukkoon.
Tässä on paranneltu koodi.
|_+_|Koodi käyttää IF-ehtolausetta tarkistaakseen, onko hash-taulukossa avain, jonka nimi on Kuvaus.
Sitten, jos tulos on False, käytämme IF-lauseen komennon suoritusosassa Lisätä PowerShell-hashtaulukon menetelmä avaimen lisäämiseksi hash-taulukkoon.
Jos avain on kuitenkin olemassa hash-taulukossa, näytämme IF-käskyn Else-osassa viestin, joka ilmoittaa komennon suorittaneelle henkilölle, että avain on jo olemassa.
Kun olet suorittanut viimeisen komennon, korosta $hashtable muuttuja ja käytä sitä yksin. Tulos vahvistaa, että avain Kuvaus lisättiin muuttujaan, koska sitä ei ollut olemassa.
Testaa, toimiiko tämä komentosarja - suorita se uudelleen...
|_+_|Tällä kertaa käsikirjoitus ei lisännyt avainta. Sen sijaan se palautti tiedot IF-lauseen Else-osassa - Avain on jo olemassa hash-taulukossa .
Kuinka muuntaa PowerShell-hashtable merkkijonoksi
Ensimmäinen vaihe PowerShell-hajataulukon muuntamiseksi merkkijonoksi on palauttaa hashtable-avainten arvot. Toisin sanoen muunnat PowerShell-hashtable PowerShell-taulukoksi.
Palauttaaksesi arvot hash-taulukossa, soita Arvot hashtablein omaisuutta.
Tässä on komento, joka palauttaa arvot hash-taulukossa:
|_+_|Kun olet palauttanut PowerShell-hashtable-arvot, seuraava vaihe on liittää $hashtable.Values hakemistoon Out-String Komento…
|_+_| Myöhemmin tässä oppaassa ymmärrät, kuinka tärkeää on muuntaa PowerShell-hashtable merkkijonoksi. Jos haluat nähdä tämän käytännön sovelluksen todellisessa SysAdmin-komentosarjassa, lue eteenpäin.Kuinka käyttää PowerShell Hashtablea GetEnumerator Menetelmä
Toinen tärkeä PowerShell-hashtable-menetelmä on GetEnumerator Menetelmä.
Voit käyttää tätä menetelmää erottamaan hashtable-avaimet yksittäisiksi merkkijonoiksi. Tässä on esimerkki komennosta GetEnumerator Hashtablen menetelmä:
|_+_|Kuten yllä olevan komennon tuloksesta näkyy, avaimet ja arvot palautetaan yksittäisissä otsikoissa. En voi ajatella sovellusta nyt, mutta jos joudut koskaan hajottamaan avaimet PowerShell-hashtableissa, tiedät kuinka tehdä se!
PowerShell Hashtable -kohteiden laskeminen
On vielä yksi hyödyllinen hashtable-ominaisuus, Kreivi . Kuten nimestä voi päätellä, tämä ominaisuus palauttaa hash-taulukon avainten määrän.
Kuin Arvot Ominaisuus, kutsuaksesi Count-ominaisuutta, käytä alla olevan kaltaista komentoa:
|_+_|Komento vahvistaa, että hashtable, $hashtable on 4 avainta.
Kuinka luoda tyhjä PowerShell-hashtable ja lisätä avaimia
Toistaiseksi kaikki tämän S-alueen esimerkit ovat keskittyneet PowerShell-hashtablen manipulointiin olemassa olevilla avaimilla. Tässä osiossa opit luomaan tyhjän hash-taulukon.
Lisää sitten avaimet hash-taulukkoon.
Luo tyhjä PowerShell-hashtable kirjoittamalla @ merkki, jota seuraa {} suluissa. Tässä on esimerkki muuttujaan tallennetusta tyhjästä hashtableista, Tyhjähashtable :
|_+_|Varmista, että hashtable on luotu ilman arvoja, suorittamalla edellinen komento. Suorita sitten muuttuja yksinään.
|_+_|Seuraava askel on käyttää Lisätä Tässä oppaassa aiemmin käsitelty menetelmä avainten/arvojen lisäämiseksi hash-taulukkoon. Tässä esimerkissä lisään avaimen nimeltä Nimi , jonka arvo on Asiakirja .
Tässä on komento tämän tehtävän suorittamiseksi.
|_+_|Varmista lopuksi, että arvojen lisäys onnistui, suorittamalla muuttuja $Emptyhashtable:
|_+_|Viimeinen komento vahvistaa, että arvot on lisätty onnistuneesti:
Kuinka luoda PowerShell Hashtable useilla arvoilla ja yhdellä avaimella
Kaikissa tähän mennessä käsitellyissä esimerkeissä PowerShell-hashtable on yksi avain/arvo-pari. On kuitenkin tilanteita, joissa sinun on ehkä oltava yksi avain hajautustaulukossa, jossa on useita arvoja.
Tässä tapauksessa haluat todella luoda hashtable-taulukon, jonka arvoina ovat taulukot.
Aluksi mielestäni on parempi näyttää sinulle koodit, joita käytin erottamaan hashtable taulukosta.
|_+_| |_+_|Joten, jos haluat luoda PowerShell-hashtable, jossa on yksittäisiä avaimia ja useita arvoja, suorita seuraavanlainen komentosarja:
|_+_|Yllä olevassa käsikirjoituksessa LogName on hashtable-avain, kun arvot System, Application ja Security on määritetty avaimelle. Olemme käytännössä luoneet yhden hastable-avaimen, jossa on useita arvoja.
Yksittäisten arvojen luettelemiseksi LogName näppäintä, suorita alla oleva komento:
|_+_|Alla olevan kuvakaappauksen osa (1) on seurausta hashtableista, $hashtableWithArrays . Lisäksi osa, joka on merkitty (2), näyttää tuloksen $hashtableWithArrays.Values komento.
Jos tunnet Windowsin tapahtumalokit – Järjestelmä, sovellus ja suojaus – ovat Windowsin tapahtumalokien nimiä.
Seuraavassa osiossa näytän sinulle, kuinka PowerShell ForEach -silmukkaa käytetään yllä olevan hash-taulukon läpi - ja suorita Hanki-tapahtumaloki komento näissä kolmessa tapahtumalokissa – käyttämällä yhtä PowerShell-komentosarjaa.
Kuinka iteroida PowerShell Hashtable ForEach Loopin kanssa
Viimeisessä osiossa loin yhden avaimen PowerShell-hashtable, jossa on useita arvoja.
Tämän osion esimerkissä olen vaihtanut muuttujan, joka tallensi hashtablen LogNameKeys . Tässä on päivitetty skripti.
|_+_|Tässä osiossa opetan sinulle kuinka sitä käytetään Jokaiselle selataksesi hakemistoon tallennettuja arvoja LogName avain ja suorita Hanki-tapahtumaloki komento.
PowerShell ForEach -komennon nopeaa kertauskurssia varten alla on PowerShell ForEach -komennon yleinen syntaksi:
|_+_|Jos käytät yllä olevaa syntaksia meidän Lokinimet hashtable, päivitetty komento näyttää tältä:
#:llä alkavat rivit ovat PowerShell-kommentteja. |_+_|Komentosarjan ensimmäinen osa on sama komentosarja, joka luo yhden avaimen PowerShell-hashtable, jossa on useita arvoja. Tässä on käsikirjoitus:
|_+_|Skriptin toisessa osassa muunsin ($LogNameKeys.Values) -kenttään tallennetut arvot merkkijonoiksi ja tallensin tuloksen toiseen muuttujaan, LogNameKeysAsStrings .
|_+_|Lopuksi, käsikirjoituksen kolmannessa osassa – ForEach-silmukka esitellään:
|_+_|Tässä skriptin osassa käskemme PowerShellia ottamaan jokaisen tiedostoon tallennetun arvon LogName avain ( $LogNameKeysAsStrings ) – tallenna kyseinen yksittäinen arvo väliaikaisesti muuttujaan LogNameKey – käytä sitten temporaalista muuttujaa suorittamaan Hanki-tapahtumaloki komento.
otin mukaan Uusin parametrin Hanki-tapahtumaloki komennon arvolla 5, jotta komento palauttaa kunkin tapahtumalokin 5 viimeistä merkintää. Kun katsot PowerShell-komentosarjaa, se voi näyttää monimutkaiselta. Kuitenkin, jos katsot tarkasti, se on yleensä erittäin helppoa.Kopioi nyt alla oleva komentosarja uuteen PowerShell ISE -asiakirjaan ja suorita se.
Avaa PowerShell ISE järjestelmänvalvojana. Jos et avaa PowerShell ISE:tä järjestelmänvalvojana, saat käyttöoikeusvirhesanomia. |_+_|Alla oleva kuvakaappaus näytti käsikirjoituksen tuloksen. Tulosruudussa on 15 riviä, jotka edustavat viittä järjestelmä-, sovellus- ja suojaustapahtumalokeista.
Raportin mukauttaminen PowerShell Hashtablella ja Select-Objectilla
Viimeisessä osassa loimme PowerShell-komentosarjan, joka hakee Windowsin tapahtumalokiraportin. Tässä kuvakaappaus raportista
Skriptin oletustulosteessa on 5 saraketta – Indeksi , Aika , EntryType , Lähde , InstanceID , ja Viesti . Jos lähetät tämän raporttina, saatat haluta muuttaa näiden sarakkeiden nimet nimiksi, jotka ovat helposti ymmärrettäviä.
Tässä on käsikirjoitus viimeisestä osasta.
Käsikirjoitusta on hieman muokattu. Minulla on nyt muuttuja, EventLogReport joka tallentaa ForEach-silmukan lähdön. Selitän myöhemmin, miksi tämä on tarpeen. |_+_|Jos haluat muokata sarakeotsikoiden nimiä tästä skriptistä, kirjoitamme Hanki-tapahtumaloki komento a Select-Object komento.
Luo sitten PowerShell-hashtable sisällä Select-Object komento, joka muuttaa sarakkeiden nimiä. Tässä on muokattu skripti, joka suorittaa taikuuden.
|_+_|Käsikirjoitus näyttää paljon monimutkaisemmalta kuin se todellisuudessa on. Jos kuitenkin keskityt skriptin osaan Select-Objectin jälkeen, on helppo havaita ero tämän skriptin ja aiemman kopion välillä.
Tarkemmin sanottuna sisällytin hashtables -sovellukseen Select-Object koodin lohko. Jokainen hashtable mukauttaa tulosteen Hanki-tapahtumaloki komento.
Tässä on esimerkki hashtableista Select-Object lohko:
|_+_|Kuten tavallista, PowerShell-hashtable on kaksi elementtiä. Avain on Nimi , arvo on Ilmaisu .
Toinen tärkeä huomioitava asia on, että jokaisen hash-taulukon lopussa Select-Object lohko, siinä on pilkku (,).
Lopuksi tässä on PowerShellin lopullisen skriptin tulos:
Lupasin aiemmin selittää, miksi esittelin $EventLogReport muuttuja tallentaaksesi ForEach-silmukan lähdön. Ilman tätä muuttujaa lopputulos näyttää 3 yksittäistä tulosta kullekin kolmesta tapahtumalokista. Tallentamalla kaikki tulokset muuttujaan, pystyin kuitenkin putsaamaan tämän muuttujan Format-Table-muotoon - tämä näyttää koko tuloksen yhtenä taulukkona. Tässä on komento, joka suoritti taikuuden. |_+_|Kuinka viedä PowerShell Hashtable CSV-muotoon
Tässä viimeisessä osiossa opit viemään PowerShell-hashtable CSV-muotoon.
Tämän osion ensimmäisessä esimerkissä näytän sinulle, kuinka tämä hashtabe viedään CSV-tiedostoon.
|_+_|Jotta voit viedä tämän PowerShell-hashtable CSV-tiedostoon, sinun on käytettävä GetEnumerator Menetelmä (käsitelty aiemmin) arvojen luetteloimiseksi. Muuten todellisia avain/arvo-pareja ei viedä.
Tässä on muokattu komentosarja, joka vie tiedostoon tallennetun hashtable-tiedoston hashtable muuttuja CSV-tiedostoksi.
|_+_|Esitteli alla olevan käsikirjoituksen:
|_+_|Käsikirjoitus sisältää GetEnumerator Menetelmä hash-taulukossa. Sitten putket lähdön Select-Object komento.
Lopuksi putken tuotoksen Select-Object komento Vie-Csv komento. Lue lisää käytöstä Vie-Csv Cmdlet, lue oppaamme – Powershell NoTypeInformation: Sovellukset ja esimerkit .
Kun suoritat tämän skriptin, se luo CSV-tiedoston nimeltä hashtable.csv , määrittämälläsi polulla. Katso CSV-tiedoston tuloste alla olevasta kuvakaappauksesta.
|_+_|
Toisessa esimerkissäni vietän viimeisessä osiossa luomamme komentosarjan - tapahtumalokin komentosarjan - tulosteen CSV-tiedostoon.
Tässä on käsikirjoitus. Raportin viemiseksi CSV-muotoon lisäsin koodin tämän alle tämän skriptin loppuun.
|_+_| |_+_|Koodi ohjaa ulostulon Jokaiselle silmukka – tallennettu EventLogReport muuttuja - kohtaan Vie-Csv-komento . Luotu CSV-tiedosto näkyy alla olevassa kuvakaappauksessa.
Siinä se – kattava opas PowerShell-hashtableista! Toivottavasti siitä oli apua?
Jos koit sen hyödylliseksi, äänestä ystävällisesti Joo Oliko tämä viesti Hyödyllinen kysymys alla.
Vaihtoehtoisesti voit esittää kysymyksen, jättää kommentin tai antaa lisää palautetta tämän sivun lopusta löytyvällä Vastaa -lomakkeella.
Lopuksi lisää PowerShell tech S Zones -alueita Windows PowerShell -ohjesivullamme. Saatat myös pitää Work from Home -sivustamme erittäin hyödyllisenä.


