Ako spravovať súbory pomocou Powershell

Posledná aktualizácia: 04/10/2024
Ako spravovať súbory pomocou Powershell

Systémoví administrátori musia každý deň vykonávať niekoľko štandardných operácií s mnohými súbormi a priečinkami na svojich serveroch so systémom Windows . Tieto úlohy často zahŕňajú správu používateľských údajov na zdieľaných zdrojoch a zabezpečenie správnych záloh. Na zníženie množstva manuálnej práce, ktorú to so sebou prináša, môžete použiť PowerShell.

V tomto článku sa dozviete, ako používať PowerShell na:

  • Zobraziť objekty v adresári
  • Vytvárajte súbory a priečinky
  • Odstráňte súbory a priečinky
  • Kopírujte súbory a priečinky
  • Presuňte súbory alebo adresáre
  • Premenujte súbory
  • Zmeniť prípony súborov
  • A oveľa viac

Skôr ako začnete, uistite sa, že vám systémová politika umožňuje spúšťať skripty PowerShell.

Zobraziť objekty v adresári

Ak chcete zobraziť obsah adresára na súborovom serveri Windows, použite cmdlet Get-ChildItem . Ak chcete zobraziť všetky skryté súbory, pridajte parameter -Force. Nasledujúci príkaz zobrazí všetky koreňové objekty v priečinku „Zdieľané“.

Tu sa môžete dozvedieť viac o: Oprava: Aktualizácia nie je vhodná pre vaše zariadenie

  • Get-ChildItem -Force \\ fs \ Shared

Ak chcete vidieť aj všetky podpriečinky a ich obsah, pridajte parameter -Recurse:

  • Get-ChildItem -Force \\ fs \ Shared -Recurse

Ak chcete filtrovať výsledky, pridajte parametre Filter, Exclude, Include a Path do cmdletu Get-ChildItem . Pre pokročilé filtrovanie objektov použite cmdlet Where-Object . Skript nižšie vyhľadá všetky spustiteľné súbory v archíve TI, ktoré boli upravené po 1. apríli 2018.

  • Get-ChildItem -Path \\ fs \ Shared \ IT -Recurse -Include * .exe | Where-Object -FilterScript {($ _.LastWriteTime -gt '2018-04-01')}

Vytvárajte súbory a priečinky pomocou PowerShell

Na vytvorenie nových objektov pomocou prostredia Windows PowerShell môžete použiť cmdlet New-Item a zadať typ položky, ktorú chcete vytvoriť, napríklad adresár, súbor alebo kľúč databázy Registry.

Tento príkaz napríklad vytvorí priečinok:

  • New-Item -Path '\\fs\Shared\NewFolder' -ItemType Directory

A toto vytvorí prázdny súbor:

  • New-Item -Path '\\fs\Shared\NewFolder\newfile.txt' -ItemType File

Vytvárajte súbory a zapisovajte do nich údaje

Existujú najmenej dve vstavané metódy na vytvorenie súboru a zápis údajov doň. Prvou je použitie cmdletu Out-File :

  • $text = 'Ahoj svet!' | Výstupný súbor $text-FilePath C:\data\text.txt

Ak chcete prepísať existujúci súbor, použite parameter switch –Force. Súbory môžete vytvárať aj pomocou cmdlet Export-Csv, ktorý exportuje výsledok do súboru csv, ktorý možno otvoriť v Exceli:

  • Get-ADuse -Filter * | Export-Csv -Cesta C:\data\ADusars.csv

Vytvorte súbory po overení, že ešte neexistujú

Nasledujúci skript skontroluje, či v konkrétnom priečinku už existuje konkrétny súbor (pctxt). Ak súbor ešte neexistuje, skript vygeneruje zoznam všetkých počítačov v službe Active Directory a uloží ho do nového súboru s názvom pctxt.

# vytvorí sériu textových súborov

$files = Get-ChildItem C:\data\*. txt | vybrať -rozbaliť celé meno

# skontrolujte, či súbor existuje v reťazci

$files -zhoda „pc.txt“

# ak zhoda vráti hodnotu „True“, ukončite, ak vráti hodnotu „False“, vytvorte správu

if ($files -eq 'False') {

Get-ADComputer -Filter * | Export-Csv -Cesta C:\data\pc.txt

}

viac {exit}

Odstráňte súbory a priečinky pomocou PowerShell

Ak chcete položky odstrániť, použite rutinu cmdlet Remove-Item. Mali by ste mať na pamäti, že ak objekt nie je prázdny, budete počas behu vyzvaní na potvrdenie. Nasledujúci príklad ukazuje, ako odstrániť priečinok IT, všetky jeho podpriečinky a súbory, ktoré obsahuje:

