Home
» Windows
»
PowerShell in vse, kar morate vedeti o tem pripomočku
PowerShell in vse, kar morate vedeti o tem pripomočku
Kaj če bi vaš računalnik lahko namesto vas opravil vsakdanja opravila? Z lupo Windows PowerShell to zmore. Tukaj je opisano, kako s PowerShellom avtomatizirati ponavljajoča se, vsakodnevna opravila, ki jih nihče noče opravljati znova in znova.
Microsoft PowerShell je pripomoček ukazne vrstice in skriptni jezik, ki je zmogljivo orodje za skrbnike, s katerim lahko avtomatizirajo širok nabor opravil za računalnike in omrežja. PowerShell vsebuje komponente ukazne vrstice in je zgrajen na ogrodju .NET. Če berete o WebTech360, morate vedeti, da je PowerShell orodje, ki ga izbirajo skrbniki IT za upravljanje velikih omrežij.
Učenje uporabe PowerShella bo poenostavilo številna dolgočasna vsakodnevna opravila. Spremembe na ravni celotnega sistema lahko izvajate tudi prek omrežja, ne da bi morali vsak strežnik posebej konfigurirati. PowerShell postaja bistveni del delovanja hibridnih oblačnih okolij .
PowerShell ima veliko različnih načinov uporabe, ki vam pomagajo pri učinkovitejšem delu in ohranjanju učinkovitega delovanja omrežja. Najosnovnejše uporabe vključujejo: načrtovanje dnevnih posodobitev sistemov, ustvarjanje poročil o trenutnih procesih, periodične storitve in drugo. Čeprav je veliko teh nalog mogoče opraviti prek grafičnega uporabniškega vmesnika, je namen PowerShella, da jih opravi hitreje.
Če imate rutinsko vzdrževalno nalogo, katere nastavitev traja nekaj minut, lahko isto funkcionalnost skriptirate v en sam ukaz z imenom PowerShell. Ko boste naslednjič odprli ta skript, se bo ta izvajal v ozadju. Če boste obvladali logiko skriptiranja PowerShella, razumeli delovanje objektov, spremenljivk (var) in jih inteligentno namestili v omrežju, se boste spraševali, zakaj niste PowerShella uporabili že prej.
Ta vadnica bo zajemala osnove PowerShella, kar bo koristno za tiste, ki so novi v IT-ju, še posebej, če poznate ukazni poziv sistema Windows. Ogledali si bomo, kako uporabljati osnovna orodja in ukaze, kako delati z datotekami in mapami, kako razumeti objekte, kako uporabljati spremenljivke in kako upravljati oddaljene strežnike.
Kratka zgodovina pripomočkov ukazne vrstice sistema Windows
Po izdaji sistema Windows NT je CMD.EXE postal pripomoček ukazne vrstice za Windows. Čeprav je CMD.EXE podedoval nekatere elemente od svojega predhodnika v sistemu DOS (COMMAN.COM), je še vedno temeljil na precej "primitivnem" skriptnem jeziku: uporabi ukaznih datotek sistema Windows (.CMD in .BAT). Dodatek programa Windows Scripting Host ter jezikov VBScript in JScript je močno izboljšal skriptne zmogljivosti pripomočka.
Te tehnologije so dokaj uravnotežena mešanica naprednih orodij ukazne vrstice in skriptnih okolij. Prava skrb ni, koliko datotek CMD.EXE, .CMD in datotek Windows Scripting Host je mogoče z njimi manipulirati. Glavna pritožba in skrb je opravljanje nekaterih na videz preprostih nalog.
Z uporabo »ogrodja« orodij ukazne vrstice in skriptov vsaka zmerno obsežna skripta zahteva kombinacijo paketnih ukazov, gostitelja skriptov sistema Windows in samostojnih izvedljivih datotek. Vsaka skripta uporablja različne konvencije za izvajanje in zahteve, razčlenjevanje in vračanje podatkov.
Slaba podpora spremenljivkam v CMD.EXE, nedosledni vmesniki in omejen dostop do nastavitev sistema Windows, skupaj z drugo slabostjo, otežujejo implementacijo in uporabo skriptov ukazne vrstice. Kaj je ta »druga slabost«, se morda sprašujete? To je besedilo. V teh tehnologijah je vse besedilo. Izhod ukaza ali skripte je besedilo in ga je treba razčleniti in preoblikovati, da deluje kot vhod za naslednji ukaz. To je osnovno izhodišče, ki ga PowerShell črpa iz vseh tradicionalnih lupin.
Predstavljamo orodja, ukaze in module PowerShell
Trije koncepti, predstavljeni v tem razdelku, so le osnove za razumevanje ključnih konceptov, ki tvorijo temelje PowerShella. Ko se boste lotili ukazov PowerShella, boste morali porabiti več časa za učenje in obvladovanje naprednejših konceptov.
Orodja PowerShell
PowerShell je privzeto nameščen v sistemih Windows 10, Windows 7, Windows Server 2008 R2 in novejših različicah sistema Windows. Novejše različice PowerShella dodajajo nove funkcije in »cmdlete« (Microsoftov izraz za ukaze PowerShell – izgovarja se »command-lets«) in so nameščene z ustrezno različico ogrodja Windows Management Framework (WMF).
Trenutno je WMF 5.1 najnovejša priporočena različica. V nekaterih primerih so nekatere nove funkcije poleg različice WMF odvisne tudi od operacijskega sistema. Na primer, Windows 8 in Windows Server 2012 podpirata ukaz »Test-NetConnection«, ki omogoča preizkus povezljivosti z določenimi vrati TCP/IP , vendar ta ukaz »cmdlet« ni na voljo v sistemu Windows 7, niti če uporabljate najnovejšo različico WMF.
V večini sistemov Windows imajo uporabniki na voljo dve okolji PowerShell, konzolo PowerShell in PowerShell ISE (Integrated Scripting Environment). Konzola PowerShell je videti kot tradicionalna ukazna vrstica, vendar s polno funkcionalnostjo PowerShella. Imena spremenljivk, zanke, samodejno dokončanje ukazov in cevovodi so na voljo v konzoli PowerShell.
Za naprednejšo uporabo (kot je skriptanje) PowerShell ISE ponuja samodejno dokončanje ukazov, označevanje kode in Microsoftovo dokončanje kode Intellisense, ki vam pomaga pri ustvarjanju in testiranju kode PowerShell. PowerShell ISE vam omogoča tudi delo z več skripti PowerShell hkrati z uporabo navigacije z zavihki.
ukazi »cmdlet« v PowerShellu
Temelj ukazov PowerShell je ukaz »cmdlet«. Microsoft je pri ustvarjanju ukazov »cmdlet« v PowerShellu uporabil več strategij oblikovanja.
Prva je možnost enostavnega sklepanja imen ukazov »cmdlet« ali vsaj njihove lažje odkritosti. Ukazi ali ukazi »cmdlet« PowerShell so zasnovani tudi za lažjo uporabo s standardizirano sintakso, kar olajša ustvarjanje skriptov iz vmesnika ukazne vrstice.
Ukazi »cmdlet« uporabljajo format glagol-samostalnik, kot so Get-Service, Stop-Service ali Import-Csv. Glagolski del imena ukaza »cmdlet« označuje dejanje, ki se izvede s samostalnikom. Običajno imajo ukazi »cmdlet«, ki se uporabljajo za pridobivanje informacij, v svojem imenu glagol » Get« , na primer Get-Process ali Get-Content . Ukazi, ki se uporabljajo za spreminjanje nečesa, se običajno začnejo z glagolom » Set« , ukazi, ki se uporabljajo za dodajanje nove entitete nečemu, pa se običajno začnejo z » Add« ali » New« .
Drugič, parametri, ki se pogosto uporabljajo v PowerShellu, dobijo tudi standardizirana imena. Na primer, parameter -ComputerName omogoča izvajanje ukaza »cmdlet« na enem ali več oddaljenih računalnikih. Parameter -Credential se uporablja za zagotavljanje predmeta za preverjanje pristnosti, ki vsebuje uporabniške poverilnice, za zagon ukaza kot določen uporabnik.
Moduli v PowerShellu
Vzdevke lahko uporabite tako za ukaze »cmdlet« kot za parametre, da prihranite pritiske tipk in skrajšate celotno dolžino ukaza (uporabno pri povezovanju več ukazov). Čeprav ti vzdevki ne uporabljajo vedno standardnih konvencij poimenovanja, še vedno odražajo tradicionalne pripomočke ukazne vrstice.
V PowerShellu vzdevki, kot so DIR, CD, DEL in CLS, ustrezajo ukazom »cmdlet« Get-ChildItem, Set-Location, Remove-Item in Clear-Host. Vzdevki parametrov lahko delujejo na dva načina: lahko uporabljajo vnaprej določen vzdevek, ki ga zagotavlja ukaz »cmdlet«, ali pa se jim lahko dodeli vzdevek z vnosom dovolj znakov, da se ustvari enolično ujemanje med podprtimi parametri ukaza »cmdlet«.
Upravljanje datotek in map
Večina sistemskih skrbnikov mora med svojim delom upravljati datoteke in mape, pa naj gre za premikanje mape na drugo mesto na strežniku, arhiviranje dnevniških datotek ali iskanje velikih datotek. V primerih, ko se iste operacije ponavljajo na številnih datotekah, bo uporaba PowerShella za njihovo avtomatizacijo učinkovita rešitev za prihranek časa.
Za iskanje datotek in map je bilo eno prvih orodij ukazne vrstice, ki se jih je skrbnik naučil uporabljati v starih časih računalništva, ukaz dir. Dir bo navedel datoteke in mape v določenem imeniku.
PowerShell ima podoben ukaz v obliki ukaza » Get-ChildItem« . Ukaz »Get-ChildItem« vam omogoča hitro izdelavo seznama datotek v imeniku tako, da lahko datoteke upravljate z ukazom »pipe« ali pa izhod dodelite spremenljivki.
Funkcijo Get-ChildItem lahko uporabite preprosto tako, da navedete pot, bodisi prek cevovoda z uporabo parametra -Path bodisi neposredno za imenom ukaza »cmdlet«. Za spreminjanje odgovora, ki ga vrne Get-ChildItem, je treba upoštevati nekatere parametre, ki jih omogoča ukaz »cmdlet«.
Parameter -Filter je eden od načinov iskanja datotek. Get-ChildItem privzeto vrne le neposredne podrejene elemente ciljnega imenika. To funkcionalnost je mogoče razširiti z uporabo parametra -Recurse , ki rekurzivno išče imenike v trenutnem imeniku.
V PowerShellu 4.0 je Get-ChildItem dodal možnost omejevanja rezultatov na datoteke ali imenike z uporabo stikala –File ali –Directory . Prejšnje različice PowerShella so morale rezultate posredovati Where-Object, pri čemer so za to določitev filtrirale po lastnosti PSIsContainer. Primer obeh tehnik, uporabljenih za vračanje imenikov, ki jih vsebuje C:Users, je prikazan tukaj:
Za zaznavanje skritih ali sistemskih datotek je treba uporabiti -Force . Get-ChildItem v PowerShellu 4.0 in novejših različicah se lahko uporabi tudi za vračanje samo skritih, bralnih ali sistemskih datotek z uporabo -Hidden, -ReadOnly in –System . Podobno funkcionalnost je bilo mogoče doseči v prejšnjih različicah s filtriranjem lastnosti Mode z uporabo Where-Object:
Običajno moramo pri delu z datotekami vedeti le, ali datoteka obstaja oziroma ali je pot do imenika veljavna. PowerShell za to ponuja ukaz »cmdlet« v obliki Test-Path, ki vrne vrednost true ali false.
Testna pot se uporablja kot previdnostni ukrep pred poskusom kopiranja ali brisanja določene datoteke.
Kopiranje, premikanje in brisanje datotek
Kopiraj-element: Kopira eno ali več datotek ali imenikov z lokacije, določene s parametrom -Pot, na lokacijo, določeno z možnostjo -Cilj.
Premakni element: Premakni datoteko ali mapo.
Ko se struktura imenika kopira ali premika, je treba uporabiti -Recurse , da ukaz »cmdlet« izvede dejanje na imeniku in njegovi vsebini. V nekaterih primerih je potreben tudi -Force , na primer, ko operacija kopiranja prepiše datoteko, ki je samo za branje.
Odstrani element: Izbriši datoteko, mapo.
Stikalo -Force je treba uporabiti, ko naletite na datoteko samo za branje, stikalo -Recurse pa pri brisanju imenika in njegove vsebine.
Uporaba PowerShell-a -WhatIf in -Confirm
Preden izvedete resno, množično brisanje, uporabite -WhatIf . -WhatIf vam omogoča, da vidite, kaj bi se zgodilo, če bi zagnali skript ali ukaz, in ali bi to imelo kakšen morebiten negativen vpliv z brisanjem pomembnih poslovnih podatkov. Omeniti velja tudi, da -WhatIf ni omejen na operacije z datotekami, temveč se pogosto uporablja v PowerShellu.
Za skripte, ki jih nameravate zagnati ročno ali, še huje, imajo odvisne ukaze, ki se izvajajo ročno, razmislite o uporabi -Confirm . To vam omogoča, da zahtevate interakcijo uporabnika, preden se operacija dejansko izvede.
Skripti PowerShell = Paketne datoteke na steroidih
PowerShell je napisan v jeziku .NET in močno temelji na ogrodju .NET Framework. Kot tak je PowerShell zasnovan kot objektno usmerjena lupina in skriptni jezik. Vse v PowerShellu se obravnava kot objekt s polnimi zmogljivostmi ogrodja .NET Framework. Ukaz razkrije zbirko objektov, ki jih je mogoče uporabiti z lastnostmi in metodami te vrste objekta. Ko želite izhod enega ukaza posredovati drugemu, PowerShell dejansko posreduje objekt, ne le besedilnega izhoda prvega ukaza. To daje naslednjemu ukazu poln dostop do vseh lastnosti in metod objekta v cevovodu.
Obravnavanje vsega kot objekta in možnost sprejemanja objektov med ukazi je velika sprememba v teoriji pripomočkov ukazne vrstice. Kljub temu PowerShell še vedno deluje kot tradicionalna lupina. Ukaze, skripte in izvršljive datoteke je mogoče vnesti in zagnati iz ukazne vrstice, rezultati pa so prikazani kot besedilo. Datoteke Windows .CMD in .BAT, VBScripts, JScripts in izvršljive datoteke, ki se izvajajo znotraj CMD.EXE, se še vedno izvajajo v PowerShellu. Ker pa niso objektno usmerjene, nimajo polnega dostopa do objektov, ustvarjenih in uporabljenih v PowerShellu. Te starejše skripte in izvršljive datoteke bodo še vedno vse obravnavale kot besedilo, vendar lahko PowerShell kombinirate s številnimi drugimi tehnologijami. To je še posebej pomembno, če želite začeti uporabljati PowerShell z zbirko obstoječih skriptov, ki jih ne morete pretvoriti vseh naenkrat.
Razlaga parametrov PowerShella
Ukazi »cmdlet« lahko sprejemajo parametre za spreminjanje svojega vedenja. Pri izvajanju ukaza »cmdlet« ali funkcije lahko navedete vrednosti parametrov, s katerimi določite, kaj, kdaj, kje in kako se izvede posamezen ukaz PowerShell.
Na primer, Get-Process bo pridobil in navedel vse procese, ki se izvajajo v vašem operacijskem sistemu:
Get-Process izpiše vse procese, ki se izvajajo.
Kaj pa, če želite pridobiti le določen proces? To lahko storite z uporabo parametrov. Na primer, če želite pridobiti vse procese Slack, lahko uporabite parameter Name z ukazom Get-Process:
Get-Process -Name Slack
Potem boste videli samo procese z imenom »slack«:
Uporaba Get-Process s parametri
Nasvet : Nekateri parametri so "pozicijski", kar pomeni, da njihova imena niso obvezna. V tem primeru Get-Process -Name Slack in Get-Process Slack oba opravita isto nalogo.
Vsak ukaz »cmdlet« sprejema različne vrste parametrov. Za ogled sprejetih parametrov ukaza »cmdlet« v razdelku SYNTAX (sintaksa) uporabite ukaz Get-Help.
Get-Help Get-Process
Videli boste seznam vseh možnih načinov, kako lahko zaženete dani ukaz »cmdlet«:
Parametri sintakse ukaza »cmdlet«
V tem primeru ukaz »Get-Process« sprejme parametre, kot so »Name«, »Id«, »ComputerName«, »Module«, »FileVersionInfo « in drugi pogosti parametri. Simboli tukaj pomenijo:
Simbol
Ime
Pomen
Boben
Parameter ne sprejema vnosa
-
Veznik
Določite ime parametra
<>
zaviti oklepaji
Nadomestno besedilo
[]
Oklepaji
Parameter lahko sprejme eno ali več vrednosti.
{}
zaviti oklepaji
Parameter sprejema niz vrednosti.
Parametri sprejemajo niz vrednosti, ki bodo označevale vrsto podatkov, ki jih zahtevajo, kot so niz, celo število, logična vrednost ali datum in čas. Na primer naslednji ukaz:
Get-Process [[-Name] ]
... pomeni, da parameter Ime sprejme eno ali več nizovnih vrednosti, medtem ko ta ukaz:
Get-Process -Id
... pomeni, da parameter Id sprejme eno ali več celoštevilskih vrednosti.
V prejšnjem primeru Get-Process je bil za zožitev rezultatov uporabljen parameter Name. Če pa želite rezultate zožiti na bolj specifičen proces, lahko uporabite parameter ID , ki zahteva celo število, kot je navedeno v njegovi sintaksi.
Get-Process -Id 3016
Potem boste na seznamu videli samo en proces:
Uporaba parametra Id v ukazih »cmdlet«
Ustvari cevovod
PowerShell obdeluje vse podatke kot objekte. Za izdelavo skripta se ti objekti izvajajo skozi vrsto ukazov »cmdlet« ali funkcij, povezanih z navpično črto (|). Izbira pravih ukazov »cmdlet« in njihovo povezovanje v logičnem zaporedju z uporabo cevovoda je pomembna za učinkovit skript.
Recimo, da ustvarjate skript za razvrščanje in prikaz 5 datotek, ki zavzemajo največ prostora v imeniku. Obstajajo zmogljivejši načini za pisanje skripta za razvrščanje datotek, vendar je ta preprosti enostaven za razumevanje:
Sortiranje skriptov - velike datoteke PS1
Če želite to narediti v PowerShellu, uporabite cevovod, ki je videti takole:
Zdaj, ko imamo delujoč cevovod, ga lahko shranite kot datoteko skripta PS1, da vam ga ni treba uvoziti vsakič, ko ga uporabite.
Najenostavnejši način za ustvarjanje datoteke PS1 je, da skript prilepite v beležnico in datoteko shranite s pripono .ps1.
Ustvari skript z Notepadom
Ko ustvarite datoteko PS1, jo lahko uporabite v PowerShellu tako, da zaženete ./ScriptName.ps1 :
Uporaba skripta PS1
Nasvet : Če se prikaže napaka glede dovoljenj, je najhitrejša rešitev, da med izvajanjem skripta zaženete PowerShell s skrbniškimi pravicami.
Čestitamo! Zdaj lahko ustvarjate skripte PowerShell PS1.
Primer skripta PowerShell
Branje o izjemnih lastnostih nove tehnologije in njeno razumevanje je eno, dejanska uporaba pa nekaj drugega! V preostalem delu članka bomo razvili skript PowerShell, ki bo prikazal njene zmogljivosti in kako jo uporabljati.
DIR je eden najpogostejših ukazov v CMD.EXE . Ta ukaz prikaže vse datoteke in poddirektorije v nadrejenem direktoriju (kot je prikazano na sliki 1). Poleg imena vsakega objekta so prikazani tudi datum in čas zadnje posodobitve ter velikost vsake datoteke. DIR prikaže tudi skupno velikost vseh datotek v direktoriju ter skupno število datotek in poddirektorjev.
Slika 1
Z zagonom DIR v PowerShellu se prav tako prikaže seznam imenikov, kot je prikazano na sliki 2, vendar na nekoliko drugačen način. PowerShell nima ukaza DIR, temveč ima Get-ChildItem, ki opravlja isto funkcijo. V PowerShellu je DIR vzdevek za Get-ChildItem. V tem članku se ne nameravam spuščati v vzdevke. DIR v PowerShellu si lahko predstavljate kot okrajšavo za Get-ChildItem.
DIR v PowerShellu ponuja večino enakih informacij kot zgoraj omenjene: seznam datotek in map, datum in čas zadnje spremembe ter velikost vsake datoteke. Vendar pa mu manjkajo povzetek informacij, ki jih ponuja DIR v CMD.EXE: skupna velikost vseh datotek v mapi, skupno število datotek in skupno število podmap.
Slika 2
Za primer scenarija boste morali ustvariti skript PowerShell, ki simulira ukaz CMD.EXE DIR. Spodaj bom razložil najpomembnejše dele skripta.
DIR.PS1: Glava
Skript PowerShell je sestavljen iz ukazov PowerShell v navadni besedilni datoteki s končnico .PS1. Namesto DIR bi uporabili besedilno datoteko z imenom DIR.PS1.
Če želite zagnati skript, v zaslon PowerShell vnesite naslednji ukaz:
.DIR.PS1 X:Folder
Kjer je X črka particije pogona (kot C, D, E), Folder pa ime mape.
Če želite izvedeti nekaj informacij o particiji pogona, boste morali uporabiti Windows Management Instrumentation (WMI). Podrobnosti o WMI presegajo obseg tega članka, zato se jih tukaj ne bomo podrobneje lotevali. Vendar je spodnja koda PowerShell dovolj enostavna za razumevanje tudi brez uporabe WMI. Ustvarite lahko spremenljivko »$filter«, ki jo boste uporabili z ukazom Get-WmiObject. Ta filter pove ukazu Get-WmiObject, da želite le informacije o določenem pogonu. Rezultati ukaza Get-WmiObject so shranjeni v spremenljivki z imenom $volInfo. Ne pozabite, da je v PowerShellu vse objekt; $volInfo je zdaj objekt, ki ga vrne Get-WmiObject.
Zdaj imate dostop do vseh objektov in metod, povezanih z objektom. Serijska številka nosilca je dostopna prek lastnosti VolumeSerialNumber. Vrnjena številka je niz z 8 znaki. Pogosto pa jo želite oblikovati kot štiri številke, ločene z vezajem. To lahko storite podobno kot v naslednji vrstici. Vez na koncu prve vrstice je znak za nadaljevanje vrstice v PowerShellu. V bistvu pove PowerShellu, da se vrstica ne prelomi in da vključuje naslednjo vrstico. Prelomi vrstic niso potrebni pri pisanju kode, vendar jih morate uporabiti za zmanjšanje širine in izboljšanje branja kode.
Zdaj, ko imate objekt $volInfo, lahko na zaslon zapišete podatke glave DIR. Če pogon nima imena, se bo besedilo, zapisano na zaslonu, nekoliko razlikovalo od besedila, zapisano v primeru, če ima pogon ime. Za preverjanje, ali je lastnost VolumeName prazen niz, se uporabi preprost stavek If-Else. Stavek Write-Host se uporablja za zapis vsake vrstice besedila na zaslon.
If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")
Znak »`n« na začetku in koncu ukaza Write-Host se uporablja za vstavljanje nove vrstice pred in za besedilom. Ukaz Write-Host doda novo vrstico na konec vsake vrstice. Učinek »`n« je torej ustvarjanje prazne vrstice pred in za besedilom.
Ste opazili »-eq« v ukazu If? To je operator primerjave enakosti. Spodnja tabela prikazuje vse operatorje primerjave:
-eq, -ieq
Primerjaj po
-ne, -ine
Primerjava ni enaka
-gt, -igt
Primerjaj več kot
-ge, -ige
Primerjaj večje ali enako z
-lt, -ilt
Primerjaj manjše od
-le, -ile
Primerjaj manj kot ali enako z
Znak -i pred operatorji primerjave pomeni, da operator ne razlikuje med velikimi in malimi črkami.
Slika 3: Izhodni podatki skripte, ki jo trenutno imate
DIR.PS1: Seznam datotek/map
Zdaj ste pripravljeni na prikaz vsebine in lastnosti te mape. Najprej morate poklicati ukaz PowerShell Get-ChildItem, da pridobite zbirko datotek in jo kot parameter posredujete skriptu. Ukaz Get-ChildItem bo pridobil zbirko objektov datotek in map, ne le njihovih imen, temveč bo te objekte tudi neposredno posredoval ukazu Sort-Object, da jih razvrsti. Ukaz Sort-Object bo privzeto razvrstil objekte na podlagi lastnosti Name. Zato vam ni treba določiti nobenih drugih parametrov. Razvrščena zbirka objektov bo nato shranjena v spremenljivki z imenom $items.
$items = Get-ChildItem $args[0] | Sort-Object
Ko imate zbirko objektov datotek in map, jih morate pregledati in prikazati ustrezne lastnosti. Ukaz za to je ForEach. Za vsako datoteko ali mapo bodo prikazane lastnosti datum in čas zadnje spremembe, ime, dolžina ali velikost datoteke. Nenavadni nizi v oklepajih so kode formata nizov .NET. Uporabljajo se za poravnavo polj levo/desno ter oblikovanje datumov, časov in številk. Razumevanje teh kod formata nizov ni zelo pomembno, saj niso bistvene za naravo tega skripta.
Stavek If je tisti, ki določa, ali je objekt imenik ali ne. Če je prvi znak atributa Mode »d«, je objekt imenik. Dvakrat morate preveriti, ker se koda za imenike pogosto razlikuje od kode za datoteke.
Bodite pozorni na vrstico $totalDirs++ znotraj stavka If. To je števec, ki je odgovoren za sledenje številu imenikov. Podobno obstaja spremenljivka $totalFiles, ki se uporablja za sledenje skupne velikosti vseh datotek. Te vrednosti se vedno izračunajo med izvajanjem. Vendar se prikažejo šele, ko je postopek seznama datotek končan.
Slika 4: Prikazuje izhodne podatke posodobljenega skripta.
DIR.PS1: Noga
Preostane nam le še, da na zaslon zapišemo skupno število datotek, imenikov, skupno velikost vseh datotek in prosti prostor na tej particiji diska. Za to bomo morali uporabiti spremenljivke števca ($totalFiles, $totalDirs, $totalSize), ki smo jih ustvarili v prejšnjem razdelku. Količino prostega prostora lahko izveste iz spremenljivke $volInfo, ki smo jo ustvarili na začetku skripte.
Slika 5: Prikazuje celotne izhodne podatke skripte.
Napovedi in izboljšave so lahko
Čeprav skript, ki ga ustvarite, ustvari skoraj enak izpis kot ukaz CMD.EXE DIR, morate biti pozorni na nekaj opozoril in narediti nekaj izboljšav.
Ta skripta ne izvaja nobenega preverjanja napak.
Če skriptu ni posredovana veljavna pot, bo skript spodletel in prikazal bo sporočilo o napaki PowerShell.
Skupno število imenikov, podanih v skriptu, je za 2 manjše od rezultata ukaza CMD.EXE DIR, ker ukaz Get-ChildItem ne šteje imenikov ».« in »..« kot v CMD.EXE.
Vaš skript razvršča samo po imenu datoteke, imenu mape in ne omogoča nobenega drugega razvrščanja po atributih.
Vaš skript ne more prikazati vsebine mape in vseh podmap.
Kako vam PowerShell pomaga avtomatizirati karkoli v računalniku
Pišite preproste skripte PowerShell
S PowerShellom lahko avtomatizirate skoraj vse, na primer paketno preimenovanje datotek za doslednost ali samodejno zaganjanje aplikacij. Napišimo nekaj preprostih skriptov Windows PowerShell, da vidimo, kako deluje.
Opomba : Če pri izvajanju skripta naletite na napako glede pravilnika izvajanja, boste morda morali začasno dovoliti izvajanje skripta tako, da zaženete ukaz »Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass«.
Paketno preimenovanje datotek v mapi
S PowerShellom lahko kopirate, premikate in brišete datoteke v računalniku. Datoteke določene vrste datotek lahko tudi preimenujete v večjem obsegu. Na primer, tako lahko preimenujete več besedilnih datotek tako, da v njihovih imenih datotek predpono »oldco« zamenjate z »newco«:
V zgornjem skriptu je ».txt« filter za končnico datotek. Lahko ga spremenite in nastavite na .jpg, .docx itd., da iščete različne vrste datotek.
Samodejni zagon aplikacije
Če vsak dan odprete isti nabor aplikacij, lahko napišete skript PowerShell, ki jih zažene z enim samim klikom:
#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"
Prilepite skript v datoteko Beležnice in jo shranite kot LaunchFavoriteApps.ps1. Nato samo dvokliknite datoteko, da zaženete vse aplikacije, navedene v skriptu.
Kopirajte pomembne datoteke na mesto varnostne kopije
Pomembne datoteke lahko občasno varnostno kopirate na lokacijo za varnostno kopiranje z uporabo naslednjega skripta. Po potrebi spremenite izvorno in ciljno pot:
#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse
Napišite skript PowerShell za samodejno dnevno organiziranje datotek
Ker se vsak dan prenese veliko vrst datotek, se lahko mapa Prenosi hitro napolni z najrazličnejšimi datotekami, raztresenimi naokoli. Da bi to odpravili, lahko napišemo skript PowerShell, ki na koncu vsakega dne razvrsti prenesene datoteke v mape po vrsti datoteke.
Odprite novo datoteko Beležnice in prilepite naslednji skript. Spremenite pot izvorne mape v skriptu, da se bo ujemala s potjo mape Prenosi:
# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"
Če želite shraniti datoteko, kliknite Datoteka > Shrani kot in kot ime datoteke vnesite OrganizeDownloadsFolder.ps1 . Nato kliknite Shrani kot vrsto in izberite Vse datoteke . Dvokliknite datoteko OrganizeDownloadsFolder.ps1 , da zaženete skript.
Načrtovanje in izvajanje nalog
Seveda je pisanje skripta del procesa avtomatizacije. Drugi del je zagotoviti, da se skript lahko samodejno izvede za izvedbo naloge. Da bi to dosegli, lahko ustvarimo načrtovana opravila, ki bodo skript izvajala dnevno ali po potrebi.
Odprite PowerShell, nato kopirajte in prilepite naslednji skript ter pritisnite Enter . Ne pozabite zamenjati »J:\OrganizeDownloadsFolder.ps1« s celotno potjo datoteke do skripta OrganizeDownloadsFolder.ps1 .
Ko končate, pritisnite Enter . Skript bo v razporejevalniku opravil ustvaril načrtovano opravilo, ki bo vsak dan ob 17.00 zagnalo skript za organizacijo datotek. Če želite drug čas, ga lahko spremenite v zgornjem skriptu.
Poleg tega lahko s PowerShellom avtomatizirate tudi druga vsakodnevna opravila, kot je skript za spremljanje prostora, ki vas opozori, ko vam zmanjka prostega prostora na primarnem disku, zaščita paketov dokumentov PDF z geslom in celo uporaba živih ozadij iz mape s slikami.
Čeprav je PowerShell zmogljiv pripomoček in skriptni jezik, je za njegovo razumevanje in uporabo potrebno nekaj časa, še posebej, če niste seznanjeni z okoljem .NET Framework. Upam, da bosta ta članek in primer skripta koristna vsem, ki želijo razumeti PowerShell. Vendar je primer skripta, ustvarjen v članku, precej preprost. Verjamem, da ga je mogoče bolj celovito zgraditi in razviti za uporabo bolj kompleksnih aplikacij.