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.

Innholdsfortegnelse

Hva er PowerShell?

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:

Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}

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:

Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}

Sjekk om filen finnes

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:

PowerShell og alt du trenger å vite om dette verktøyet
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»:

PowerShell og alt du trenger å vite om dette verktøyet
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å:

PowerShell og alt du trenger å vite om dette verktøyet
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:

PowerShell og alt du trenger å vite om dette verktøyet
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å:

PowerShell og alt du trenger å vite om dette verktøyet
Skriptsortering - Store filer PS1

For å gjøre dette i PowerShell, bruk en pipeline som ser slik ut:

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize

Lagre pipeline som PS1-skript

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.

PowerShell og alt du trenger å vite om dette verktøyet
Lag skript med Notisblokk

Når du har opprettet PS1-filen, kan du bruke den i PowerShell ved å kjøre ./ScriptName.ps1 :

PowerShell og alt du trenger å vite om dette verktøyet
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.

PowerShell og alt du trenger å vite om dette verktøyet
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.

PowerShell og alt du trenger å vite om dette verktøyet
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.

$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

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.

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

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.

PowerShell og alt du trenger å vite om dette verktøyet
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.

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}

PowerShell og alt du trenger å vite om dette verktøyet
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.

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")

PowerShell og alt du trenger å vite om dette verktøyet
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:

Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}

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 .

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"

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.

Tags: #System

Leave a Comment

Slik tilbakestiller du programmer på Windows-datamaskiner

Slik tilbakestiller du programmer på Windows-datamaskiner

Hvis Innstillinger- eller Microsoft Store-appen ikke fungerer som den skal, krasjer eller ikke åpnes, kan du tilbakestille appen.

Hva er PING? Hvordan tester man PING?

Hva er PING? Hvordan tester man PING?

I artikkelen nedenfor inviterer vi deg til å lære noen enkle eksempler på PING-kommandoen på Windows!

Slik starter du planlagte oppgaver med forsinkelse i Windows

Slik starter du planlagte oppgaver med forsinkelse i Windows

Denne funksjonen er ekstremt nyttig for å utsette unødvendige oppgaver, sikre nettverkstilkobling før en oppgave starter, kjøre oppgaver i en bestemt rekkefølge, planlegge oppdateringer eller utføre maskinvarevedlikehold.

Hva er VPN? Fordeler og ulemper med VPN for virtuelle private nettverk

Hva er VPN? Fordeler og ulemper med VPN for virtuelle private nettverk

Hva er VPN, hva er fordelene og ulempene med VPN? La oss diskutere definisjonen av VPN med WebTech360, og hvordan man kan bruke denne modellen og systemet i jobben.

Slik inverterer du skjermfarger med forstørrelsesglasset i Windows 11

Slik inverterer du skjermfarger med forstørrelsesglasset i Windows 11

Bruk av forstørrelsesglass-inversjonsfunksjonen i Windows 11 kan forbedre tekstlesbarheten, spesielt for personer som er lysfølsomme.

Fiks problemet med at Kopier lim inn-kommandoen ikke fungerer i Word og Excel (2007, 2010).

Fiks problemet med at Kopier lim inn-kommandoen ikke fungerer i Word og Excel (2007, 2010).

Det er mange grunner til at Kopier- og lim-kommandoen ikke fungerer på en Windows-datamaskin, for eksempel at datamaskinen din er angrepet av et virus, utklippstavlen ikke fungerer, og derfor fungerer ikke kopieringskommandoene (Ctrl + C) og lim inn-kommandoene (Ctrl + V). For å få vite hvordan du fikser denne feilen, se artikkelen nedenfor fra WebTech360.

Få Windows Photo Viewer tilbake på Windows 10 for å vise bilder raskere. Bilder er for treg!

Få Windows Photo Viewer tilbake på Windows 10 for å vise bilder raskere. Bilder er for treg!

Hvis du ikke liker Bilder i Windows 10 og vil vise bilder ved hjelp av Windows Fotovisning i Windows 10, kan du følge denne veiledningen for å få Windows Fotovisning til Windows 10, slik at du kan vise bilder raskere.

Slik kloner du en Windows-harddisk uten tredjepartsprogramvare

Slik kloner du en Windows-harddisk uten tredjepartsprogramvare

