PowerShell Hashtable Ultimate Guide с примери

20 май 2021 г 5546 Изгледи PowerShell Hashtable Вашето най-добро ръководство с примери

Хеш-таблицата на PowerShell е елементи от колекция и техните стойности. Елементите се наричат ​​ключове. Освен това всеки ключ в хеш-таблица има еквивалентна стойност.





По същество хеш-таблицата на PowerShell е „таблица“ за съхранение на ключ/стойност.



В тази S зона ще ви науча всичко, което трябва да знаете за хеш-таблиците на PowerShell. Първият раздел изследва разликата между Hashtable и масив.

След това, във втория раздел, използвайки Вземете член Cmdlet, ще ви заведа зад капака на хеш-таблиците.



И накрая, ще проуча различни начини за използване на хеш-таблици в скриптовете.



Разгледайте темите на публикациите

itype.exe какво е това

PowerShell Hashtable срещу PowerShell масив

PowerShell Hashtable срещу PowerShell масив

Преди да се потопя в Hashtables, искам да обясня разликата между Hashtables и Arrays. Това разграничаване е важно, тъй като двете понятия могат лесно да се объркат.



Във въведението на това ръководство обясних, че хеш-таблицата е магазин за ключ/стойност. Освен това хеш-таблицата е като таблица с ключове и стойности.



Напротив, масивът на PowerShell е колекция от стойности или обекти.

Основната разлика между хеш-таблица на PowerShell и масив на PowerShell е, че хеш-таблицата е колекция от елементи (ключове) и техните стойности – докато масивът е просто списък с елементи.

За бърз пример, кодовете по-долу са примери за хеш-таблици и масив – първият код създава хеш-таблици, докато вторият код създава масив:

|_+_| |_+_| От примерите за код можете да видите, че докато хеш-таблица е затворена в {}, масивът е затворен в ().

Екранната снимка по-долу показва резултатите от двата кода.

PowerShell Hashtable срещу PowerShell масив

Частта от екранната снимка, обозначена с (1), е резултат от хеш таблицата. Виждали ли сте двойката ключ/стойност?

В горния пример ключът Root има стойност C:UsersvictoDocuments. Също така ключът PSProvider има стойност, наречена FileSystem.

И накрая, Name има стойност на Document.

Освен това частта от екранната снимка, обозначена с (2), има резултата от кода на масива. Както беше обяснено по-рано, това е просто списък.

Методи и свойства на хештаблица на PowerShell

Методи и свойства на хештаблица на PowerShell

Във въведението обещах да ви заведа зад капака на PowerShell Hashtables. Това е то!

В този раздел ще ви науча как да използвате командата Get-Member, за да търсите зад хеш-таблици.

Когато изпращате резултата от хештаблица на PowerShell към Вземете член , ще можете да прегледате наличните Методи и Имоти на Hashtable.

Нека да се върнем към нашия първи пример за стабилност по-горе:

|_+_|

Копирайте кода в нов документ на PowerShell ISE. След това стартирайте кода.

След това, за да видите наличните Методи и Имоти в тази хеш-таблица изпълнете тази команда на същия PowerShell ISE.

|_+_|

За да изпълните горната команда, поставете я под последния код. След това го маркирайте и натиснете F8 или щракнете върху маркираната икона.

Методи и свойства на хештаблица на PowerShell

Командата ще покаже резултати в конзолния панел на PowerShell.

Засега гледайте отгоре на резултата. Има TypeName: System.Collections.Hashtable.

Това потвърждава, че обектите, въведени в командата Get-Member, са хештаблица!

В следващите подраздели на този раздел ще ви покажа как да използвате общите методи и свойства на хеш-таблица на PowerShell.

Как да добавяте или премахвате елементи към съществуваща Hashtable

В този раздел ще се научите да добавяте нови елементи към съществуваща хеш-таблица на PowerShell. Освен това ще научите как да премахнете елемент от съществуваща хеш-таблица на PowerShell.

