Articles

PowerShell Basics: Out-File cmdlet, -Append, -NoClobber z przykładami kodu

Posted on

PowerShell zapisuje do pliku tekstowego z: Out-File

Przeglądanie wyjścia skryptu na ekranie jest dobre i przyjemne, ale często wygodniej jest powiedzieć PowerShellowi, aby zapisał wyjście do pliku tekstowego. To zadanie dla Out-File.

Mamy tu instrukcję PowerShella, którą wystarczy przykręcić do istniejącego skryptu. ….. | Out-File „Filename.txt”. Nawiasem mówiąc, prostota Out-File jest jednym z powodów, dla których warto stosować PowerShell zamiast VBScript.

Tematy dla PowerShella Wyjście do pliku

  • Wprowadzenie do Out-File
  • Badaj Out-File za pomocą Get-Help
  • Przykład 1 – Rozpoczęcie pracy z Out-File
  • Przykład 2 – Wykorzystanie Out-File to Work
  • Eksperyment 3 – Więcej parametrów (-Append i -NoClobber)

Wprowadzenie do Out-File

Zapisywanie wyników polecenia do pliku jest łatwe dzięki Out-File PowerShella. Największym niebezpieczeństwem jest 'over-think'; wystarczy pamiętać, że PowerShell zajmuje się podstawowymi operacjami na plikach automatycznie. W związku z tym nie ma potrzeby tracić czasu na szukanie nieistniejących komend open-file, czy save-file. Jeśli plik określony przez polecenie Out-File jeszcze nie istnieje, PowerShell utworzy go za Ciebie.

Ten cmdlet działa zwodniczo prosto; zakładając, że pierwsza część skryptu dostarczy wyniki, wystarczy przekierować dane wyjściowe do pliku za pomocą polecenia takiego jak:
… main PowerShell command | Out-File C:\ logs\result1.txt.

Przykład 1 – Rozpoczęcie pracy z Out-File

Przykład ten został zaprojektowany tak, aby skupić się na poleceniu Out-File. W rzeczywistości, im szybciej przejdziemy do przykładu 2, tym szybciej będziemy mogli wykonać jakąś prawdziwą pracę.

# PowerShell write to text fileGet-ChildItem "C:\Windows\System32" | Out-File "D:\Files\Sys32.txt"

Uwaga 1: Podczas gdy Out-File tworzy plik, musisz się upewnić, że ścieżka istnieje, ponieważ Out-File nie może tworzyć folderów. W tym przypadku, możesz chcieć zmienić D: \Files na istniejący folder na twoim komputerze.

Przykład 2 – Putting Out-File to Work

Ten przykład posiada dodatkowe funkcje, które czynią skrypt bardziej użytecznym. Dzięki parametrowi -recurse, skrypt jest przystosowany do drążenia podkatalogów. Znak zapytania '?' wprowadza instrukcję 'Where-Object', której zadaniem jest filtrowanie tylko plików dll. W tym przykładzie wyjście zawiera tylko dwie interesujące nas właściwości pliku: Name i CreationTime.

Uwaga 3: Parametr -filepath jest opcjonalny. Jeśli pominiemy parametr -filepath, inteligencja PowerShella wywnioskuje z sekwencji poleceń, że „D:\file\dll.txt” jest miejscem, w którym należy zapisać plik. Jeśli w ścieżce nie ma spacji, to można nawet pominąć znaki mowy.

Uwaga 4: Jeśli otrzymasz komunikat o błędzie „Nie można znaleźć części ścieżki”, to zmień D: \Files do prawdziwego folderu na twojej maszynie.