Kloningsprosessen innebærer å flytte data fra én lagringsenhet til en annen (i dette tilfellet en harddisk) med en eksakt kopi kopiert fra målstasjonen.

Slik deaktiverer du rask oppstart på Windows

Slik deaktiverer du rask oppstart på Windows

Rask oppstart Windows 11 hjelper datamaskinen med å starte opp raskere, men det kan også være grunnen til at Windows-datamaskinen ikke slår seg helt av.

Slik legger du til Avslutt oppgave på oppgavelinjen i Windows 11

Slik legger du til Avslutt oppgave på oppgavelinjen i Windows 11

Windows 11 har en funksjon som legger til en Avslutt oppgave-knapp direkte på oppgavelinjen, slik at du ikke trenger å gå inn i Oppgavebehandling for å lukke programmer som ikke svarer.

Slik sikkerhetskopierer du data uten å bruke en ekstern harddisk

Slik sikkerhetskopierer du data uten å bruke en ekstern harddisk

Noen ganger finner du rett og slett ikke den eksterne harddisken din når du trenger den som mest. Etter å ha mistet viktige filer et par ganger, har noen funnet en enkel og pålitelig måte å sikkerhetskopiere alt på, selv når harddisken ikke er tilgjengelig.

Hva er vitsen med snarveien Ctrl + Z i Windows? Sannsynligvis mer enn du tror.

Hva er vitsen med snarveien Ctrl + Z i Windows? Sannsynligvis mer enn du tror.

Ctrl + Z er en ekstremt vanlig tastekombinasjon i Windows. Ctrl + Z lar deg i utgangspunktet angre handlinger i alle områder av Windows.

Slik sletter du gjenopprettingspartisjonen og 450 MB gjenopprettingspartisjonen i Windows 10

Slik sletter du gjenopprettingspartisjonen og 450 MB gjenopprettingspartisjonen i Windows 10

Gjenopprettingspartisjonen er en separat partisjon på datamaskinens harddisk eller SSD, og ​​brukes til å gjenopprette eller installere operativsystemet på nytt i tilfelle systemfeil.

10 tips for å fjerne programmer som ikke kan avinstalleres

10 tips for å fjerne programmer som ikke kan avinstalleres

En haug med uønsket programvare kan gjøre datamaskinen din treg og rotete. Men det er ikke alltid lett å rydde opp. Så sjekk ut disse 10 måtene for å avinstallere apper på en ren måte, fjerne gammel programvare i grupper, avinstallere elementer som ikke kan avinstalleres, og til og med fjerne forhåndsinstallerte Windows-programmer.

Instruksjoner for aktivering av virtuelle maskiner på Windows 11

Instruksjoner for aktivering av virtuelle maskiner på Windows 11

Virtuell maskin på Windows 11 vil støtte brukere i å kjøre et annet operativsystem enn Windows direkte på datamaskinen.

De innebygde sikkerhetsverktøyene i Windows 11 kan ikke beskytte deg mot disse truslene

De innebygde sikkerhetsverktøyene i Windows 11 kan ikke beskytte deg mot disse truslene

Windows er mye bedre til å beskytte sikkerheten din i dag enn det pleide å være, men Windows Sikkerhet og tilhørende verktøy er fortsatt ikke perfekte. Du må være på utkikk etter trusler som datasikkerhet ikke har en løsning på.

Utdaterte drivere gjør Windows-PC-en din tregere: Hva skal man gjøre?

Utdaterte drivere gjør Windows-PC-en din tregere: Hva skal man gjøre?

Windows-PC-er kan noen ganger føles trege, men Oppgavebehandling viser ikke noe mistenkelig. På dette stadiet sjekker de fleste for skadelig programvare eller lagringsproblemer, men utdaterte drivere kan også forårsake ytelsesproblemer.

Enkle endringer som hjelper Windows-datamaskinen med å starte opp raskere

Enkle endringer som hjelper Windows-datamaskinen med å starte opp raskere

Å slå av programmer du ikke trenger er den mest effektive måten å hjelpe Windows-datamaskinen med å starte opp raskere.

Instruksjoner for å endre bakgrunnsbilde i Windows 11

Instruksjoner for å endre bakgrunnsbilde i Windows 11