Преди да се потопя в него, искам да спомена, че можете да създадете и празна хеш-таблица. След това добавете ключове/стойности към хеш-таблицата – повече за това по-късно.

Обратно към добавяне или премахване на елементи към съществуващи таблици на PowerShell – когато стартирахме $hashtable | Вземете член команда, един от методите, показани в резултата е Добавете . Има и метод, Премахване .

Вижте подчертаните части от екранната снимка по-долу:

Методи и свойства на хештаблица на PowerShell

Преди да ви покажа как да използвате тези два метода, нека разгледаме оригиналния код на хеш-таблица на PowerShell:

|_+_|

Хеш таблицата има 3 записа. В този пример ще добавя друг ключ, наречен Description със стойността Maps, към моята папка „Моите документи“.

За да изпълня тази задача, ще изпълня командата по-долу (на същата PowerShell ISE конзола, на която изпълних предишните команди)

|_+_| Обърнете внимание как използвах Add Метод . Добавям точка (.) до променливата, която съдържа хеш-таблицата. След това включих метода, Добавете , следван от (). Накрая включих новата двойка ключ/стойност, която искам да добавя към хеш-таблицата.

След като изпълните командата, маркирайте, за да потвърдите, че допълнителният ключ е добавен $hashtable и натиснете F8.

|_+_|

Ето екранна снимка на резултата – потвърждаващ, че новият ключ/стойност е добавен.

Продължавайки, можете да използвате същия подход, за да премахнете стойност от хеш-таблица на PowerShell.

За да премахнете последния ключ, който добавихме към хеш-таблицата, изпълнете команда, подобна на последната. Този път обаче заменете Добавете Метод с Премахване Метод.

Ето командата:

|_+_| В Премахване Методът включва само ключ . Не е необходимо да включвате ключа стойност в командата.

Първо изпълнете горната команда. След това, за да потвърдите, че ключът е премахнат, маркирайте $hashtable и натиснете F8.

|_+_|

Резултатът от командата потвърждава, че ключът е премахнат!

Методи и свойства на хештаблица на PowerShell - Как да добавяте или премахвате елементи към съществуваща хештаблица

Как да проверите дали хештаблица на PowerShell съдържа ключ

Когато прехвърлихме хастабила отдолу към Вземете член Cmdlet, един от показаните методи е ContainsKey Метод – вижте екранната снимка по-долу.

|_+_|

В ContainsKey Методът може да се използва по толкова много начини. Въпреки това, едно от често срещаните приложения на този метод е да се използва, за да се провери дали в хеш-таблица съществува ключ и ако не, добавете ключа.

Друго приложение на ContainsKey Методът на хеш-таблица на PowerShell е просто да я използвате, за да проверите дали в хеш-таблицата съществува име на ключ.

За да проверите дали съществува ключ в хештаблица на PowerShell, като използвате ContainsKey Метод, изпълнете командата по-долу:

|_+_|

Тази команда проверява дали ключ с име, Description съществува в хештаблицата, записана в променливата $hashtable. Резултатът от командата показва False.

Методи и свойства на хештаблица на PowerShell - как да проверите дали хештаблица на PowerShell съдържа ключ

За да проверим дали ключът Description съществува, преди да го добавим към хеш-таблицата на PowerShell, ще ни трябва допълнителен ред с кодове към предишната команда.

Ето подобрения код.

не се показват контроли за потрепване
|_+_|

Кодът използва условния оператор IF, за да провери дали в хеш-таблицата съществува ключ с име Description.

След това, ако резултатът е False, в частта за изпълнение на командата на оператора IF използваме Добавете Метод на хеш таблицата PowerShell за добавяне на ключа към хеш таблицата.

Въпреки това, ако ключът съществува в хеш-таблицата, в частта Else на оператора IF, ние показваме съобщение, информиращо лицето, което е изпълнило командата, че ключът вече съществува.

След като изпълните последната команда, маркирайте $hashtable променлива и я стартирайте самостоятелно. Резултатът потвърждава, че ключът Description е добавен към променливата, тъй като не съществува.

