W serii PowerShell, przyglądamy się pracy z plikami w PowerShell. Pierwszym typem plików, które będziemy omawiać są pliki typu CSV (comma separated values). Przyjrzymy się dwóm ważnym cmdletom import-csv/export-csv, które są powszechnie używane podczas pracy z CSV.
Zaczniemy od rozszerzenia pliku CSV, ponieważ jest to najbardziej podstawowe rozszerzenie. Skorzystamy z poprzedniego przykładu, w którym zapisaliśmy do pliku aktualnie uruchomione procesy:
#Defining file for export$exportedFile = 'C:\temp\exportedProcesses.csv'#Exporting as CSV - basicGet-Process | Export-Csv $exportedFile#Opening the filepsedit $exportedFile
Domyślnie Export-Csv zapisuje plik w formacie comma-delimited przy użyciu kodowania ASCII i całkowicie nadpisuje każdy plik o tej samej nazwie.
Export-Csv może być użyty do dodania linii do istniejącego pliku przy użyciu parametru Append. Kiedy parametr Append jest używany, obiekt wejściowy musi mieć każde z pól wymienionych w nagłówku CSV lub zostanie wyrzucony błąd, chyba że użyty zostanie parametr Force.
Po uruchomieniu tego prostego przykładu, będziesz miał przed sobą otwarty plik CSV, który składa się ze wszystkich procesów i każdej wartości, oddzielonych przecinkami. CSV to właśnie skrót od comma-separated values (wartości oddzielone przecinkami). Zaletą pracy z plikami CSV jest to, że zwracane są obiekty niestandardowe przypominające tabelę, które można łatwo filtrować. Ten typ pliku ma sens, szczególnie dla prostych obiektów danych.
Export-Csv może zostać poinstruowany, aby wykluczyć ten nagłówek za pomocą parametru NoTypeInformation:
Get-Process | Export-Csv processes.csv -NoTypeInformation
Import jest bardzo prosty.
#Importing CSV file$data = Import-Csv $exportedFile#Showing content$data | Out-GridView
Pliki CSV są zwykłym tekstem. Aplikacje takie jak Microsoft Excel mogą pracować z plikami CSV bez zmiany formatu pliku, chociaż zaawansowane funkcje Excela nie mogą być zapisane do pliku CSV.
Domyślnie Import-Csv oczekuje, że dane wejściowe będą miały wiersz nagłówka, będą ograniczone przecinkami i będą kodowane w ASCII. Jeśli któryś z tych elementów jest inny, można użyć parametrów polecenia. Na przykład, tabulator może być ustawiony jako separator.
Import-Csv TabDelimitedFile.tsv -Delimiter `t
Tik, po którym następuje t (`t) jest używany do reprezentowania znaku tabulacji w PowerShell.
Dane importowane za pomocą Import-Csv będą zawsze sformatowane jako łańcuch. Jeśli Import-Csv zostanie użyty do odczytania pliku zawierającego poniższy tekst, każda z liczb będzie traktowana jako ciąg znaków.
#Showing its type$data | Get-Member # TypeName: CSV:System.Diagnostics.Process$data.GetType() # PSCustomObject$data.GetType() # System.Array
Ciekawie jest zobaczyć tutaj, jaki typ jest pobierany po zaimportowaniu pliku CSV. Sam cmdlet Get-Member na obiekcie $data pokazuje, że jest to plik CSV, a wyeksportowane obiekty są typu System.Diagnostics.Process. Jednak po dokładnym przyjrzeniu się pierwszemu obiektowi i typowi kontenera, można zauważyć, że importowany obiekt nie może być już używany jako proces. Stał się on obiektem PSCustomObject. Niemniej jednak, jest to wciąż ulepszenie w stosunku do eksportowania go jako zwykłego łańcucha. Możesz go łatwo zaimportować i używać jako prostego magazynu danych.
Kolejną dużą zaletą podczas pracy z plikami CSV jest to, że można je edytować za pomocą Microsoft Excel. Aby to osiągnąć, wystarczy zmienić delimiter z przecinka (,) na średnik (;), ponieważ jest to domyślny delimiter dla plików Excela. Możesz użyć dedykowanej flagi -Delimiter do tego zadania.
#Exporting as CSV with specified delimiter ';'Get-Process | Export-Csv C:\temp\exportedProcesses.csv -Delimiter ';'#Importing the data$data = Import-Csv C:\temp\exportedProcesses.csv -Delimiter ';'#Showing the data$data | Out-GridView
Bądź jednak ostrożny, ponieważ jest to zachowanie specyficzne dla danej kultury. Aby uniknąć problemów z różnymi kulturami, możesz użyć flagi -UseCulture.
Teraz edycja w Excelu jest możliwa. Aby zademonstrować moc PowerShella, otworzymy teraz plik w Excelu za pomocą PowerShella i użycia ComObject samego Excela.
#Create ComObject for Excel$excel = New-Object -ComObject Excel.Application#Make it visible$excel.Visible = $true#Open the CSV file$excel.Workbooks.Open($exportedFile)
Możesz spróbować otworzyć plik CSV, który został wyeksportowany z przecinkiem i średnikiem, aby samemu zobaczyć różnicę między tymi dwoma podejściami.
Zakończenie:
Objęliśmy już sekcję, aby zrozumieć pracę z CSV. Objęliśmy cmdlets export-csv do podczas próby eksportu plików jako CSV. Są one najczęściej używane podczas raportowania, które mogą być bezpośrednio oglądane za pomocą Excela. Mam osobiście używane Export-CSV i import-CSV podczas pracy z platformy azure, które będziemy pokrywać niektóre inne dni w szczegółach.
.