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.
$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.
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
- 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):
- krok 2: Dostanete obsah «C:\TEMP\Pays txt»
- krok 3: Parameter -Cesta sa pre túto hodnotu použije implicitne. Ak napíšeme príkaz nižšie, je to rovnaké.
- 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()
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]
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
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
Na druhej strane, a logicky, možnosť -Wait nie je užitočná s možnosťou -TotalCount.
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.
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:
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:

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é.
Volám sa Javier Chirinos a som nadšený technológiou. Odkedy si pamätám, mal som rád počítače a videohry a tento koníček skončil v zamestnaní.
Už viac ako 15 rokov publikujem o technike a vychytávkach na internete, najmä v mundobytes. S
Som tiež odborník na online komunikáciu a marketing a mám znalosti o vývoji WordPress.
Index
- 1 Zobraziť objekty v adresári
- 2 Vytvárajte súbory a priečinky pomocou PowerShell
- 3 Odstráňte súbory a priečinky pomocou PowerShell
- 4 Skopírujte súbory a priečinky pomocou PowerShell
- 5 Presuňte súbory a adresáre pomocou PowerShell
- 6 Premenujte súbory pomocou Powershell
- 7 Upravte prípony súborov pomocou PowerShell
- 8 Get-Content – Ako čítať obsah súboru v PowerShell?
- 9 Záver