За да проверите дали този скрипт работи - стартирайте го отново...

|_+_|

Този път скриптът не добави ключа. По-скоро той върна информацията в другата част на изявлението IF – Ключът вече съществува в хеш-таблицата .

Методи и свойства на хештаблица на PowerShell - как да проверите дали хештаблица на PowerShell съдържа ключ

Как да конвертирате хештаблица на PowerShell в низ

Първата стъпка за преобразуване на хеш-таблица на PowerShell в низ е да върнете стойностите на ключовете в хеш-таблицата. С други думи, вие преобразувате хеш-таблицата на PowerShell в PowerShell масив.

За да върнете стойностите в хеш-таблица, извикайте Стойности свойство на хеш-таблицата.

Ето командата, която връща стойностите в хеш-таблица:

|_+_|

След като върнете стойностите в хештаблица на PowerShell, следващата стъпка е да изпратите $hashtable.Values ​​към Извън струна Команда…

|_+_| По-късно в това ръководство ще оцените важността на преобразуването на хештаблица на PowerShell в низ. За да видите практическото приложение на това в скриптове на SysAdmin в реалния свят, прочетете нататък.

Как да използвате PowerShell Hashtable GetEnumerator Метод

Друг важен метод на хеш-таблица на PowerShell е GetEnumerator Метод.

Можете да използвате този метод, за да разделите ключовете в хеш-таблица на отделни низове. Ето примерна команда на GetEnumerator Метод на хеш-таблица:

|_+_|

Както можете да видите от резултата от горната команда, ключовете и стойностите се връщат в отделни заглавки. Сега не мога да се сетя за приложение, но ако някога се наложи да разбиете ключовете в хештаблица на PowerShell, знаете как да го направите!

Как да преброите PowerShell хештаблици

Има още едно полезно свойство на хеш-таблица, Броя . Както подсказва името, това свойство връща броя на ключовете в хеш-таблица.

Като Стойности Property, за да извикате Count Property, използвайте команда, подобна на тази по-долу:

|_+_|

Командата потвърждава, че хештаблицата, $hashtable има 4 ключа.

Как да преброите PowerShell хештаблици

Как да създадете празна хештаблица на PowerShell и да добавите ключове

Как да създадете празна хештаблица на PowerShell и да добавите ключове

Досега всички примери в тази S зона са фокусирани върху манипулирането на хеш-таблица на PowerShell със съществуващи ключове. В този раздел ще научите как да създадете празна хеш-таблица.

След това добавете ключове към хеш таблицата.

За да създадете празна хеш таблица на PowerShell, просто въведете @ знак, последван от {} скоби. Ето пример за празна хеш-таблица, запазена в променлива, Празна хештаблица :

|_+_|

За да потвърдите, че хеш-таблицата е създадена без стойности, изпълнете предишната команда. След това стартирайте променливата самостоятелно.

|_+_|

Следващата стъпка е да използвате Добавете метод, разгледан по-рано в това ръководство, за добавяне на ключове/стойности към хеш-таблицата. В този пример ще добавя ключ, наречен име , със стойност от документ .

проблем с pnp устройства windows 7

Ето командата за изпълнение на тази задача.

|_+_|

Накрая, за да потвърдите, че стойностите са добавени успешно, изпълнете променливата $Emptyhashtable:

|_+_|

Последната команда потвърждава, че стойностите са добавени успешно:

Как да създадете хештаблица на PowerShell с множество стойности и един ключ

Как да създадете хеш-таблица на PowerShell с множество стойности и един ключ

Във всички примери, които разгледахме досега, хеш-таблицата на PowerShell има една двойка ключ/стойност. Въпреки това, има обстоятелства, при които може да се наложи да имате един ключ в хеш-таблица с множество стойности.

В този случай ефективно искате да създадете хеш-таблица с масиви като стойности.

Като начало мисля, че е по-добре да ви покажа кодовете, които използвах, за да разгранича хеш-таблица от масив.

|_+_| |_+_|

