Home
» Windows
»
PowerShell og alt du trenger å vite om dette verktøyet
PowerShell og alt du trenger å vite om dette verktøyet
Hva om PC-en din kunne håndtere de trivielle oppgavene for deg? Med Windows PowerShell kan den det. Slik bruker du PowerShell til å automatisere de repeterende, hverdagslige oppgavene som ingen vil gjøre om og om igjen.
Microsoft PowerShell er et kommandolinjeverktøy og skriptspråk som er et kraftig verktøy for administratorer for å automatisere en rekke oppgaver for datamaskiner og nettverk. PowerShell inneholder komponenter fra kommandolinjen og er bygget på .NET-rammeverket. Hvis du leser om WebTech360, bør du vite at PowerShell er det foretrukne verktøyet for IT-administratorer for å administrere store nettverk.
Å lære å bruke PowerShell vil forenkle mange kjedelige daglige oppgaver. Du kan også gjøre systemomfattende endringer over nettverket uten å måtte konfigurere hver server individuelt. PowerShell er i ferd med å bli en viktig del av å kjøre hybride skymiljøer .
PowerShell har mange forskjellige bruksområder for å hjelpe deg med å jobbe mer effektivt og holde nettverket ditt i gang. De mest grunnleggende bruksområdene inkluderer: planlegging av daglige oppdateringer på systemer, generering av rapporter om gjeldende prosesser, periodiske tjenester og mer. Selv om mange av disse oppgavene kan gjøres via det grafiske brukergrensesnittet, er poenget med PowerShell å gjøre dem raskere.
Hvis du har en rutinemessig vedlikeholdsoppgave som tar noen minutter å sette opp, kan du lage et skript for den samme funksjonaliteten i én kommando, kalt PowerShell. Neste gang du åpner skriptet, vil det kjøre i bakgrunnen. Å mestre PowerShell-skriptlogikk, forstå hvordan objekter og variabler fungerer, og distribuere det intelligent på tvers av nettverket ditt, vil få deg til å lure på hvorfor du ikke brukte PowerShell tidligere.
Denne veiledningen vil dekke det grunnleggende om PowerShell, noe som vil være nyttig for de som er nye innen IT, spesielt hvis du er kjent med Windows-ledeteksten. Den vil dekke hvordan du bruker grunnleggende verktøy og kommandoer, hvordan du arbeider med filer og mapper, forstår objekter, bruker variabler og administrerer eksterne servere.
En kort historie om kommandolinjeverktøy i Windows
Etter utgivelsen av Windows NT ble CMD.EXE kommandolinjeverktøyet for Windows. Selv om CMD.EXE arvet noen elementer fra sin DOS-forgjenger (COMMAN.COM), var det fortsatt basert på et ganske "primitivt" skriptspråk: bruk av Windows Command-filer (.CMD og .BAT). Tillegget av Windows Scripting Host og VBScript- og JScript-språkene forbedret skriptfunksjonene til verktøyet betraktelig.
Disse teknologiene er en ganske balansert blanding av avanserte kommandolinjeverktøy og skriptmiljøer. Den virkelige bekymringen er ikke hvor mange CMD.EXE-, .CMD- og Windows Scripting Host-filer som kan manipuleres med dem. Hovedklagen og bekymringen er å få gjort noen tilsynelatende enkle oppgaver.
Ved å bruke et «rammeverk» av kommandolinje- og skriptverktøy krever ethvert moderat omfattende skript en kombinasjon av batchkommandoer, Windows Scripting Host og frittstående kjørbare filer. Hvert skript bruker forskjellige konvensjoner for utførelse og forespørsler, parsing og retur av data.
Dårlig variabelstøtte i CMD.EXE, inkonsekvente grensesnitt og begrenset tilgang til Windows-innstillinger, kombinert med en annen svakhet, gjør kommandolinjeskripting vanskelig å implementere og bruke. Hva er denne «andre svakheten», lurer du kanskje på? Det er tekst. I disse teknologiene er alt tekst. Utdataene fra en kommando eller et skript er tekst og må analyseres og formateres på nytt for å fungere som input for neste kommando. Dette er det grunnleggende utgangspunktet som PowerShell tar fra alle tradisjonelle skall.
Introduksjon av PowerShell-verktøy, kommandoer og moduler
De tre konseptene som introduseres i denne delen er bare det aller grunnleggende for å forstå nøkkelkonseptene som danner grunnlaget for PowerShell. Du må bruke mer tid på å lære og mestre de mer avanserte konseptene etter hvert som du nærmer deg PowerShell-kommandoer.
PowerShell-verktøy
PowerShell er installert som standard i Windows 10, Windows 7, Windows Server 2008 R2 og nyere versjoner av Windows. Nyere versjoner av PowerShell legger til nye funksjoner og «cmdlets» (Microsofts betegnelse for PowerShell-kommandoer – uttales «command-lets») og installeres med den tilsvarende versjonen av Windows Management Framework (WMF).
For øyeblikket er WMF 5.1 den nyeste anbefalte versjonen. I noen tilfeller er noen nye funksjoner avhengige av operativsystemet i tillegg til WMF-versjonen. For eksempel støtter Windows 8 og Windows Server 2012 cmdleten Test-NetConnection, som lar deg teste tilkoblingen til en bestemt TCP/IP- port , men denne cmdleten er ikke tilgjengelig i Windows 7 selv når du kjører den nyeste versjonen av WMF.
På de fleste Windows-systemer vil brukere ha to PowerShell-miljøer tilgjengelig, PowerShell-konsollen og PowerShell ISE (Integrated Scripting Environment). PowerShell-konsollen vises som en tradisjonell kommandolinje, men med full funksjonalitet fra PowerShell bak seg. Variabelnavn, løkker, autofullføring av kommandoer og piping er alle tilgjengelige fra PowerShell-konsollen.
For mer avansert bruk (som skripting) tilbyr PowerShell ISE automatisk kommandofullføring, kodeutheving og Microsofts Intellisense-kodefullføring for å hjelpe deg med å opprette og teste PowerShell-kode. PowerShell ISE lar deg også jobbe med flere PowerShell-skript samtidig ved hjelp av fanebasert navigasjon.
cmdleter i PowerShell
Grunnlaget for PowerShell-kommandoer er cmdlet-en. Microsoft brukte flere designstrategier da de opprettet cmdleter i PowerShell.
For det første er det muligheten til enkelt å utlede cmdlet-navn, eller i det minste gjøre dem lettere å finne. PowerShell-kommandoer eller cmdleter er også utformet for å være enklere å bruke, med standardisert syntaks, noe som gjør det enklere å lage skript fra kommandolinjegrensesnittet.
Cmdleter bruker Verb-Noun-formatet, som i Get-Service, Stop-Service eller Import-Csv. Verbdelen av cmdlet-navnet indikerer handlingen som utføres på substantivet. Vanligvis vil cmdleter som brukes til å hente informasjon ha verbet Get i navnet sitt, for eksempel Get-Process eller Get-Content . Kommandoer som brukes til å endre noe starter vanligvis med verbet Set , og kommandoer som brukes til å legge til en ny enhet til noe starter vanligvis med Add eller New .
For det andre får parametere som vanligvis brukes i PowerShell også standardiserte navn. For eksempel lar parameteren -ComputerName cmdleten kjøres på en eller flere eksterne datamaskiner. -Credential brukes til å gi et autentiseringsobjekt, som inneholder brukerlegitimasjon, for å kjøre kommandoen som en bestemt bruker.
Moduler i PowerShell
Du kan bruke aliaser for både cmdleter og parametere for å spare tastetrykk og forkorte den totale lengden på kommandoen (nyttig når du kjeder flere kommandoer sammen). Selv om disse aliasene ikke alltid bruker standard navnekonvensjoner, gjenspeiler de fortsatt tradisjonelle kommandolinjeverktøy.
I PowerShell korresponderer aliaser som DIR, CD, DEL og CLS med henholdsvis cmdletene Get-ChildItem, Set-Location, Remove-Item og Clear-Host. Parameteraliaser kan fungere på to måter: de kan bruke et forhåndsdefinert alias levert av cmdleten, eller de kan aliaseres ved å skrive inn nok tegn til å opprette et unikt samsvar mellom cmdletens støttede parametere.
Fil- og mappehåndtering
De fleste systemadministratorer må manipulere filer og mapper i løpet av arbeidet sitt, enten det er å flytte en mappe til et annet sted på serveren, arkivere loggfiler eller søke etter store filer. I tilfeller der de samme operasjonene gjentas på mange filer, vil det å bruke PowerShell til å automatisere dem være en effektiv tidsbesparende løsning.
For å finne filer og mapper var et av de første kommandolinjeverktøyene en administrator lærte i gamle dager med databehandling dir-kommandoen. Dir vil liste opp filene og mappene som finnes i den angitte katalogen.
PowerShell har en lignende kommando i form av Get-ChildItem Cmdlet . Get-ChildItem lar deg raskt bygge en liste over filer i en katalog på en slik måte at du kan manipulere filene via en pipe-kommando eller tilordne utdataene til en variabel.
Get-ChildItem kan brukes ved å oppgi en sti, enten gjennom en pipeline, ved å bruke -Path- parameteren eller rett etter cmdlet-navnet. For å endre svaret som returneres av Get-ChildItem, er det nødvendig å vurdere noen parametere som er gjort tilgjengelige av cmdlet-en.
Parameteren -Filter er én måte du kan søke etter filer på. Som standard returnerer Get-ChildItem bare direkte underfiler til målkatalogen. Denne funksjonaliteten kan utvides ved å bruke parameteren -Recurse , som rekursivt søker i kataloger som finnes i gjeldende katalog.
I PowerShell 4.0 la Get-ChildItem til muligheten til å begrense resultater til filer eller mapper ved hjelp av –File- eller –Directory- bryteren . Tidligere versjoner av PowerShell måtte sende resultatene til Where-Object, og filtrere på PSIsContainer-egenskapen for å gjøre denne bestemmelsen. Et eksempel på begge teknikkene som brukes til å returnere mapper i C:Users vises her:
For å oppdage skjulte filer eller systemfiler må -Force brukes . Get-ChildItem i PowerShell 4.0 og senere kan også brukes til å returnere bare skjulte, skrivebeskyttede eller systemfiler ved å bruke henholdsvis -Hidden, -ReadOnly og –System . Lignende funksjonalitet kunne oppnås i tidligere versjoner ved å filtrere Mode-egenskapen ved hjelp av Where-Object:
Normalt sett når vi jobber med filer, trenger vi bare å vite om filen finnes eller om katalogstien er gyldig. PowerShell tilbyr en cmdlet for å gjøre dette i form av Test-Path, som returnerer verdien sann eller usann.
Test-Path brukes som et forholdsregel før du prøver å kopiere eller slette en bestemt fil.
Kopier, flytt og slett filer
Copy-Item: Kopierer én eller flere filer eller mapper fra en plassering, angitt av -Path-parameteren, til plasseringen angitt av -Destination-alternativet.
Flytt-element: Flytter en fil eller mappe.
Når en katalogstruktur kopieres eller flyttes, bør -Recurse brukes for å få cmdleten til å utføre handlingen på katalogen og dens innhold. I noen tilfeller kreves også -Force , for eksempel når en skrivebeskyttet fil overskrives av en kopieringsoperasjon.
Fjern element: Slett fil, mappe.
Switch -Force bør brukes når du støter på en skrivebeskyttet fil, og -Recurse bør brukes når du sletter en katalog og dens innhold.
Bruk av PowerShell -WhatIf og -Confirm
Før du utfører en alvorlig massesletting, bruk -WhatIf . -WhatIf lar deg se hva som ville skje hvis du kjørte et skript eller en kommando, og om det ville ha noen potensiell negativ innvirkning ved å slette viktige forretningsdata. Det er også verdt å merke seg at -WhatIf ikke er begrenset til filoperasjoner, det er mye brukt i PowerShell.
For skript som du har tenkt å kjøre manuelt, eller enda verre, har avhengige kommandoer som kjører manuelt, bør du vurdere å bruke -Confirm . Dette lar deg kreve brukermedvirkning før operasjonen faktisk finner sted.
PowerShell-skript = Batch-filer på steroider
PowerShell er i seg selv skrevet i .NET-språket og er sterkt basert på .NET Framework. Som sådan er PowerShell designet som et objektorientert skall- og skriptspråk. Alt i PowerShell behandles som et objekt med alle funksjonene til .NET Framework. En kommando eksponerer en samling objekter som kan brukes ved hjelp av egenskapene og metodene til den objekttypen. Når du vil sende utdataene fra én kommando til en annen, sender PowerShell faktisk objektet gjennom, ikke bare tekstutdataene fra den første kommandoen. Dette gir den neste kommandoen full tilgang til alle egenskapene og metodene til objektet i pipelinen.
Å behandle alt som et objekt og kunne godta objekter mellom kommandoer er en stor endring i teorien bak kommandolinjeverktøy. Når det er sagt, fungerer PowerShell fortsatt som et tradisjonelt skall. Kommandoer, skript og kjørbare filer kan skrives og kjøres fra kommandolinjen, og resultatene vises som tekst. Windows .CMD- og .BAT-filer, VBScripts, JScripts og de kjørbare filene som kjører i CMD.EXE kjører fortsatt i PowerShell. Men fordi de ikke er objektorienterte, har de ikke full tilgang til objektene som opprettes og brukes i PowerShell. Disse eldre skriptene og kjørbare filene vil fortsatt behandle alt som tekst, men du kan kombinere PowerShell med en rekke andre teknologier. Dette er spesielt viktig hvis du vil begynne å bruke PowerShell med en samling av eksisterende skript som du ikke kan konvertere samtidig.
PowerShell-parametere forklart
Cmdleter kan godta parametere for å endre oppførselen sin. Når du kjører en cmdlet eller funksjon, kan du oppgi parameterverdier for å spesifisere hva, når, hvor og hvordan hver PowerShell-kommando kjøres.
For eksempel vil Get-Process hente og liste opp alle kjørende prosesser i operativsystemet ditt:
Get-Process viser alle kjørende prosesser.
Men hva om du bare vil hente en spesifikk prosess? Du kan gjøre det ved hjelp av parametere. For eksempel, for å hente alle Slack-prosesser, kan du bruke Name-parameteren med Get-Process-cmdlet-en:
Get-Process -Name Slack
Da vil du bare se prosesser med navnet «slack»:
Bruk av Get-Process med parametere
Tips : Noen parametere er «posisjonelle», som betyr at navnene deres er valgfrie. I dette tilfellet utfører både Get-Process -Name Slack og Get-Process Slack den samme oppgaven.
Hver cmdlet godtar forskjellige typer parametere. Bruk Get-Help-kommandoen for å se de aksepterte parameterne for cmdleten i syntaksdelen.
Get-Help Get-Process
Du vil se en liste over alle mulige måter du kan kjøre den gitte cmdleten på:
cmdlet-syntaksparametere
I dette tilfellet godtar Get-Process-cmdleten parametere som Navn, Id, ComputerName, Modul, FileVersionInfo og andre vanlige parametere. Symbolene her betyr:
Symbol
Navn
Betydning
Tromme
Parameteren godtar ikke inndata
-
Bindestrek
Angi parameternavnet
<>
krøllparenteser
Plassholder for tekst
[]
Parenteser
Parameteren kan akseptere én eller flere verdier.
{}
krøllparenteser
Parameteren aksepterer et sett med verdier.
Parametre godtar et sett med verdier som angir hvilken type data de trenger, for eksempel streng, heltall, boolsk verdi eller DateTime. For eksempel følgende kommando:
Get-Process [[-Name] ]
... betyr at Navn -parameteren godtar én eller flere strengverdier, mens denne kommandoen:
Get-Process -Id
... betyr at Id -parameteren godtar én eller flere heltallsverdier.
Det forrige Get-Process-eksemplet brukte Name-parameteren for å snevre inn resultatene. Hvis du imidlertid vil snevre det inn til en mer spesifikk prosess, kan du bruke ID- parameteren , som krever et heltall som angitt i syntaksen.
Get-Process -Id 3016
Da vil du bare se én prosess i listen:
Bruke Id-parameteren på cmdleter
Opprett en pipeline
PowerShell behandler alle data som objekter. For å bygge et skript kjøres disse objektene gjennom en serie cmdleter eller funksjoner som er koblet sammen med pipeline-symbolet (|). Å velge riktige cmdleter og koble dem sammen i en logisk rekkefølge ved hjelp av en pipeline er viktig for et effektivt skript.
La oss si at du lager et skript for å sortere og vise de fem filene som tar opp mest plass i en katalog. Det finnes kraftigere måter å skrive et filsorteringsskript på, men denne enkle er lett å forstå:
Skriptsortering - Store filer PS1
For å gjøre dette i PowerShell, bruk en pipeline som ser slik ut:
Nå som vi har en fungerende pipeline, kan du lagre den som en PS1-skriptfil, slik at du ikke trenger å importere den hver gang du bruker den.
Den enkleste måten å opprette en PS1-fil på er å lime inn skriptet ditt i Notisblokk og lagre filen med filtypen .ps1.
Lag skript med Notisblokk
Når du har opprettet PS1-filen, kan du bruke den i PowerShell ved å kjøre ./ScriptName.ps1 :
Bruker PS1-skript
Tips : Hvis du får en tillatelsesfeil, er den raskeste løsningen å kjøre PowerShell med administratorrettigheter når du kjører skriptet ditt.
Gratulerer! Du kan nå opprette PowerShell PS1-skript.
Eksempel på et PowerShell-skript
Å lese om og forstå hvor fantastisk ny teknologi er er én ting, men å faktisk bruke den er noe annet! I resten av denne artikkelen skal vi utvikle et PowerShell-skript for å demonstrere dens funksjoner og hvordan man bruker det.
DIR er en av de vanligste kommandoene i CMD.EXE . Denne kommandoen viser alle filene og underkatalogene som finnes i en overordnet katalog (som vist i figur 1). Sammen med navnet på hvert objekt inkluderer informasjonen som gis dato og klokkeslett for siste oppdatering og størrelsen på hver fil. DIR viser også den kombinerte størrelsen på alle filene i katalogen, samt det totale antallet filer og underkataloger.
Figur 1
Å kjøre DIR i PowerShell produserer også en katalogliste som figur 2, men på en litt annen måte. PowerShell har ikke en DIR-kommando, men har i stedet Get-ChildItem, som utfører samme funksjon. I PowerShell er DIR et alias for Get-ChildItem. Jeg har ikke tenkt å gå inn på aliaser i denne artikkelen. Du kan tenke på DIR i PowerShell som en forkortelse for Get-ChildItem.
DIR i PowerShell gir mye av den samme informasjonen som nevnt ovenfor: en liste over filer og mapper, dato og klokkeslett de sist ble endret, og størrelsen på hver fil. Den mangler imidlertid den sammendragsinformasjonen som DIR i CMD.EXE gir: den totale størrelsen på alle filene i mappen, det totale antallet filer og det totale antallet undermapper.
Figur 2
For eksempelscenarioet må du opprette et PowerShell-skript som simulerer CMD.EXE DIR-kommandoen. Nedenfor vil jeg forklare de viktigste delene av et skript.
DIR.PS1: Topptekst
Et PowerShell-skript består av PowerShell-kommandoer i en ren tekstfil med filtypen .PS1. I stedet for DIR bruker du en tekstfil kalt DIR.PS1.
For å kjøre skriptet, skriv inn følgende kommando i PowerShell-skjermen:
.DIR.PS1 X:Folder
Der X er bokstaven til diskpartisjonen (som C, D, E) og Folder er mappenavnet.
Hvis du vil vite litt informasjon om en diskpartisjon, må du bruke Windows Management Instrumentation (WMI). Detaljene om WMI er utenfor rammen av denne artikkelen, så vi går ikke inn på dem her. Men PowerShell-koden nedenfor er enkel nok å forstå uten å bruke WMI. Du kan opprette en "$filter"-variabel som skal brukes med Get-WmiObject-kommandoen. Dette filteret forteller Get-WmiObject-kommandoen at du bare vil ha informasjon om en bestemt disk. Resultatene av Get-WmiObject-kommandoen lagres i en variabel kalt $volInfo. Husk at i PowerShell er alt et objekt; $volInfo er nå et objekt som returneres av Get-WmiObject.
Nå har du tilgang til alle objektene og metodene som er knyttet til objektet. Volumets serienummer er tilgjengelig via VolumeSerialNumber-egenskapen. Det returnerte tallet er en streng på 8 tegn. Men ofte vil du formatere det som fire tall, atskilt med en bindestrek. Dette kan gjøres på samme måte som i den følgende linjen. Bindestreken på slutten av den første linjen er linjefortsettelsestegnet i PowerShell. Den forteller i utgangspunktet PowerShell at linjen ikke brytes, og at den inkluderer den neste linjen. Linjeskift er ikke nødvendige når du skriver kode, men for å redusere bredden og gjøre koden mer lesbar, bør du gjøre det.
Nå som du har et $volInfo-objekt, kan du skrive DIR-headerinformasjonen til skjermen. Hvis stasjonen ikke har noe navn, vil teksten som skrives til skjermen være litt annerledes enn om stasjonen har et navn. En enkel If-Else-setning brukes til å sjekke om VolumeName-egenskapen er en tom streng. Write-Host-setningen brukes til å skrive hver tekstlinje til skjermen.
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")
Tegnet «`n» i begynnelsen og slutten av Write-Host-kommandoen brukes til å sette inn en ny linje før og etter teksten. Write-Host-kommandoen legger til en ny linje på slutten av hver linje. Effekten av «`n» er derfor å lage en blank linje før og etter teksten.
La du merke til «-eq» i If-kommandoen? Det er en likhetssammenligningsoperator. Tabellen nedenfor viser alle sammenligningsoperatorene:
-ekv, -iekv
Sammenlign etter
-ne, -ine
Sammenligning er ikke lik
-gt, -igt
Sammenlign større enn
-ge, -ige
Sammenlign større enn eller lik
-lt, -ilt
Sammenlign mindre enn
-le, -ile
Sammenlign mindre enn eller lik
Tegnet -i før sammenligningsoperatorene indikerer at operatoren ikke skiller mellom store og små bokstaver.
Figur 3: Utdata for skriptet du har nå
DIR.PS1: Liste over filer/mapper
Nå er du klar til å vise innholdet og egenskapene til denne mappen. Det første du må gjøre er å kalle PowerShell Get-ChildItem-kommandoen for å hente en samling filer og sende den til skriptet som en parameter. Get-ChildItem-kommandoen vil hente en samling av fil- og mappeobjekter, ikke bare navnene deres, men vil også sende disse objektene direkte inn i Sort-Object-kommandoen for å sortere dem. Som standard vil Sort-Object-kommandoen sortere objekter basert på Navn-egenskapen. Så du trenger ikke å spesifisere noen andre parametere. Den sorterte samlingen av objekter vil deretter bli lagret i en variabel kalt $items.
$items = Get-ChildItem $args[0] | Sort-Object
Når du har en samling av fil- og mappeobjekter, må du gå gjennom dem i løkke og vise de riktige egenskapene. Kommandoen for dette er ForEach. For hver fil eller mappe vil egenskapene som vises være dato og klokkeslett, navn, lengde eller størrelse på filen for siste endring. De merkelige strengene i parentesene er .NET-strengformatkoder. De brukes til å venstre-/høyrejustere felt og formatere datoer, klokkeslett og tall. Det er ikke veldig viktig å forstå disse strengformatkodene, da de ikke er essensielle for skriptets natur.
If-setningen er der du avgjør om et objekt er en katalog eller ikke. Hvis det første tegnet i Mode-attributtet er «d», er objektet en katalog. Du må dobbeltsjekke fordi koden for kataloger ofte er forskjellig fra koden for filer.
Legg merke til $totalDirs++-linjen i If-setningen. Dette er en teller som er ansvarlig for å holde oversikt over antall mapper. På samme måte finnes det en $totalFiles-variabel som brukes til å holde oversikt over den totale størrelsen på alle filene. Disse verdiene beregnes alltid under kjøring. Men de vises bare når filopplistingsprosessen er fullført.
Figur 4: Viser utdataene for det oppdaterte skriptet.
DIR.PS1: Bunntekst
Det eneste som gjenstår å gjøre er å skrive det totale antallet filer, mapper, den totale størrelsen på alle filer og ledig plass på denne diskpartisjonen til skjermen. For å gjøre dette må du bruke tellervariablene ($totalFiles, $totalDirs, $totalSize) som ble opprettet i forrige avsnitt. Du kan finne ut mengden ledig plass fra $volInfo-variabelen som ble opprettet i begynnelsen av skriptet.
Figur 5: Viser de komplette utdataene for skriptet.
Prognoser og forbedringer kan være
Selv om skriptet du lager produserer nesten identisk utdata som CMD.EXE DIR-kommandoen, er det noen forbehold du bør være oppmerksom på og noen forbedringer som kan gjøres.
Dette skriptet utfører ingen feilkontroll.
Hvis en gyldig bane ikke sendes til skriptet, vil skriptet mislykkes med en PowerShell-feilmelding.
Det totale antallet kataloger som er oppgitt i skriptet er 2 mindre enn resultatet fra CMD.EXE DIR-kommandoen fordi Get-ChildItem-kommandoen ikke teller de to katalogene «.» og «..» som i CMD.EXE.
Skriptet ditt sorterer bare etter filnavn og mappenavn, og tilbyr ingen annen sortering etter attributter.
Skriptet ditt kan ikke vise innholdet i mappen og alle undermapper.
Hvordan PowerShell hjelper deg med å automatisere alt på PC-en din
Skriv enkle PowerShell-skript
Du kan bruke PowerShell til å automatisere nesten hva som helst, som å gi filer nytt navn i flere grupper for å sikre konsistens eller automatisk starte programmer. La oss skrive noen enkle Windows PowerShell-skript for å se hvordan det fungerer.
Merk : Hvis du støter på en feil angående utførelsespolicyen når du kjører skriptet, må du kanskje midlertidig tillate at skriptet kjøres ved å kjøre «Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass».
Gi filer i en mappe et nytt navn i en batch
Du kan bruke PowerShell til å kopiere, flytte og slette filer på PC-en. Du kan også gi nytt navn til filer av en bestemt filtype samtidig. For eksempel, her er hvordan du kan gi nytt navn til flere tekstfiler ved å erstatte prefikset «oldco» med «newco» i filnavnene deres:
I skriptet ovenfor er «.txt» filteret for filtypen. Du kan endre det og sette det til .jpg, .docx osv. for å søke etter forskjellige filtyper.
Automatisk start av applikasjon
Hvis du åpner det samme settet med applikasjoner hver dag, kan du skrive et PowerShell-skript for å starte dem med et enkelt klikk:
#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"
Lim inn skriptet i en Notisblokk-fil og lagre det som LaunchFavoriteApps.ps1. Dobbeltklikk deretter på filen for å starte alle appene som er oppført i skriptet.
Kopier viktige filer til en sikkerhetskopiplassering
Du kan sikkerhetskopiere viktige filer til en sikkerhetskopiplassering med jevne mellomrom ved hjelp av følgende skript. Sørg for å endre kilde- og målbanene etter behov:
#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse
Skriv et PowerShell-skript for å organisere filer automatisk daglig
Siden mange typer filer lastes ned hver dag, kan Nedlastinger- mappen fort bli overfylt med alle slags filer spredt rundt omkring. For å fikse dette kan vi skrive et PowerShell-skript som sorterer nedlastede filer i mapper etter filtype på slutten av hver dag.
Åpne en ny Notisblokk-fil og lim inn følgende skript. Sørg for å endre kildemappebanen i skriptet slik at den samsvarer med nedlastingsmappebanen:
# 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!"
For å lagre filen, klikk på Fil > Lagre som og skriv inn OrganizeDownloadsFolder.ps1 som filnavn. Klikk deretter på Lagre som type og velg Alle filer . Dobbeltklikk på OrganizeDownloadsFolder.ps1 -filen for å kjøre skriptet.
Planlegg og utfør oppgaver
Selvfølgelig er det å skrive et skript en del av automatiseringsprosessen. Den andre delen er å sørge for at skriptet kan kjøres automatisk for å utføre oppgaven. For å gjøre dette kan vi opprette planlagte oppgaver for å kjøre skriptet daglig eller etter behov.
Åpne PowerShell, kopier og lim inn følgende skript, og trykk Enter . Sørg for å erstatte 'J:\OrganizeDownloadsFolder.ps1' med hele filbanen til OrganizeDownloadsFolder.ps1 -skriptet ditt .
Når du er ferdig, trykker du på Enter . Skriptet oppretter en planlagt oppgave i Oppgaveplanleggeren for å kjøre filorganiseringsskriptet hver dag klokken 17:00. Hvis du foretrekker et annet tidspunkt, kan du endre det i skriptet ovenfor.
I tillegg kan du bruke PowerShell til å automatisere andre hverdagsoppgaver, for eksempel et skript for plassovervåking som varsler deg når du går tom for ledig plass på hoveddisken, passordbeskytte grupper med PDF-dokumenter og til og med bruke levende bakgrunnsbilder fra bildemappen din.
Selv om PowerShell er et kraftig verktøy og skriptspråk, tar det litt tid å forstå og bruke det, spesielt hvis du ikke er kjent med .NET Framework-miljøet. Jeg håper denne artikkelen og eksempelskriptet vil være nyttig for alle som ønsker å forstå PowerShell. Men eksempelskriptet som er laget i artikkelen er ganske enkelt. Jeg tror det kan bygges og utvikles mer fullstendig for å betjene mer komplekse applikasjoner.