PowerShell Hashtable Ultimate Guide с примери
Хеш-таблицата на PowerShell е елементи от колекция и техните стойности. Елементите се наричат ключове. Освен това всеки ключ в хеш-таблица има еквивалентна стойност.
По същество хеш-таблицата на PowerShell е „таблица“ за съхранение на ключ/стойност.
В тази S зона ще ви науча всичко, което трябва да знаете за хеш-таблиците на PowerShell. Първият раздел изследва разликата между Hashtable и масив.
След това, във втория раздел, използвайки Вземете член Cmdlet, ще ви заведа зад капака на хеш-таблиците.
И накрая, ще проуча различни начини за използване на хеш-таблици в скриптовете.
Разгледайте темите на публикациите
itype.exe какво е това
- PowerShell Hashtable срещу PowerShell масив
- Методи и свойства на хештаблица на PowerShell
- Как да създадете празна хештаблица на PowerShell и да добавите ключове
- Как да създадете хештаблица на PowerShell с множество стойности и един ключ
- Как да итерирате хештаблица на PowerShell с цикъл ForEach
- Как да персонализирате отчет с хештаблица на PowerShell и изберете обект
- Как да експортирате PowerShell Hashtable в CSV
- Препратки и допълнителна литература
PowerShell Hashtable срещу PowerShell масив
Преди да се потопя в Hashtables, искам да обясня разликата между Hashtables и Arrays. Това разграничаване е важно, тъй като двете понятия могат лесно да се объркат.
Във въведението на това ръководство обясних, че хеш-таблицата е магазин за ключ/стойност. Освен това хеш-таблицата е като таблица с ключове и стойности.
Напротив, масивът на PowerShell е колекция от стойности или обекти.
Основната разлика между хеш-таблица на PowerShell и масив на PowerShell е, че хеш-таблицата е колекция от елементи (ключове) и техните стойности – докато масивът е просто списък с елементи.
За бърз пример, кодовете по-долу са примери за хеш-таблици и масив – първият код създава хеш-таблици, докато вторият код създава масив:
|_+_| |_+_| От примерите за код можете да видите, че докато хеш-таблица е затворена в {}, масивът е затворен в ().Екранната снимка по-долу показва резултатите от двата кода.
Частта от екранната снимка, обозначена с (1), е резултат от хеш таблицата. Виждали ли сте двойката ключ/стойност?
В горния пример ключът Root има стойност C:UsersvictoDocuments. Също така ключът PSProvider има стойност, наречена FileSystem.
И накрая, Name има стойност на Document.
Освен това частта от екранната снимка, обозначена с (2), има резултата от кода на масива. Както беше обяснено по-рано, това е просто списък.
Методи и свойства на хештаблица на PowerShell
Във въведението обещах да ви заведа зад капака на PowerShell Hashtables. Това е то!
В този раздел ще ви науча как да използвате командата Get-Member, за да търсите зад хеш-таблици.
Когато изпращате резултата от хештаблица на PowerShell към Вземете член , ще можете да прегледате наличните Методи и Имоти на Hashtable.
Нека да се върнем към нашия първи пример за стабилност по-горе:
|_+_|Копирайте кода в нов документ на PowerShell ISE. След това стартирайте кода.
След това, за да видите наличните Методи и Имоти в тази хеш-таблица изпълнете тази команда на същия PowerShell ISE.
|_+_|За да изпълните горната команда, поставете я под последния код. След това го маркирайте и натиснете F8 или щракнете върху маркираната икона.
Командата ще покаже резултати в конзолния панел на PowerShell.
Засега гледайте отгоре на резултата. Има TypeName: System.Collections.Hashtable.
Това потвърждава, че обектите, въведени в командата Get-Member, са хештаблица!
В следващите подраздели на този раздел ще ви покажа как да използвате общите методи и свойства на хеш-таблица на PowerShell.
Как да добавяте или премахвате елементи към съществуваща Hashtable
В този раздел ще се научите да добавяте нови елементи към съществуваща хеш-таблица на PowerShell. Освен това ще научите как да премахнете елемент от съществуваща хеш-таблица на PowerShell.
Преди да се потопя в него, искам да спомена, че можете да създадете и празна хеш-таблица. След това добавете ключове/стойности към хеш-таблицата – повече за това по-късно.
Обратно към добавяне или премахване на елементи към съществуващи таблици на PowerShell – когато стартирахме $hashtable | Вземете член команда, един от методите, показани в резултата е Добавете . Има и метод, Премахване .
Вижте подчертаните части от екранната снимка по-долу:
Преди да ви покажа как да използвате тези два метода, нека разгледаме оригиналния код на хеш-таблица на PowerShell:
|_+_|Хеш таблицата има 3 записа. В този пример ще добавя друг ключ, наречен Description със стойността Maps, към моята папка „Моите документи“.
За да изпълня тази задача, ще изпълня командата по-долу (на същата PowerShell ISE конзола, на която изпълних предишните команди)
|_+_| Обърнете внимание как използвах Add Метод . Добавям точка (.) до променливата, която съдържа хеш-таблицата. След това включих метода, Добавете , следван от (). Накрая включих новата двойка ключ/стойност, която искам да добавя към хеш-таблицата.След като изпълните командата, маркирайте, за да потвърдите, че допълнителният ключ е добавен $hashtable и натиснете F8.
|_+_|Ето екранна снимка на резултата – потвърждаващ, че новият ключ/стойност е добавен.
Продължавайки, можете да използвате същия подход, за да премахнете стойност от хеш-таблица на PowerShell.
За да премахнете последния ключ, който добавихме към хеш-таблицата, изпълнете команда, подобна на последната. Този път обаче заменете Добавете Метод с Премахване Метод.
Ето командата:
|_+_| В Премахване Методът включва само ключ . Не е необходимо да включвате ключа стойност в командата.Първо изпълнете горната команда. След това, за да потвърдите, че ключът е премахнат, маркирайте $hashtable и натиснете F8.
|_+_|Резултатът от командата потвърждава, че ключът е премахнат!
Как да проверите дали хештаблица на PowerShell съдържа ключ
Когато прехвърлихме хастабила отдолу към Вземете член Cmdlet, един от показаните методи е ContainsKey Метод – вижте екранната снимка по-долу.
|_+_|
В ContainsKey Методът може да се използва по толкова много начини. Въпреки това, едно от често срещаните приложения на този метод е да се използва, за да се провери дали в хеш-таблица съществува ключ и ако не, добавете ключа.
Друго приложение на ContainsKey Методът на хеш-таблица на PowerShell е просто да я използвате, за да проверите дали в хеш-таблицата съществува име на ключ.
За да проверите дали съществува ключ в хештаблица на PowerShell, като използвате ContainsKey Метод, изпълнете командата по-долу:
|_+_|Тази команда проверява дали ключ с име, Description съществува в хештаблицата, записана в променливата $hashtable. Резултатът от командата показва False.
За да проверим дали ключът Description съществува, преди да го добавим към хеш-таблицата на PowerShell, ще ни трябва допълнителен ред с кодове към предишната команда.
Ето подобрения код.
не се показват контроли за потрепване|_+_|
Кодът използва условния оператор IF, за да провери дали в хеш-таблицата съществува ключ с име Description.
След това, ако резултатът е False, в частта за изпълнение на командата на оператора IF използваме Добавете Метод на хеш таблицата PowerShell за добавяне на ключа към хеш таблицата.
Въпреки това, ако ключът съществува в хеш-таблицата, в частта Else на оператора IF, ние показваме съобщение, информиращо лицето, което е изпълнило командата, че ключът вече съществува.
След като изпълните последната команда, маркирайте $hashtable променлива и я стартирайте самостоятелно. Резултатът потвърждава, че ключът Description е добавен към променливата, тъй като не съществува.
За да проверите дали този скрипт работи - стартирайте го отново...
|_+_|Този път скриптът не добави ключа. По-скоро той върна информацията в другата част на изявлението IF – Ключът вече съществува в хеш-таблицата .
Как да конвертирате хештаблица на PowerShell в низ
Първата стъпка за преобразуване на хеш-таблица на PowerShell в низ е да върнете стойностите на ключовете в хеш-таблицата. С други думи, вие преобразувате хеш-таблицата на PowerShell в PowerShell масив.
За да върнете стойностите в хеш-таблица, извикайте Стойности свойство на хеш-таблицата.
Ето командата, която връща стойностите в хеш-таблица:
|_+_|След като върнете стойностите в хештаблица на PowerShell, следващата стъпка е да изпратите $hashtable.Values към Извън струна Команда…
|_+_| По-късно в това ръководство ще оцените важността на преобразуването на хештаблица на PowerShell в низ. За да видите практическото приложение на това в скриптове на SysAdmin в реалния свят, прочетете нататък.Как да използвате PowerShell Hashtable GetEnumerator Метод
Друг важен метод на хеш-таблица на PowerShell е GetEnumerator Метод.
Можете да използвате този метод, за да разделите ключовете в хеш-таблица на отделни низове. Ето примерна команда на GetEnumerator Метод на хеш-таблица:
|_+_|Както можете да видите от резултата от горната команда, ключовете и стойностите се връщат в отделни заглавки. Сега не мога да се сетя за приложение, но ако някога се наложи да разбиете ключовете в хештаблица на PowerShell, знаете как да го направите!
Как да преброите PowerShell хештаблици
Има още едно полезно свойство на хеш-таблица, Броя . Както подсказва името, това свойство връща броя на ключовете в хеш-таблица.
Като Стойности Property, за да извикате Count Property, използвайте команда, подобна на тази по-долу:
|_+_|Командата потвърждава, че хештаблицата, $hashtable има 4 ключа.
Как да създадете празна хештаблица на PowerShell и да добавите ключове
Досега всички примери в тази S зона са фокусирани върху манипулирането на хеш-таблица на PowerShell със съществуващи ключове. В този раздел ще научите как да създадете празна хеш-таблица.
След това добавете ключове към хеш таблицата.
За да създадете празна хеш таблица на PowerShell, просто въведете @ знак, последван от {} скоби. Ето пример за празна хеш-таблица, запазена в променлива, Празна хештаблица :
|_+_|За да потвърдите, че хеш-таблицата е създадена без стойности, изпълнете предишната команда. След това стартирайте променливата самостоятелно.
|_+_|Следващата стъпка е да използвате Добавете метод, разгледан по-рано в това ръководство, за добавяне на ключове/стойности към хеш-таблицата. В този пример ще добавя ключ, наречен име , със стойност от документ .
проблем с pnp устройства windows 7
Ето командата за изпълнение на тази задача.
|_+_|Накрая, за да потвърдите, че стойностите са добавени успешно, изпълнете променливата $Emptyhashtable:
|_+_|Последната команда потвърждава, че стойностите са добавени успешно:
Как да създадете хештаблица на 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 с един ключ с множество стойности.
За примера в този раздел промених променливата, която съхранява хеш-таблицата на 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, който изтегля отчета за дневника на събитията на 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 в 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. Може също да намерите нашата страница „Работа от дома“ за много полезна.