Delete-Element-Path '\\ fs \ shared \ it \'

Potvrdiť

Prvok v \\ pdc \ shared \ má potomkov a parameter Recurse nebol zadaný. Ak budete pokračovať, všetky deti budú s prvkom odstránené.

Naozaj chcete pokračovať?

[Y] Áno [A] Áno všetkým [N] Nie [L] Nie všetkým [S] Pozastaviť [?] Pomocník

(predvolené je „Y“):

Ak ste už overili, že všetky objekty v priečinku by sa mali odstrániť, môžete použiť prepínač? Záložný krok na preskočenie kroku potvrdenia:

  • Delete-Item -Path '\\ fs \shared \it \' -Recurse

Odstráňte súbory a priečinky staršie ako X dní

Niekedy je potrebné vyčistiť staré súbory z určitého adresára. Tu je postup, ako vykonať túto úlohu:

$Folder = „C:\Backups“

#odstrániť súbory staršie ako 30 dní

Get-ChildItem $Folder -Recurse -Force -ea 0 |

? {! $_. PsIsContainer -a $_. LastWriteTime -lt (Get-Date).AddDays (-30)} |

ForEach-Object {

$_ | -Sila

$_. Celé meno | Výstupný súbor C:\log\deletedbackups.txt - Pripojiť

}

Odstráňte súbory po overení ich existencie

Tu je postup, ako overiť, či súbor existuje, a odstrániť ho, ak existuje:

$FileName = 'C:\data\log.txt'

If (Test-Path $FileName) {

   Odstrániť prvok $FileName

}

Odstráňte súbory na viacerých počítačoch pomocou jedného skriptu

Ak chcete odstrániť súbory na vzdialených počítačoch, musíte mať na prístup k nim bezpečnostné povolenia. Uistite sa, že používate cesty UNC, aby skript správne určil umiestnenie súborov.

  Typy sietí v Hyper-V, VirtualBox a VMware: konfigurácia a rozdiely

$filelist = @(«\c$\Temp», «\c$\Backups”) # premenná na mazanie súborov a priečinkov

$computerlist = Získať obsah C:\data\pc.txt # získať zoznam vzdialených počítačov

    foreach ($počítač v $zozname počítačov) {

        foreach ($file in $filelist) {

            $filepath = Join-Path «\\$computer\» «$filelist» # vygenerovať unc cesty k súborom a priečinkom

            if (testpath $filepath)

            {

            Odstrániť prvok $filepath -force -recurse -ErrorAction Pokračovať}}}

Skopírujte súbory a priečinky pomocou PowerShell

Rutina cmdlet Copy-Item umožňuje kopírovať objekty z jednej cesty do druhej. Nasledujúci príkaz vytvorí zálohu skopírovaním súboru usars.xlsx zo vzdialeného počítača (fs) a jeho uložením na iný počítač (fs2) cez sieť:

  • Kopírovať položku -Cesta\\ fs\Shared\it\usas.xlsx -Cieľ\\ fs2\Backups\it\usas.xlsx

Ak cieľový súbor už existuje, pokus o kopírovanie zlyhá. Ak chcete prepísať existujúci súbor, aj keď je len na čítanie, použite parameter -Force.

  • Kopírovať položku -Cesta\\ fs\Shared\it\usas.xlsx -Cieľ\\ fs2\Backups\it\usas.xlsx -Force

Skopírujte súbory pomocou PowerShell do alebo zo vzdialeného počítača

Ak kopírujete súbory do alebo zo vzdialených počítačov, nezabudnite použiť cesty UNC.

Napríklad , tento príkaz použite na kopírovanie súborov zo vzdialeného súborového servera do lokálneho adresára C::

  • Kopírovať prvok \\ fs \ c $ \ temp -Recurse C: \ data \

Ak chcete skopírovať súbory z miestneho adresára do vzdialeného priečinka, jednoducho obráťte zdrojové a cieľové umiestnenie:

  • Skopírujte položku C:\data\-Recurse\\fs\c$\temp

Skopírujte viacero súborov z jedného servera na druhý cez sieť pomocou skriptu

Súbory môžete kopírovať aj z jedného vzdialeného servera na druhý. Nasledujúci skript rekurzívne kopíruje priečinok \\fs\Shared\temp do \\fs\Shared\test :

  • Kopírovať prvok \\ fs \ Shared \ temp -Recurse \\ fs \ Shared \ test

Kopírujte len určité typy súborov

