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.
$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.
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
- 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):
- korak 2: Dobiš vsebino «C:\TEMP\Pays txt»
- korak 3: Parameter -Pot bo implicitno uporabljen za to vrednost. Če napišemo ukaz spodaj, je enak.
- 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()
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]
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
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
Po drugi strani pa možnost -Wait logično ni uporabna z možnostjo -TotalCount.
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.
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:
Č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:

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.
Moje ime je Javier Chirinos in navdušen sem nad tehnologijo. Odkar pomnim, so mi bili všeč računalniki in video igre in ta hobi se je končal v službi.
O tehnologiji in pripomočkih na internetu objavljam že več kot 15 let, predvsem v mundobytes.com
Sem tudi strokovnjak za spletno komuniciranje in trženje ter poznam razvoj WordPressa.
Kazalo
- 1 Prikaži predmete v imeniku
- 2 Ustvarite datoteke in mape s PowerShell
- 3 Izbrišite datoteke in mape s PowerShell
- 4 Kopirajte datoteke in mape s PowerShell
- 5 Premikanje datotek in imenikov s PowerShell
- 6 Preimenujte datoteke s programom Powershell
- 7 Urejanje končnic datotek s PowerShell
- 8 Get-Content - Kako prebrati vsebino datoteke v lupini PowerShell?
- 9 Zaključek