Импортиране и експортиране на CSV и XML файлове в PowerShell, Windows IT Pro

Използване на PowerShell за импортиране и експортиране на структурирани данни

Обаче простото анализиране на текст ред по ред е неуспешно, ако трябва да обработите структурирани данни. Например, CSV файловете са изключително често срещан формат за обмен на данни. Дори не мога да преброя колко пъти съм виждал в онлайн форуми въпроса „как да прочета вход от файл във формат CSV с помощта на пакетен файл (т.е. набор от команди на обвивката Cmd.exe)“? Може да се наложи да направите целия анализ ръчно, което е изключително трудно. Например, ако въведеният низ съдържа специални знаци като , няма да можете да анализирате. Разборът на XML файлове с Cmd.exe е още по-труден. Ако не и невъзможно.

Windows PowerShell решава проблемите, споменати по-горе, като предоставя команден ред за импортиране и експортиране на структурирани данни. Всички тези команди съдържат или думата CSV, или думата XML в името си, така че можете да получите списък с тях, като напишете следната команда в подкана на PowerShell:

Когато изпълните тази команда, ще видите списък с всички команди в сесията на PowerShell, които съдържат или думите CSV и XML, или някои други имена в имената си. Ще говоря за командите, които съдържат глаголите Export и Import.

Импортиране на CSV файлове

Както бе споменато по-горе, CSV е много често срещан формат за обмен на данни. CSV файлът е отворен текстов файл, който представлява таблица с данни. Всеки ред от файла е един запис (ред) от данни. Първият ред на файла обикновено (макар и не винаги) определя имената на полетата (колоните). Елементите от данни във всеки ред са разделени с разделителен знак. често се използва като разделителизползва се запетая (особено когато става въпрос за текстови данни), така че елементите с данни в CSV файл обикновено се затварят в двойни кавички (")" или някакъв друг знак. Таблицата показва пример за таблица с данни.

файлове

Фигура 1 показва как тези данни ще бъдат представени в CSV файл.

Import-Csv чете CSV файла и извежда списък с персонализирани PowerShell обекти, по един за всеки ред на въвеждане. PowerShell третира първия ред на CSV файла като свойства на обекта, а следващите редове на файла са изходни обекти. Например, ако изпълните командата Import-Csv Sample.csv, PowerShell ще изведе три обекта с две свойства за всеки: DisplayName и Mail, както е показано на фигура 2.

файлове

Ако CSV файлът, който искате да импортирате, няма заглавен ред, можете да използвате опцията –Header, за да наименувате свойствата на обекта. По този начин, ако в Sample1.csv липсва първият ред (заглавка), ще използвате команда като:

Import-Csv използва знака запетая, тъй като това е разделител по подразбиране, но можете да използвате опцията -Delimiter, за да посочите различен знак за разделител. Например, ако Sample.csv използва знака "tab" като разделител, ще въведете следната команда:

Тъй като Import-Csv извежда PowerShell обекти, можете да използвате други PowerShell команди за обработка на обектите. Да речем например, че искате да сортирате изхода си по DisplayName, но искате само свойството Mail за всеки обект. За да направите това, използвайте командите Sort-Object и Select-Object:

Можете също да предадете тези обекти на командата ForEach-Object за обработка:

Тази команда използва символа -fза извеждане на форматиран низ за всеки обект и създаване на изхода, показан на фигура 3.

Експортирайте CSV файлове

Понякога е необходимо да се създаде CSV файл от изхода на PowerShell обекти. За да направите това, използвате конвейер на PowerShell, за да препратите данни към командата Export-Csv и да предоставите име на файл. PowerShell ще запише изхода на обектите в CSV файл. Лесно е, но има един малък трик. По подразбиране Export-Csv записва ред, започващ със знаците #TYPE като първи ред на CSV файла. Опцията -NoTypeInformation в Export-Csv пропуска този допълнителен ред при извеждане на данни, така че обикновено посочвам тази опция.

Да приемем, че искате да създадете копие на Sample.csv, сортирано по свойството DisplayName. Всичко, което трябва да направите, е да импортирате файла, да изпратите съдържанието му на командата Sort-Object и след това да експортирате съдържанието в нов CSV файл:

Имайте предвид, че Export-Csv може да извежда данни от всеки обект на PowerShell, а не само обекти, създадени с Import-Csv. Например, погледнете тази команда:

Тази команда създава CSV файл, съдържащ файловете в текущата папка, сортирани по размер. Тази команда използва Select-Object, за да изберете пълното име на всеки файл, времето на последна промяна и размера на файла (дължината). Така че тези три свойства ще бъдат колони в CSV файла.

Импортирайте XML файлове

XML е друг тип текстов файл, който съхранява структурирани данни. Листинг 1 показва пример за XML представяне на данни от таблица.

Данните в XML документ са организирани йерархично. В Sample.xml (списък 1) имате основен елемент () и три дъщерни елемента (). Елементиса подредени по двойки и съдържат други елементи. Отварящият елемент използва ъглови скоби около името си, а затварящият елемент използва наклонена черта преди името на елемента. Когато работите с XML данни в PowerShell, трябва да имате един основен елемент. Други елементи се съдържат в коренния елемент.

PowerShell има команда Import-Clixml, но Import-Clixml не може да импортира Sample.xml, тъй като Sample.xml не съответства точно на формата, изискван от cmdlet. Вместо това можете да използвате cmdlet Get-Content и незадължителния тип предоставяне [Xml]: $Data = [Xml] (Get-Content Sample.xml).

След като командата бъде въведена, променливата $Data съдържа обект XmlDocument. Обектът XmlDocument включва две свойства: xml (елементът в горната част на файла) и база данни (основният елемент). Можете да изведете данни от XML файл по следния начин:

Тази команда произвежда точно същия резултат, както е показано на Фигура 2: Тя отпечатва три обекта с по две свойства всеки (DisplayName и Mail).

Ако данните от XML файла, който искате да импортирате, са запазени от Export-Clixml, нямате нужда от допълнителния ускорител на типа [Xml] и командата Get-Content. Вместо това можете да използвате Import-Clixml, което ще разгледам в следващия раздел.

Експортиране на XML файлове

Можете да експортирате XmlDocument обект във файл с помощта на Export-Clixml. Подобно на Export-Csv, командата Export-Clixml изисква име на файл. Помислете за тези команди:

Първата команда импортира Sample.xml (списък 1) като обект XmlDocument. Втората команда експортира обекта XmlDocument в Data.xml.

Import-Clixml е обратното на Export-Clixml. Import-Clixml връща XML файл, който е експортиран от Export-Clixml като обектXmlDocument. Например в следната команда Import-Clixml връща Data.xml:

След изпълнение на тази команда променливата $Data2 съдържа копие на същия обект XmlDocument, съхранен в $Data.

Имайте предвид, че можете да използвате командата Import-Clixml само за импортиране на XML файл, генериран от Export-Clixml. Това е така, защото XML файлът трябва да съдържа определен набор от елементи, за да може Import-Clixml да го импортира. Ако XML файлът не е в правилния формат, трябва да използвате незадължителния ускорител за тип [Xml] и Get-Content, както беше обсъдено в предишния раздел.

Управление на CVS и XML файлове

CSV и XML текстовите файлове са популярни формати за обмен на данни. Създателите на PowerShell ни предоставиха някои много мощни и лесни за използване команди, които ни помагат да импортираме и експортираме файлове и в двата формата. Ръчното анализиране на CSV и XML файлове е нещо от миналото.