Ak chcete skopírovať iba určité súbory zo zdroja do cieľa, použite parameter -Filter. Napríklad nasledujúci príkaz skopíruje iba súbory txt z jedného priečinka do druhého:

  • Kopírovať prvok -Filter *.txt -Cesta \\ fs \ Shared \ it -Recurse -Cieľ \\ fs2 \ Shared \ text

Skopírujte súbory pomocou príkazov XCOPY a ROBOCOPY alebo objektov COM

Môžete tiež spustiť príkazy XCOPY a ROBOCOPY na kopírovanie súborov alebo použitie objektov COM, ako v nasledujúcom príklade:

  • (New-Object -ComObject Scripting.FileSystemObject).CopyFile('\\fs\Shared', 'fs2\Backup')

Presuňte súbory a adresáre pomocou PowerShell

Rutina cmdlet Move-Item presúva položku spolu s jej vlastnosťami, obsahom a podradenými položkami z jedného umiestnenia do druhého. Dokáže tiež presunúť súbor alebo podadresár z jedného adresára do iného umiestnenia.

Nasledujúci príkaz presunie konkrétny záložný súbor z jedného miesta na druhé:

  • Presunúť položku -Cesta \\ fs \ Zdieľané \ Zálohy \ 1.bak -Cieľ \\ fs2 \ Zálohy \ archív \ 1.bak

Tento skript presunie celý priečinok Zálohy a jeho obsah na iné miesto:

  • Presunúť položku -Cesta \\ fs \ Zdieľané \ Zálohy - Cieľ \\ fs2 \ Zálohy \ archív

Adresár Backups a všetky jeho súbory a podpriečinky sa zobrazia v adresári archívu.

Premenujte súbory pomocou Powershell

Rutina cmdlet Rename-Item umožňuje premenovať objekt bez úpravy jeho obsahu. Položky nie je možné presúvať pomocou príkazu Rename-Item. Na to je potrebné použiť rutinu cmdlet Move-Item, ako bolo vysvetlené vyššie.

Nasledujúci príkaz premenuje súbor:

  • Premenovať prvok -Cesta «\\fs\Shared\temp.txt» -NewName «new_temp.txt»

Premenujte viacero súborov

Ak chcete premenovať viacero súborov súčasne, použite takýto skript:

$files = Get-ChildItem -Cesta C:\Temp #vytvor zoznam súborov

foreach ($file in $files)

{

    $newFileName = $file.Name.Replace("A", "B") #nahradiť "A" za "B"

    Premenovať prvok $file $newFileName

}

Upravte prípony súborov pomocou PowerShell

Na zmenu prípon súborov môžete použiť aj príkaz Rename-Item . Ak chcete zmeniť prípony viacerých súborov naraz, použite cmdlet Rename-Item s cmdletom Get-ChildItem.

Nasledujúci skript zmení všetky prípony súborov z "txt" na "bak". Zástupný znak (*) sa používa na zahrnutie všetkých textových súborov:

  • Get-ChildItem \\ fs \ Shared \ Záznamy \ *. Text | Premenovať položku - Nový názov {$_. Názov – nahraďte '\.txt$', '. Bak'}

Get-Content – ​​Ako čítať obsah súboru v PowerShell?

Rutina cmdlet Get-Content je jedným z nevyhnutných príkazov pri analýze skriptov PowerShell. Umožní vám to čítať obsah súboru v PowerShell, čo je veľmi bežná akcia. Okrem čítania údajov môžeme údaje importovať do premennej, ktorú použijeme v skripte PowerShell. Get-Content môžete použiť napríklad na získanie obsahu súboru denníka.

  Pravé tlačidlo myši nefunguje. Príčiny a riešenia

Uvidíme, že Get-Content je výkonný cmdlet schopný robiť viac než len načítať celý obsah súboru, a preto je zaujímavé venovať mu celý článok. Tento cmdlet funguje v prostredí Windows PowerShell 5.1 a PowerShell vrátane najnovšej verzie: PowerShell 7.1.1.

II. Stačí si prečítať obsah súboru

Na začiatok si jednoducho prečítame obsah textového súboru obsahujúceho zoznam hodnôt. Ak chcete postupovať podľa tejto časti tutoriálu, vytvorte súbor s názvom „ Paystxt “ a uložte ho do priečinka „ C:\TEMP “. Tento súbor by mal obsahovať nasledovné:

  • Francúzsko
  • Kostarika
  • Belgicko
  • Švajčiarsky
  • španielsko
  • Kolumbia
  • Kanada
  • Brazília
  • Island
  • Nikaragua

Kroky na čítanie obsahu v Powershell

  1. krok 1: Na čítanie a zobrazenie obsahu tohto súboru v konzole je príkaz veľmi jednoduchý, pretože stačí zadať názov súboru (alebo úplnú cestu, ak nie je v aktuálnom adresári):
  2. krok 2: Dostanete obsah «C:\TEMP\Pays txt»
C:\TEMP\Pays txt
C:\TEMP\Pays txt
  1. krok 3: Parameter -Cesta sa pre túto hodnotu použije implicitne. Ak napíšeme príkaz nižšie, je to rovnaké.
    1. Get-Content -Path «C:\TEMP\Pays txt»

POZNÁMKA : Zobrazovanie obsahu v konzole nie je veľmi užitočné. Zaujímavejšie je, keď budeme ukladať obsah súboru do premennej, aby sme ho mohli využiť. Stačí vytvoriť premennú, napríklad $Country , a ako hodnotu jej priradiť obsah súboru.

  • $Country = Get-Content «C:\TEMP\Pays txt»

Zo zvedavosti sa môžeme pozrieť na typ premennej $Country po priradení hodnoty:

  • $Country.GetType()
Ako spravovať súbory pomocou Powershell
$Country.GetType()

Vidíme, že dostávame dve relevantné informácie : „ Object[] “ a „ System.Array “. Zaoberáme sa objektom vo forme poľa hodnôt; to je zaujímavé!

Ak chcete spočítať počet prvkov v tomto textovom súbore, môžeme to urobiť dvoma rôznymi spôsobmi:

  • $Pays.Count
  • ($Country | Measurement Object).Count

Máme 10 prvkov, keďže ide o maticu; prvá hodnota zodpovedá indexu 0 a posledná indexu 9 (keďže máme iba 10 prvkov). Preto hodnota na indexe 0 bude „Francúzsko“ a hodnota na indexe 9 bude Nikaragua.

Ak sa chcete opýtať na hodnotu nájdenú na indexe 0, teda na prvú hodnotu, je to veľmi jednoduché:

  • $ krajina [0]

Alebo ak chcete, scvrkáte sa na:

  • (Získajte obsah „C:\TEMP\Pays txt“) [0]

Rovnako ako na získanie poslednej hodnoty bez toho, aby ste poznali presné číslo indexu, existuje trik! Jednoducho použite "-1" ako číslo pre index:

  • (Získajte obsah „C:\TEMP\Pays txt“) [-1]
"C:\TEMP\Pays txt") [-1]
«C:\TEMP\Pays txt») [-1]

Namiesto načítania obsahu súboru ako poľa ho môžeme načítať ako jeden reťazec. Stačí pridať do príkazu parameter -Raw :

  • Get-Content -path «C:\TEMP\Pays txt» -raw
Get-Content -path "C:\TEMP\Pays txt" -raw
Get-Content -path «C:\TEMP\Pays txt» -raw

Pokračujme niekoľkými praktickými príkladmi.

III. The chvost Linux v štýle PowerShell

V Linuxe je veľmi bežné používať príkaz `tail` na zobrazenie posledných niekoľkých riadkov súboru . Často ho používam na dotazovanie súboru denníka, najmä preto, že výstup je dynamický: ak sa do súboru pridajú riadky, budú sa zobrazovať v konzole počas jeho spracovania.

Je to veľmi praktické a je možné urobiť to isté v PowerShelle pomocou Get-Content a možnosti s názvom... -Tail a druhej možnosti -Wait !?

Bez možnosti -Wait môžeme načítať posledných X riadkov súboru iba pomocou možnosti -Tail. Napríklad, ak chceme načítať posledných 5 riadkov nášho súboru Pays.txt:

  • Get-Content «C:\TEMP\Pays txt» -Chvost 5

Teraz, ak chceme zobraziť posledných 5 riadkov a čakať na načítanie budúcich riadkov pridaných do súboru, použijeme túto syntax:

  • Get-Content «C:\TEMP\Pays txt» -Chvost 5 -čakajte

Ak to chcete otestovať, spustite vyššie uvedený príkaz a potom upravte súbor „ Pays txt “ tak, aby ste doň pridali riadok: uvidíte ho zobrazený takmer v reálnom čase v konzole PowerShell, kde sa príkaz vykoná.

V skutočnosti, s príkazom `-Wait` , `Get-Content` ponecháva súbor otvorený a každú sekundu kontroluje nový obsah. Na ukončenie príkazu jednoducho stlačte „ CTRL + C “.

Mali by ste vedieť, že môžete použiť možnosť -Wait only : v tomto prípade sa celý súbor zobrazí v konzole a potom zostane čakajúci na spracovanie.

  • Get-Content «C:\TEMP\Pays txt» -Počkajte

IV. Získajte prvých X riadkov súboru