Uwaga 5: Staram się nie używać symbolu backtick `, zamiast tego zakończyłem linię 2 symbolem | pipe… W rezultacie PowerShell zdaje sobie sprawę, że polecenie jest kontynuowane w następnej linii.

Poprawki:

  1. Można by zmienić gci „C:\Windows\System32” -Recurse -ErrorAction SilentlyContinue
  2. Jeśli przydałoby się dołączyć: Invoke-Item „D:\Piles\dll.txt”

Guy Recommends: Network Performance Monitor (FREE TRIAL)

SolarWinds Network Performance Monitor (NPM) pomoże Ci odkryć co dzieje się w Twojej sieci. Narzędzie to poprowadzi Cię również przez rozwiązywanie problemów; tablica rozdzielcza wskaże, czy przyczyną jest uszkodzone łącze, wadliwy sprzęt czy przeciążenie zasobów.

To, co podoba mi się najbardziej, to sposób, w jaki NPM sugeruje rozwiązania problemów z siecią. Posiada również możliwość monitorowania kondycji poszczególnych maszyn wirtualnych VMware. Jeśli jesteś zainteresowany rozwiązywaniem problemów i tworzeniem map sieciowych, to polecam wypróbowanie NPM na 30-dniowym bezpłatnym okresie próbnym.

SolarWinds Network Performance Monitor Download 30-day FREE Trial

Research Out-File With Get-Help

Kiedy już dostanę polecenie do pracy i podoba mi się ono, chcę wiedzieć więcej. Get-Help zawsze ujawnia przynajmniej jeden parametr, który wziąłem za pewnik, zapomniałem, lub wcześniej przeoczyłem, tak jest z zapisem PowerShella do pliku tekstowego.

Clear-HostGet-Help Out-File -full

Uwaga 2: Pomoc Out-File -full również działa. Należy pamiętać, że nie ma potrzeby stosowania rury (|) z help.

Jeśli dołączymy przełącznik -full, wtedy pomoc PowerShella ujawnia przydatne parametry, na przykład -filepath (brane za pewnik) -Append (zapomniane) -NoClobber (wcześniej przeoczone).

Zobacz więcej przykładów wyjścia PowerShella do pliku”

Przykład 3 – Więcej parametrów (-Append i -NoClobber)

Jeśli uruchomisz skrypt po raz drugi, czy zauważyłeś jak Out-File nadpisuje informacje? Jeśli twoim zamiarem było dodanie danych na końcu pliku, to jednym z rozwiązań byłoby zastąpienie Out-File przez add-Content. Jednak ze względu na lepsze formatowanie, wolę pozostać przy Out-File i dodać parametr -Append.

PowerShell Out-File -Append

Out-File może być złośliwy w tym, że nadpisuje plik. Na szczęście Out-File posiada parametr -Append, dzięki czemu można po prostu dodać dane na koniec istniejących wpisów.

# PowerShell Out-File -Append$File ="C:\PowerShell\Processes.txt"Get-Date | Out-File $FileGet-Process | Out-File $File -Append

Uwaga 6: Można dodać kolejny -Append na koniec linii Get-Date.

Inny przykład -Append

| Out-File -Filepath "D:\Files\dll.txt" -Append

PowerShell -NoClobber

Co może oznaczać 'No Clobber'? Zgubiłeś swoje ubrania? Nie tak, NoClobber oznacza nie nadpisuj pliku. Wydaje mi się, że włączyłbyś -NoClobber w okolicznościach, w których twoim zamiarem było zapisanie wielu plików o nieco innych nazwach, i nie chciałbyś ryzykować utraty ich zawartości przez nadpisanie.

| Out-File -filepath "D:\Files\dll June.txt" -NoClobber

Uwaga 7: Jeśli nalegasz na ponowne uruchomienie skryptu, parametr -NoClobber powoduje, że PowerShell generuje komunikat o błędzie i w ten sposób chroni oryginalny plik przed zastąpieniem.

Invoke-Item jest użyteczną techniką

Zobacz więcej na temat Invoke-Item”

Polecane: SolarWinds Permissions Analyzer for Active Directory (FREE TOOL)

Lubię Permissions Analyzer for Active Directory, ponieważ pozwala mi zobaczyć KTO ma uprawnienia do czego na pierwszy rzut oka. Kiedy uruchamiasz to narzędzie, analizuje ono efektywne uprawnienia NTFS użytkownika do określonego pliku lub folderu i bierze pod uwagę dostęp do udziałów sieciowych, a następnie wyświetla wyniki w eleganckim pulpicie nawigacyjnym!

Pomyśl o frustracji, którą to darmowe narzędzie SolarWinds oszczędza podczas rozwiązywania problemów z autoryzacją dostępu użytkownika do zasobów. Wypróbuj ten monitor uprawnień – jest darmowy!

SolarWinds Permissions Analyzer for Active Directory Pobierz 100% DARMOWE narzędzie

Rodzina zawartości PowerShella

Out-File jest honorowym członkiem rodziny 'Content', oto komendy kuzynów. Nie używam często tych innych poleceń, ponieważ nie formatują one danych tak, jak bym chciał.

Add-Content (Dodaje)
Clear-Content
Get-Content
Set-Content (Zastępuje istniejącą zawartość)

Out-Printer Cmdlet

Out-File ma siostrzane polecenie o nazwie out-Printer. Jeśli spróbujesz:
Help out-Printer

Wtedy zobaczysz, że nie musisz podawać nazwy drukarki, PowerShell automatycznie wybiera domyślną drukarkę, tak jak drukujesz z każdej innej aplikacji.

Możesz poeksperymentować, zastępując out-Printer dowolnym z powyższych poleceń Out-File

Out-GridView

W PowerShellu v 2.0 możesz wyprowadzać dane do GridView.

Export-Csv i Import-Csv

Arkusze kalkulacyjne są wygodnym narzędziem do importowania i eksportowania obiektów do Active Directory. Zacznij od dołączenia export-Csv do skryptów QAD, które listują użytkowników lub komputery.

Guy Poleca: SolarWinds Admin Bundle for Active Directory (FREE TOOL)

Importuj użytkowników z arkusza kalkulacyjnego. Wystarczy podać listę użytkowników z ich polami w górnym wierszu i zapisać jako plik .csv. Następnie uruchom to DARMOWE narzędzie i dopasuj swoje pola do atrybutów AD, kliknij i zaimportuj użytkowników.

Opcjonalnie możesz podać nazwę OU, w którym powstaną nowe konta. Pobierz swoje BEZPŁATNE narzędzie do masowego importu.

SolarWinds Admin Bundle Pobierz 100% BEZPŁATNY zestaw narzędzi

Jeśli potrzebujesz bardziej kompleksowego oprogramowania do analizy aplikacji, Pobierz bezpłatną wersję próbną SAM (Server & Application Monitor)

Inna technika: PowerShell Redirection

Na wiele sposobów jest to najprostsza technika. Wystarczy dodać znak większy niż >. Jednak najważniejszym powodem, dla którego warto przekierować wyjście polecenia PowerShell, jest nagrywanie komunikatów o błędach lub ostrzeżeniach.

Get-Service > D:\PShell\Services.txt

Uwaga 8: To jest to samo, co Get-Service | Out-File D:\Shell\Services.txt

Zabójczym powodem użycia tej techniki jest, jeśli chcesz przekierować komunikaty ostrzegawcze, na przykład chcesz sprawdzić, czy usługa jkl istnieje:

Get-Service jkl 2> D:\PShell\Services.txt

Uwaga 9: Kluczowe polecenie przekierowania to 2>

Zobacz więcej W PowerShell 3.0 Redirection”

Podsumowanie PowerShell’s Out-File Cmdlet

Zaufaj mi; będziesz bardzo dobrze wykorzystywać zdolność PowerShell do zapisu do pliku tekstowego. Out-File jest idealnym poleceniem do przesyłania wyników do pliku tekstowego. Jest to proste polecenie do przykręcenia do istniejących cmdletów. Głównym niebezpieczeństwem dla początkujących jest szukanie nieistniejących komend; pamiętaj, że PowerShell zajmuje się zarówno otwieraniem jak i zamykaniem nazwanego pliku.

Przypis:
Dzięki Danny’emu Beamanowi za poprawienie 3 błędów na tej stronie.

Zobacz więcej tutoriali Microsoft PowerShell dotyczących plików:

– PowerShell Home – Add-Content – Get-Content – Set-Content – PowerShell -Filter – Test-Path

– PowerShell Get-ChildItem – Get-ChildItem -Include – Get-ChildItem -.Exclude – Compare-Object

– PowerShell Registry – Get-Credential – PowerShell ItemProperty – PowerShell ItemPropery GCI

Proszę o maila jeśli ma Pan lepszy przykładowy skrypt. Proszę również o zgłaszanie błędów merytorycznych, gramatycznych oraz niedziałających linków, z chęcią je poprawię.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *