Kako upravljati datoteke s Powershell

Zadnja posodobitev: 04/10/2024
Kako upravljati datoteke s Powershell

Sistemski skrbniki morajo vsak dan izvajati več standardnih operacij na številnih datotekah in mapah svojih strežnikov Windows . Ta opravila pogosto vključujejo upravljanje uporabniških podatkov v skupnih virih in zagotavljanje ustreznih varnostnih kopij. Če želite zmanjšati količino ročnega dela, ki ga to zahteva, lahko uporabite PowerShell.

V tem članku se boste naučili uporabljati PowerShell za:

  • Prikaži predmete v imeniku
  • Ustvarite datoteke in mape
  • Izbrišite datoteke in mape
  • Kopirajte datoteke in mape
  • Premikanje datotek ali imenikov
  • Preimenujte datoteke
  • Spremenite razširitve datotek
  • In veliko več

Preden začnete, se prepričajte, da vaš sistemski pravilnik dovoljuje izvajanje skriptov PowerShell.

Prikaži predmete v imeniku

Če si želite ogledati vsebino imenika na datotečnem strežniku Windows, uporabite ukaz »Get-ChildItem« . Če želite prikazati vse skrite datoteke, dodajte parameter »-Force«. Naslednji ukaz prikaže vse korenske objekte v mapi »Shared«.

Tukaj lahko izveste več o: Popravek: Posodobitev ni uporabna za vašo napravo

  • Get-ChildItem -Force \\ fs \ Shared

Če želite videti tudi vse podmape in njihovo vsebino, dodajte parameter -Recurse:

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

Za filtriranje rezultatov dodajte parametre Filter, Exclude, Include in Path ukazu »Get-ChildItem« . Za napredno filtriranje objektov uporabite ukaz »Where-Object« . Spodnji skript išče vse izvedljive datoteke v arhivu TI, ki so bile spremenjene po 1. aprilu 2018.

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

Ustvarite datoteke in mape s PowerShell

Če želite ustvariti nove objekte s lupo Windows PowerShell, lahko uporabite ukaz »New-Item« in določite vrsto elementa, ki ga želite ustvariti, na primer imenik, datoteko ali registrski ključ.

Ta ukaz na primer ustvari mapo:

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

In to ustvari prazno datoteko:

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

Ustvarite datoteke in vanje zapišite podatke

Obstajata vsaj dve vgrajeni metodi za ustvarjanje datoteke in zapisovanje podatkov vanjo. Prva je uporaba ukaza Out-File :

  • $text = 'Pozdravljen svet!' | Izhodna datoteka $text-FilePath C:\data\text.txt

Če želite prepisati obstoječo datoteko, uporabite parameter stikalo –Force. Datoteke lahko ustvarite tudi s cmdletom Export-Csv, ki izvozi rezultat v datoteko csv, ki jo je mogoče odpreti v Excelu:

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

Ustvarite datoteke, potem ko ste preverili, da še ne obstajajo

Naslednji skript preveri, ali določena datoteka (pctxt) že obstaja v določeni mapi. Če datoteka še ne obstaja, skript ustvari seznam vseh računalnikov z imenikom Active Directory in ga shrani v novo datoteko z imenom pctxt.

# ustvari vrsto besedilnih datotek

$files = Get-ChildItem C:\data\*. txt | izberite -razširite polno ime

# preveri, ali datoteka obstaja v nizu

$files -ujemajo se z “pc.txt”

# če ujemanje vrne "True", zapustite, če vrne "False", ustvarite poročilo

if ($files -eq 'False') {

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

}

več {izhod}

Izbrišite datoteke in mape s PowerShell

Za odstranitev elementov uporabite cmdlet Remove-Item. Ne pozabite, da boste med izvajanjem pozvani k potrditvi, če predmet ni prazen. Naslednji primer prikazuje, kako izbrišete mapo IT, vse njene podmape in datoteke, ki jih vsebuje:

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

Potrdi

Element v \\ pdc \ shared \ ima otroke in parameter Recurse ni bil podan. Če nadaljujete, bodo vsi podrejeni elementi odstranjeni z elementom.

Ste prepričani, da želite nadaljevati?

[Y] Da [A] Da vsem [N] Ne [L] Ne vsem [S] Prekini [?] Pomoč

(privzeto je »Y«):

Če ste že preverili, ali je treba vse predmete v mapi izbrisati, ali lahko uporabite stikalo? Nadomestni način za preskok potrditvenega koraka:

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

Izbrišite datoteke in mape, starejše od X dni

Včasih je treba počistiti stare datoteke iz določenega imenika. To nalogo opravite tako:

$Folder = “C:\Backups”

#odstrani datoteke, starejše od 30 dni

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

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

ForEach-Object {

$_ | -Sila

$_. Polno ime | Izhodna datoteka C:\log\deletedbackups.txt -Prip

}

Izbrišite datoteke, potem ko preverite, ali obstajajo

Tukaj je opisano, kako preverite, ali datoteka obstaja, in jo izbrišite, če obstaja:

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

If (Test-Path $FileName) {

   Izbriši element $FileName

}

Izbrišite datoteke v več računalnikih z enim skriptom

Če želite izbrisati datoteke v oddaljenih računalnikih, morate imeti varnostna dovoljenja za dostop do njih. Prepričajte se, da uporabljate poti UNC, da skript pravilno določi lokacijo datotek.

  Kako animirati grafikone v Powerpointu

$filelist = @(«\c$\Temp», «\c$\Backups») # spremenljivka za brisanje datotek in map

$computerlist = Get-Content C:\data\pc.txt # pridobi seznam oddaljenih računalnikov

    foreach ($računalnik v $seznamu računalnikov) {

        foreach ($file v $filelist) {

            $ filepath = Join-Path «\\ $computer \» «$ filelist» # ustvari unc poti do datotek in map

            če (testna pot $filepath)

            {

            Izbriši element $filepath -force -recurse -ErrorAction Nadaljuj}}}

Kopirajte datoteke in mape s PowerShell

Ukaz »Copy-Item« vam omogoča kopiranje objektov z ene poti na drugo. Naslednji ukaz ustvari varnostno kopijo tako, da kopira datoteko usars.xlsx iz oddaljenega računalnika (fs) in jo shrani v drug računalnik (fs2) prek omrežja:

  • Kopiraj element -Path\\ fs\Shared\it\usas.xlsx -Destination\\ fs2\Backups\it\usas.xlsx

Če ciljna datoteka že obstaja, poskus kopiranja ne bo uspel. Če želite prepisati obstoječo datoteko, tudi če je samo za branje, uporabite parameter -Force.

  • Kopiraj element -Path\\ fs\Shared\it\usas.xlsx -Destination\\ fs2\Backups\it\usas.xlsx -Force

Kopirajte datoteke z lupino PowerShell v oddaljeni računalnik ali iz njega

Če kopirate datoteke v oddaljene računalnike ali iz njih, uporabite poti UNC.

Na primer , s tem ukazom lahko kopirate datoteke z oddaljenega datotečnega strežnika v lokalni imenik C::

  • Kopiraj element \\ fs \ c $ \ temp -Recurse C: \ data \

Če želite kopirati datoteke iz lokalnega imenika v oddaljeno mapo, preprosto obrnite izvorno in ciljno lokacijo:

  • Kopiraj element C:\data\-Recurse\\fs\c$\temp

Kopirajte več datotek iz enega strežnika v drugega prek omrežja s pomočjo skripta

Datoteke lahko kopirate tudi z enega oddaljenega strežnika na drugega. Naslednji skript rekurzivno kopira mapo \\fs\Shared\temp v \\fs\Shared\test :

  • Kopiraj element \\ fs \ Shared \ temp -Recurse \\ fs \ Shared \ test

Kopirajte samo določene vrste datotek

Če želite kopirati samo določene datoteke iz vira v cilj, uporabite parameter -Filter. Naslednji ukaz na primer kopira samo datoteke txt iz ene mape v drugo:

  • Kopiraj element -Filter *.txt -Pot \\ fs \ Shared \ it -Recurse -Destination \\ fs2 \ Shared \ text

Kopirajte datoteke z ukazi XCOPY in ROBOCOPY ali objekti COM