Така че, за да създадете хеш-таблица на PowerShell с единични ключове и множество стойности, изпълнете скрипт, подобен на този:

|_+_|

В скрипта по-горе, LogName е хеш-ключът, докато стойностите System, Application и Security са присвоени на ключа. На практика създадохме един hastable ключ с множество стойности.

За да изброите отделните стойности в LogName клавиш, изпълнете командата по-долу:

|_+_|

Частта от екранната снимка по-долу, обозначена с (1), е резултат от хеш таблицата, $hashtableWithArrays . Освен това, частта, означена с (2), показва резултата от $hashtableWithArrays.Values команда.

Ако сте запознати с Windows Event Logs – System, Application и Security – са имената на регистрите на събития на Windows.

В следващия раздел ще ви покажа как да използвате цикъла PowerShell ForEach, за да преминете през горната хеш-таблица – и да стартирате Get-EventLog команда върху тези 3 регистъра на събития – с помощта на един скрипт на PowerShell.

Как да итерирате хештаблица на PowerShell с цикъл ForEach

Как да итерирате PowerShell Hashtable с ForEach

В последния раздел създадох хеш-таблица на PowerShell с един ключ с множество стойности.

За примера в този раздел промених променливата, която съхранява хеш-таблицата на LogNameKeys . Ето актуализирания скрипт.

|_+_|

В този раздел ще ви науча как да използвате За всеки за да преминете през стойностите, съхранени в LogName ключ и стартирайте Get-EventLog команда.

За бърз опреснителен курс за PowerShell ForEach, по-долу е общият синтаксис на команда PowerShell ForEach:

|_+_|

Ако приложите горния синтаксис към нашия LogNames hashtable, актуализираната команда ще изглежда така:

Редовете, които започват с #, са PowerShell коментари. |_+_|

Първата част на скрипта е същият скрипт, който създава хеш таблицата PowerShell с един ключ с множество стойности. Ето скрипта:

|_+_|

Във втората част на скрипта преобразувах стойностите, съхранени в ($LogNameKeys.Values), в низове и записах резултата в друга променлива, LogNameKeysAsStrings .

|_+_|

И накрая, в третата част на скрипта – се въвежда цикълът ForEach:

|_+_|

В тази част от скрипта казваме на PowerShell да приема всяка стойност, съхранена в LogName ключ ( $LogNameKeysAsStrings ) – запишете тази индивидуална стойност временно в променливата LogNameKey – след това използвайте временната променлива, за да стартирате Get-EventLog команда.

Включих Най-новият параметър на Get-EventLog команда със стойност 5, така че командата да връща последните 5 записа от всеки регистър на събитията. Когато погледнете скрипт на PowerShell, той може да изглежда сложен. Въпреки това, ако се вгледате внимателно, обикновено е много лесно.

Сега копирайте скрипта по-долу в нов документ на PowerShell ISE и го стартирайте.

Отворете PowerShell ISE като администратор. Ако не отворите PowerShell ISE като администратор, ще получите съобщения за грешка при достъп. |_+_|

Екранната снимка по-долу показва резултата от скрипта. В панела с резултати има 15 реда – представляващи 5 от регистрационните файлове на събития за система, приложение, сигурност.

Как да персонализирате отчет с хештаблица на PowerShell и изберете обект

Как да персонализирате отчет с хештаблица на PowerShell и изберете обект

В последния раздел създадохме скрипт на PowerShell, който изтегля отчета за дневника на събитията на Windows. Ето екранна снимка на доклада

Изходът по подразбиране на скрипта има 5 колони – Индекс , Време , EntryType , Източник , InstanceID , и Съобщение . Ако изпращате това като отчет, може да искате да промените имената на тези колони на имена, които ще бъдат лесно разбираеми.

Ето скрипта от последния раздел.

Сценарият е леко променен. Сега имам променлива, EventLogReport който запазва изхода на цикъла ForEach. Ще обясня защо това е необходимо по-късно. |_+_|