Å endre bakgrunnsbildet i Windows 11 er en av de beste måtene å tilpasse skrivebordet på.

Slik fikser du en Windows-datamaskin som starter på nytt automatisk når du trykker på avstengningsknappen

Slik fikser du en Windows-datamaskin som starter på nytt automatisk når du trykker på avstengningsknappen

I denne artikkelen vil Quantrimang veilede deg gjennom noen måter å fikse feilen der Windows-datamaskiner starter på nytt automatisk når du trykker på avstengningsknappen.

Slik tilbakestiller du programmer på Windows-datamaskiner

Slik tilbakestiller du programmer på Windows-datamaskiner

Hvis Innstillinger- eller Microsoft Store-appen ikke fungerer som den skal, krasjer eller ikke åpnes, kan du tilbakestille appen.

Hva er PING? Hvordan tester man PING?

Hva er PING? Hvordan tester man PING?

I artikkelen nedenfor inviterer vi deg til å lære noen enkle eksempler på PING-kommandoen på Windows!

Slik starter du planlagte oppgaver med forsinkelse i Windows

Slik starter du planlagte oppgaver med forsinkelse i Windows

Denne funksjonen er ekstremt nyttig for å utsette unødvendige oppgaver, sikre nettverkstilkobling før en oppgave starter, kjøre oppgaver i en bestemt rekkefølge, planlegge oppdateringer eller utføre maskinvarevedlikehold.

Hva er VPN? Fordeler og ulemper med VPN for virtuelle private nettverk

Hva er VPN? Fordeler og ulemper med VPN for virtuelle private nettverk

Hva er VPN, hva er fordelene og ulempene med VPN? La oss diskutere definisjonen av VPN med WebTech360, og hvordan man kan bruke denne modellen og systemet i jobben.

Slik inverterer du skjermfarger med forstørrelsesglasset i Windows 11

Slik inverterer du skjermfarger med forstørrelsesglasset i Windows 11

Bruk av forstørrelsesglass-inversjonsfunksjonen i Windows 11 kan forbedre tekstlesbarheten, spesielt for personer som er lysfølsomme.

Fiks problemet med at Kopier lim inn-kommandoen ikke fungerer i Word og Excel (2007, 2010).

Fiks problemet med at Kopier lim inn-kommandoen ikke fungerer i Word og Excel (2007, 2010).

Det er mange grunner til at Kopier- og lim-kommandoen ikke fungerer på en Windows-datamaskin, for eksempel at datamaskinen din er angrepet av et virus, utklippstavlen ikke fungerer, og derfor fungerer ikke kopieringskommandoene (Ctrl + C) og lim inn-kommandoene (Ctrl + V). For å få vite hvordan du fikser denne feilen, se artikkelen nedenfor fra WebTech360.

Få Windows Photo Viewer tilbake på Windows 10 for å vise bilder raskere. Bilder er for treg!

Få Windows Photo Viewer tilbake på Windows 10 for å vise bilder raskere. Bilder er for treg!

Hvis du ikke liker Bilder i Windows 10 og vil vise bilder ved hjelp av Windows Fotovisning i Windows 10, kan du følge denne veiledningen for å få Windows Fotovisning til Windows 10, slik at du kan vise bilder raskere.

Slik kloner du en Windows-harddisk uten tredjepartsprogramvare

Slik kloner du en Windows-harddisk uten tredjepartsprogramvare

Kloningsprosessen innebærer å flytte data fra én lagringsenhet til en annen (i dette tilfellet en harddisk) med en eksakt kopi kopiert fra målstasjonen.

Slik deaktiverer du rask oppstart på Windows

Slik deaktiverer du rask oppstart på Windows

Rask oppstart Windows 11 hjelper datamaskinen med å starte opp raskere, men det kan også være grunnen til at Windows-datamaskinen ikke slår seg helt av.

Slik legger du til Avslutt oppgave på oppgavelinjen i Windows 11

Slik legger du til Avslutt oppgave på oppgavelinjen i Windows 11

Windows 11 har en funksjon som legger til en Avslutt oppgave-knapp direkte på oppgavelinjen, slik at du ikke trenger å gå inn i Oppgavebehandling for å lukke programmer som ikke svarer.