Zaženete lahko tudi ukaza XCOPY in ROBOCOPY za kopiranje datotek ali uporabo objektov COM, kot v naslednjem primeru:

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

Premikanje datotek in imenikov s PowerShell

Ukaz »Move-Item« premakne element skupaj z njegovimi lastnostmi, vsebino in podrejenimi elementi z ene lokacije na drugo. Prav tako lahko premakne datoteko ali poddirektorij iz enega imenika na drugo lokacijo.

Naslednji ukaz premakne določeno varnostno kopijo z ene lokacije na drugo:

  • Move-Item -Path \\ fs \ Shared \ Backups \ 1.bak -Destination \\ fs2 \ Backups \ archive \ 1.bak

Ta skript premakne celotno mapo Varnostne kopije in njeno vsebino na drugo lokacijo:

  • Move-Item -Path \\ fs \ Shared \ Backups -Destination \\ fs2 \ Backups \ archive

Imenik Varnostne kopije in vse njegove datoteke in podmape bodo prikazani v arhivskem imeniku.

Preimenujte datoteke s programom Powershell

Ukaz »Rename-Item« vam omogoča preimenovanje predmeta brez spreminjanja njegove vsebine. Elementov ni mogoče premikati z ukazom »Rename-Item«. Če želite to narediti, morate uporabiti ukaz »Move-Item«, kot je bilo pojasnjeno že prej.

Naslednji ukaz preimenuje datoteko:

  • Preimenuj element -Pot «\\ fs \Shared \temp.txt» -Novo ime «new_temp.txt»

Preimenujte več datotek

Če želite preimenovati več datotek hkrati, uporabite skript, kot je ta:

$files = Get-ChildItem -Path C:\Temp #create seznam datotek

foreach ($file v $files)

{

    $newFileName = $file.Name.Replace("A", "B") #zamenjaj "A" z "B"

    Preimenujte element $file $newFileName

}

Urejanje končnic datotek s PowerShell

Za spreminjanje končnic datotek lahko uporabite tudi ukaz Rename-Item . Če želite hkrati spremeniti končnice več datotek, uporabite ukaz »Rename-Item« skupaj z ukazom »Get-ChildItem«.

Naslednji skript spremeni vse pripone datotek iz "txt" v "bak". Nadomestni znak (*) se uporablja za vključitev vseh besedilnih datotek:

  • Get-ChildItem \\ fs \ Shared \ Dnevniki \ *. Txt | Preimenuj element -Novo ime {$_. Ime – zamenjaj '\.txt$', '. Bak'}

Get-Content - Kako prebrati vsebino datoteke v lupini PowerShell?

Cmdlet Get-Content je eden od ukazov, ki jih morate imeti pri analizi skriptov PowerShell. Omogočil vam bo branje vsebine datoteke v lupini PowerShell, kar je zelo pogosto dejanje. Poleg branja podatkov lahko uvozimo podatke v spremenljivko za uporabo v skriptu PowerShell. Uporabite lahko Get-Content, da na primer pridobite vsebino dnevniške datoteke.

  Rešitev: Napaka pri delovanju strežnika v programu Windows Media Player

Videli bomo, da je Get-Content zmogljiv ukaz »cmdlet«, ki zmore več kot le pridobivanje celotne vsebine datoteke, zato je zanimivo, da mu posvetimo celoten članek. Ta ukaz »cmdlet« deluje v sistemih Windows PowerShell 5.1 in PowerShell, vključno z najnovejšo različico do danes: PowerShell 7.1.1.

II. Preprosto preberite vsebino datoteke

Za začetek bomo preprosto prebrali vsebino besedilne datoteke, ki vsebuje seznam vrednosti. Če želite slediti temu delu vadnice, ustvarite datoteko z imenom » Paystxt « in jo shranite v » C:\TEMP «. Ta datoteka mora vsebovati naslednje:

  • Francija
  • Kostarika
  • Belgiji
  • Švicarski
  • Španija
  • Kolumbija
  • Slovenija
  • Brasil
  • Islandijo
  • Nikaragva

Koraki za branje vsebine v programu Powershell

  1. korak 1: Za branje in prikaz vsebine te datoteke v konzoli je ukaz zelo preprost, saj morate samo določiti ime datoteke (ali celotno pot, če ni v trenutnem imeniku):
  2. korak 2: Dobiš vsebino «C:\TEMP\Pays txt»
C:\TEMP\Pays txt
C:\TEMP\Pays txt
  1. korak 3: Parameter -Pot bo implicitno uporabljen za to vrednost. Če napišemo ukaz spodaj, je enak.
    1. Get-Content -Pot «C:\TEMP\Pays txt»

OPOMBA : Prikazovanje vsebine v konzoli ni zelo uporabno. Bolj zanimivo je, ko bomo vsebino datoteke shranili v spremenljivko, da jo bomo lahko izkoristili. Vse, kar morate storiti, je, da ustvarite spremenljivko, na primer $Country , in ji kot vrednost podajte vsebino datoteke.

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

Iz radovednosti si lahko ogledamo tip spremenljivke $Country, potem ko ji dodelimo vrednost:

  • $Country.GetType()
Kako upravljati datoteke s Powershell
$Country.GetType()

Vidimo lahko, da dobimo dve ustrezni informaciji : " Object[] " in " System.Array ". Ukvarjamo se z objektom v obliki polja vrednosti; to je zanimivo!

Če želite prešteti število elementov v tej besedilni datoteki, lahko to storimo na dva različna načina:

  • $Pays.Count
  • ($Država | Predmet merjenja). Število

Imamo 10 elementov, ker gre za matriko; prva vrednost ustreza indeksu 0, zadnja pa indeksu 9 (ker imamo samo 10 elementov). Zato bo vrednost pri indeksu 0 "Francija", vrednost pri indeksu 9 pa Nikaragva.

Če želite poizvedovati po vrednosti, ki jo najdete pri indeksu 0, to je prvi vrednosti, je zelo preprosto:

  • $ Država [0]

Ali če vam je ljubše, se vse skrči na:

  • (Pridobite vsebino “C:\TEMP\Pays txt”) [0]

V istem smislu obstaja trik za pridobitev zadnje vrednosti, ne da bi vedeli natančno številko indeksa! Preprosto uporabite "-1" kot številko za indeks:

  • (Pridobi vsebino “C:\TEMP\Pays txt”) [-1]
"C:\TEMP\Pays txt") [-1]
«C:\TEMP\Pays txt») [-1]

Namesto da bi vsebino datoteke pridobili kot tabelo, jo lahko pridobimo kot en sam niz. Preprosto dodajte parameter -Raw ukazu:

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

Nadaljujmo z nekaj praktičnimi primeri.

III. The rep od Linux na način PowerShell

V Linuxu se zelo pogosto uporablja ukaz `tail` za prikaz zadnjih nekaj vrstic datoteke . Pogosto ga uporabljam za poizvedovanje po dnevniški datoteki, še posebej zato, ker je izhod dinamičen: če se v datoteko dodajo vrstice, se bodo med izvajanjem prikazovale v konzoli.

To je zelo praktično in enako je mogoče storiti v PowerShellu z uporabo Get-Content in možnosti z imenom ... -Tail ter druge možnosti -Wait !?

Brez možnosti -Wait lahko pridobimo zadnjih X vrstic datoteke samo z uporabo možnosti -Tail. Na primer, za pridobitev zadnjih 5 vrstic naše datoteke Pays.txt:

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

Zdaj, če želimo prikazati zadnjih 5 vrstic in počakati, da pridobimo prihodnje vrstice, dodane v datoteko, bomo uporabili to sintakso:

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

Če želite to preizkusiti, zaženite zgornji ukaz in nato spremenite datoteko » Pays txt «, da dodate vrstico: videli jo boste skoraj v realnem času v konzoli PowerShell, kjer se ukaz izvaja.

Pravzaprav z ukazom `-Wait` `Get-Content` ohrani datoteko odprto in vsako sekundo preverja novo vsebino. Za zaključek ukaza preprosto pritisnite » CTRL + C «.

Zavedati se morate, da lahko uporabite možnost -Samo čakaj : v tem primeru bo celotna datoteka prikazana v konzoli in nato ostala v čakanju.

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

IV. Pridobite prvih X vrstic datoteke