Podobne môžeme načítať prvých niekoľko riadkov súboru. V tomto prípade nepoužijeme -Tail, ale -TotalCount . Aj tu je potrebné zadať počet riadkov, ktoré sa majú zobraziť.

  • Get-Content «C:\TEMP\Pays txt» -TotalCount 5
  Neviditeľné nebezpečenstvo: Zastarané systémy v riadení kritickej infraštruktúry

Na druhej strane, a logicky, možnosť -Wait nie je užitočná s možnosťou -TotalCount.

Get-Content "C:\TEMP\Pays txt" -TotalCount 5
Get-Content «C:\TEMP\Pays txt» -TotalCount 5

V. NTFS: Pozri a sekvencie tajomstvo v súbore

Súborový systém NTFS je jedinečný v tom, že má rôzne „ streamy “, v ktorých ukladá dáta. Keď sa dáta zapisujú do súboru, ukladajú sa do streamu $DATA . Preto pri prístupe k súboru čítame obsah tohto dátového streamu.

Okrem toho vidíme, že náš súbor „ Pays txt “ má vďaka príkazu Get-Item tento postup:

  • Získať prvok "C:\TEMP\Pays txt" -Stream*

Všimli sme si tiež, že konzola vracia iba tento dátový tok.

C:\TEMP\Pays txt" -Stream *
C:\TEMP\Pays txt»-Stream*

Skvelé je, že si môžete vytvoriť vlastný prenos , aby ste skryli dáta vo vnútri!

Stačí pridať údaje do nášho súboru „ Pays.txt “ a určiť poradie , v akom sa majú údaje odosielať. Napríklad, vytvorme tok „ Creds “ s hodnotou „ Heslo “.

  • Add-Content -Cesta «C:\TEMP\Pays txt» -Stream Creds -Hodnota «Heslo»

Ak teraz znova zobrazíme zoznam prenosov v našom súbore, dostaneme nový záznam:

Pridať-obsah -Cesta "C:\TEMP\Pays txt" -Stream Creds -Hodnota "Heslo"
Add-Content -Cesta «C:\TEMP\Pays txt» -Stream Creds -Hodnota «Heslo»

Ak sa zabavíme pri zobrazovaní obsahu nášho súboru, uvidíme, že sa nezobrazí hodnota „Heslo“, ktorú som práve pridal do súboru.

  • Získať obsah "C:\TEMP\Pays txt"

Okrem toho, ak chcete dotazovať predvolený stream, môžete zadať jeho názov za parametrom -Stream funkcie Get-Content (venujte pozornosť syntaxi):

  • Get-Content «C:\TEMP\Pays txt» -Stream ':$DATA'

Ak chcete zobraziť obsah streamu „ Creds“ , ktorý sme vytvorili predtým, stačí povedať toto:

  • Získajte obsah "C:\TEMP\Pays txt" -Stream Creds

Príkaz vráti jednu hodnotu: Heslo

Dôkaz na obrázku nižšie:

Pridať-obsah -Cesta "C:\TEMP\Pays txt" -Stream Creds -Hodnota "Heslo"

Je dobré to vedieť, ale nemali by sme si myslieť, že je to zázračné riešenie na skrytie hesiel alebo dôverných údajov. V skutočnosti môžete systém prehľadať pomocou špecifických nástrojov alebo pomocou Get-ChildItem a vyhľadať súbory, ktoré majú ďalší stream okrem predvoleného $DATA.

Je to trochu mimo témy, ale vykonať túto analýzu zo spusteného priečinka ako východiskový bod:

  • Get-ChildItem -Recurse | Za každú {získať položku $_. Celé meno -Stream *} | Kde sa prenáša -ne': $Data'

Tento príkaz načíta náš súbor Pays.txt a odošle otázku „Creds?“. Je veľmi pravdepodobné, že dokumenty balíka Office budú tiež zvýraznené výstupom príkazu sekvenciou s názvom „ Zone.Identifier “. Táto sekvencia obsahuje ID, ktoré umožňuje systému rozpoznať zónu, do ktorej tento súbor patrí ( intranet, internet atď., na rozdiel od zón IE).

Možno vás bude zaujímať: Ako opraviť vysoké využitie CPU zo súboru Searchindexer.exe

Záver

Ako vidíte, takto môžete spravovať svoje súbory pomocou PowerShellu. Pomocou pokynov v tomto článku môžete automatizovať rôzne jednoduché operácie správy súborov vo svojich systémoch na ukladanie súborov a ušetriť čas, ktorý môžete venovať dôležitejším úlohám. Dúfame, že tieto informácie boli užitočné.