За да променим имената на заглавките на колоните от този скрипт, ще преведем по канал Get-EventLog команда към а Изберете-обект команда.

След това създайте хеш-таблица на PowerShell в Изберете-обект команда, която променя имената на колоните. Ето модифицирания скрипт, който изпълнява магията.

|_+_|

Сценарият изглежда много по-сложен, отколкото е в действителност. Ако обаче се съсредоточите върху частта от скрипта след Select-Object, ще бъде лесно да забележите разликата между този скрипт и по-ранното копие.

най-добрият rom за nexus 7 2013

По-конкретно, включих хеш-таблици в Изберете-обект блок от кода. Всяка хеш-таблица персонализира изхода на Get-EventLog команда.

Ето примерна хештаблица от Изберете-обект блок:

|_+_|

Както обикновено, хеш-таблицата на PowerShell има два елемента. Ключът е в име , стойността е Изразяване .

Друго важно нещо, което трябва да се отбележи, е, че в края на всяка хеш-таблица в Изберете-обект блок, има запетая (,).

И накрая, ето резултата от крайния скрипт в PowerShell:

По-рано обещах да обясня защо го въведох $EventLogReport променлива, за да запазите изхода на цикъла ForEach. Без тази променлива крайният резултат ще покаже 3 отделни резултата за всеки от 3-те регистрационни файлове за събития. Въпреки това, като съхраня всички резултати в променлива, успях да прехвърля тази променлива във Format-Table - това показва целия резултат като една таблица. Ето командата, която извърши магията. |_+_|

Как да експортирате PowerShell Hashtable в CSV

Как да експортирате PowerShell Hashtable в CSV

В този последен раздел ще научите как да експортирате хеш-таблица на PowerShell в CSV.

В първия ми пример за този раздел ще ви покажа как да експортирате това хештабе в CSV.

|_+_|

За да експортирате успешно тази хеш таблица на PowerShell в CSV файл, трябва да използвате GetEnumerator Метод (обсъден по-рано) за изброяване на стойностите. В противен случай действителните двойки ключ/стойност няма да бъдат експортирани.

Ето модифицирания скрипт, който експортира хеш-таблицата, запазена в хеш-таблица променлива към CSV файл.

|_+_|

Във въведе скрипта по-долу:

|_+_|

Сценарият включва GetEnumerator Метод в хеш-таблицата. След това предава изхода към Изберете-обект команда.

Накрая извеждам изхода на Изберете-обект команда към Експорт-Csv команда. За да прочетете повече за това как да използвате Експорт-Csv Cmdlet, прочетете нашето ръководство – Powershell NoTypeInformation: Приложения и примери.

Когато стартирате този скрипт, той създава CSV файл, наречен hashtable.csv , по пътя, който сте посочили. Вижте екранната снимка по-долу за изхода на CSV файла.

|_+_|

Във втория си пример ще експортирам изхода от скрипта, който създадохме в последния раздел – скрипта на дневника на събития – в CSV файл.

Ето сценария. За да експортирам отчета в CSV, добавих кода под този в края на този скрипт.

|_+_| |_+_|

Кодът предава изхода на За всеки цикъл – запазен в EventLogReport променлива – към Export-Csv команда . Генерираният CSV файл е показан на екранната снимка по-долу.

Това е всичко – изчерпателно ръководство за хеш таблицата на PowerShell! Надявам се, че ви е било полезно?

Ако ви е било полезно, любезно гласувайте да до въпроса полезна ли е тази публикация по-долу.

Като алтернатива можете да зададете въпрос, да оставите коментар или да предоставите повече обратна връзка с формуляра за отговор, който се намира в края на тази страница.

И накрая, за повече PowerShell tech S зони, посетете нашата страница с инструкции за Windows PowerShell. Може също да намерите нашата страница „Работа от дома“ за много полезна.

Препратки и допълнителна литература

  1. Всичко, което искахте да знаете за хеш-таблиците
  2. Комбинирайте масиви и хеш таблици в PowerShell за забавление и печалба
  3. Относно хеш таблиците