Na enak način lahko pridobimo prvih nekaj vrstic datoteke. V tem primeru ne bomo uporabili -Tail, temveč -TotalCount . Tudi tukaj morate določiti število vrstic, ki jih želite prikazati.

  • Get-Content «C:\TEMP\Pays txt» -TotalCount 5
  Prednosti omejitev pri prostorskem računanju

Po drugi strani pa možnost -Wait logično ni uporabna z možnostjo -TotalCount.

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

V. NTFS: glejte a zaporedje skrivnost v datoteki

Datotečni sistem NTFS je edinstven po tem , da ima različne » tokove « za shranjevanje podatkov. Ko se podatki zapišejo v datoteko, se shranijo v tok $DATA . Zato, ko dostopamo do datoteke, preberemo vsebino tega podatkovnega toka.

Poleg tega lahko vidimo, da ima naša datoteka » Pays txt « ta potek zaradi ukaza Get-Item:

  • Pridobite element "C:\TEMP\Pays txt" -Stream*

Opazimo tudi, da konzola vrne samo ta tok podatkov.

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

Odlična stvar je, da lahko ustvarite svoj prenos , da skrijete podatke v notranjosti!

Vse, kar morate storiti, je, da v našo datoteko » Pays.txt « dodate podatke in določite zaporedje , v katerem želite podatke poslati. Na primer, ustvarimo tok » Creds « z vrednostjo » Password «.

  • Add-Content -Path «C:\TEMP\Pays txt» -Stream Creds -Vrednost «Password»

Če zdaj ponovno prikažemo seznam prenosov v naši datoteki, dobimo nov vnos:

Add-Content -Path "C:\TEMP\Pays txt" -Stream Creds -Vrednost "Password"
Add-Content -Path «C:\TEMP\Pays txt» -Stream Creds -Vrednost «Password»

Če se zabavamo s prikazovanjem vsebine naše datoteke, bomo videli, da se vrednost »Geslo«, ki sem jo pravkar dodal v datoteko, ne prikaže.

  • Pridobite vsebino "C:\TEMP\Pays txt"

Poleg tega lahko za poizvedbo po privzetem toku določite njegovo ime za parametrom -Stream funkcije Get-Content (bodite pozorni na sintakso):

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

Če želite prikazati vsebino toka » Creds« , ki smo ga ustvarili prej, preprosto izgovorite tole:

  • Pridobite vsebino "C:\TEMP\Pays txt" - Stream Creds

Ukaz bo vrnil eno samo vrednost: Geslo

Dokaz na spodnji sliki:

Add-Content -Path "C:\TEMP\Pays txt" -Stream Creds -Vrednost "Password"

Dobro je vedeti, vendar ne smemo misliti, da je to čudežna rešitev za skrivanje gesel ali zaupnih podatkov. Pravzaprav lahko svoj sistem pregledate s posebnimi orodji ali z ukazom Get-ChildItem za datoteke, ki imajo dodaten tok poleg privzetega $DATA.

To je nekoliko izven teme, vendar za izvedbo te analize iz tekoče mape kot izhodišče:

  • Get-ChildItem -Recurse | ForEach{Get-Item$_. Polno ime -Stream *} | Kam -ne' se prenaša: $Data'

Ta ukaz bo pridobil našo datoteko Pays.txt in poslal »Creds?«. Zelo verjetno je, da bodo dokumenti sistema Office označeni tudi v izpisu ukaza z zaporedjem , imenovanim » Zone.Identifier «. Ta vsebuje ID, ki sistemu omogoča, da prepozna območje, ki mu ta datoteka pripada ( intranet, internet itd., v nasprotju z območji IE).

Morda vas bo zanimalo branje o tem, kako odpraviti visoko porabo procesorja zaradi Searchindexer.exe

Zaključek

Kot lahko vidite, lahko s PowerShellom upravljate svoje datoteke na naslednji način. Z uporabo navodil v tem članku lahko avtomatizirate različne preproste operacije upravljanja datotek v svojih sistemih za shranjevanje datotek in prihranite čas, ki ga lahko namenite pomembnejšim nalogam. Upamo, da so bile te informacije koristne.