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 fikser du en bærbar PC som ikke kobler til WiFi, fikser en bærbar PC som ikke mottar WiFi

Slik fikser du en bærbar PC som ikke kobler til WiFi, fikser en bærbar PC som ikke mottar WiFi

Det er mange grunner til at den bærbare datamaskinen din ikke kan koble til WiFi, og det finnes derfor mange måter å fikse feilen på. Hvis den bærbare datamaskinen din ikke kan koble til WiFi, kan du prøve følgende måter å fikse dette problemet på.

Hvordan sjekker jeg om USB-oppstart er opprettet?

Hvordan sjekker jeg om USB-oppstart er opprettet?

Etter at brukere har opprettet en USB-oppstart for å installere Windows, bør de sjekke USB-oppstartens ytelse for å se om den ble opprettet eller ikke.

6 gratis verktøy som forteller deg at harddisken din er i ferd med å svikte

6 gratis verktøy som forteller deg at harddisken din er i ferd med å svikte

Flere gratisverktøy kan forutsi diskfeil før de skjer, noe som gir deg tid til å sikkerhetskopiere dataene dine og erstatte disken i tide.

5 gratis verktøy for å finne spionprogrammer og reklameprogrammer på PC-en din

5 gratis verktøy for å finne spionprogrammer og reklameprogrammer på PC-en din

Med de riktige verktøyene kan du skanne systemet ditt og fjerne spionprogrammer, reklameprogrammer og andre skadelige programmer som kan lurke på systemet ditt.

Instruksjoner for å fikse feilen «Nettverksbanen ble ikke funnet» i Windows

Instruksjoner for å fikse feilen «Nettverksbanen ble ikke funnet» i Windows

Når en datamaskin, mobilenhet eller skriver prøver å koble til en Microsoft Windows-datamaskin over et nettverk, kan for eksempel feilmeldingen «nettverksbanen ble ikke funnet» – feil 0x80070035 – vises.

Slik lager du en blåskjerm (BSOD) for å pranke vennene dine

Slik lager du en blåskjerm (BSOD) for å pranke vennene dine

Blåskjerm (BSOD) er en vanlig og ikke ny feil i Windows når datamaskinen opplever en alvorlig systemfeil.

Sammendrag av vanlige Run CMD-kommandoer

Sammendrag av vanlige Run CMD-kommandoer

I stedet for å utføre manuelle og direkte tilgangsoperasjoner på Windows, kan vi erstatte dem med tilgjengelige CMD-kommandoer for raskere tilgang.

Slik gjør du oppgavelinjen gjennomsiktig i Windows 11

Slik gjør du oppgavelinjen gjennomsiktig i Windows 11

Som med Windows 10 kan du også bruke tredjepartsprogramvare for å gjøre oppgavelinjen i Windows 11 gjennomsiktig.

Slik bygger du det perfekte, billige strømmesystemet i et lite sovesal

Slik bygger du det perfekte, billige strømmesystemet i et lite sovesal

Etter utallige timer med bruk av den bærbare datamaskinen og stasjonære høyttaleroppsettet fra universitetet, oppdager mange at noen smarte oppgraderinger kan gjøre den trange studentboligen om til det ultimate strømmesenteret uten å tømme bankkontoen.

8 skjulte Windows-berøringsplatebevegelser som gjør arbeidsflyten din lynrask

8 skjulte Windows-berøringsplatebevegelser som gjør arbeidsflyten din lynrask

En bærbar PCs berøringsplate er ikke bare til for å peke, klikke og zoome. Den rektangulære overflaten støtter også bevegelser som lar deg bytte mellom apper, kontrollere medieavspilling, administrere filer og til og med se varsler.

Slik endrer du papirkurvikonet i Windows 11

Slik endrer du papirkurvikonet i Windows 11

Å bytte papirkurvikonet i Windows 11 forenkler tilpasningen av bakgrunnsbildet, og gir deg utseendet og følelsen som passer din smak eller tema.

Instruksjoner for bruk av DISM for å fikse Windows 11-feil

Instruksjoner for bruk av DISM for å fikse Windows 11-feil

DISM (Deployment Imaging and Servicing Management) er et viktig verktøy sammen med SFC (System File Checker) for å håndtere mange systemproblemer i Windows 11.

9 flotte innebygde apper og verktøy på Windows 11 som du ikke bør gå glipp av

9 flotte innebygde apper og verktøy på Windows 11 som du ikke bør gå glipp av

Selv om Windows 11 absolutt kommer forhåndsinstallert med noen få ubrukelige apper, skjuler det også noen utrolig kraftige verktøy rett foran nesen din.

Slik finner du datamaskinens maksimale RAM-kapasitet

Slik finner du datamaskinens maksimale RAM-kapasitet

Når du kjøper en ny stasjonær eller bærbar datamaskin, kan du spare penger ved å kjøpe en enhet med grunnleggende spesifikasjoner. Du kan øke ytelsen senere ved å oppgradere RAM-en.

Hva er Cloudflare WARP? Bør jeg bruke det?

Hva er Cloudflare WARP? Bør jeg bruke det?

WARP er et VPN som hjelper deg med å koble til Internett ved hjelp av Cloudflares 1.1.1.1 DNS, samtidig som det optimaliserer og sikrer (dvs. krypterer) forbindelsen din. 1.1.1.1 er et av de raskeste og sikreste DNS-alternativene.

Fiks funksjonstaster som ikke fungerer i Windows 10

Fiks funksjonstaster som ikke fungerer i Windows 10

Fn-funksjonstastene gir deg en raskere og enklere måte å kontrollere enkelte maskinvarefunksjoner på.

Slik fjerner du den gule trekantadvarselen på Windows C-stasjonen

Slik fjerner du den gule trekantadvarselen på Windows C-stasjonen

Denne malplasserte indikatoren betyr vanligvis at BitLocker-kryptering er deaktivert, at en oppdatering krever omstart, eller at en fastvareoppgradering venter.

Slik sletter du dupliserte filer for å spare datamaskinminne ved hjelp av CCleaner

Slik sletter du dupliserte filer for å spare datamaskinminne ved hjelp av CCleaner

CCleaner skanner etter dupliserte filer på bare noen få minutter, og lar deg deretter bestemme hvilke som er trygge å slette.

Rett feilen med at Windows Sikkerhet ikke kunne åpnes i Windows 11

Rett feilen med at Windows Sikkerhet ikke kunne åpnes i Windows 11

Denne artikkelen vil hjelpe deg med å fikse feilen Windows Sikkerhet kan ikke kjøre på Windows 11.

4 beste måter å skjule eller beskytte en Windows-mappe på, uten å installere ekstra programvare

4 beste måter å skjule eller beskytte en Windows-mappe på, uten å installere ekstra programvare

Metodene i denne artikkelen vil hjelpe deg med å skjule eller beskytte Windows-mapper fra nysgjerrige øyne.

Slik fikser du en bærbar PC som ikke kobler til WiFi, fikser en bærbar PC som ikke mottar WiFi

Slik fikser du en bærbar PC som ikke kobler til WiFi, fikser en bærbar PC som ikke mottar WiFi

Det er mange grunner til at den bærbare datamaskinen din ikke kan koble til WiFi, og det finnes derfor mange måter å fikse feilen på. Hvis den bærbare datamaskinen din ikke kan koble til WiFi, kan du prøve følgende måter å fikse dette problemet på.

Hvordan sjekker jeg om USB-oppstart er opprettet?

Hvordan sjekker jeg om USB-oppstart er opprettet?

Etter at brukere har opprettet en USB-oppstart for å installere Windows, bør de sjekke USB-oppstartens ytelse for å se om den ble opprettet eller ikke.

6 gratis verktøy som forteller deg at harddisken din er i ferd med å svikte

6 gratis verktøy som forteller deg at harddisken din er i ferd med å svikte

Flere gratisverktøy kan forutsi diskfeil før de skjer, noe som gir deg tid til å sikkerhetskopiere dataene dine og erstatte disken i tide.

5 gratis verktøy for å finne spionprogrammer og reklameprogrammer på PC-en din

5 gratis verktøy for å finne spionprogrammer og reklameprogrammer på PC-en din

Med de riktige verktøyene kan du skanne systemet ditt og fjerne spionprogrammer, reklameprogrammer og andre skadelige programmer som kan lurke på systemet ditt.

Instruksjoner for å fikse feilen «Nettverksbanen ble ikke funnet» i Windows

Instruksjoner for å fikse feilen «Nettverksbanen ble ikke funnet» i Windows

Når en datamaskin, mobilenhet eller skriver prøver å koble til en Microsoft Windows-datamaskin over et nettverk, kan for eksempel feilmeldingen «nettverksbanen ble ikke funnet» – feil 0x80070035 – vises.

Slik lager du en blåskjerm (BSOD) for å pranke vennene dine

Slik lager du en blåskjerm (BSOD) for å pranke vennene dine

Blåskjerm (BSOD) er en vanlig og ikke ny feil i Windows når datamaskinen opplever en alvorlig systemfeil.

Sammendrag av vanlige Run CMD-kommandoer

Sammendrag av vanlige Run CMD-kommandoer

I stedet for å utføre manuelle og direkte tilgangsoperasjoner på Windows, kan vi erstatte dem med tilgjengelige CMD-kommandoer for raskere tilgang.

Slik gjør du oppgavelinjen gjennomsiktig i Windows 11

Slik gjør du oppgavelinjen gjennomsiktig i Windows 11

Som med Windows 10 kan du også bruke tredjepartsprogramvare for å gjøre oppgavelinjen i Windows 11 gjennomsiktig.

Slik bygger du det perfekte, billige strømmesystemet i et lite sovesal

Slik bygger du det perfekte, billige strømmesystemet i et lite sovesal

Etter utallige timer med bruk av den bærbare datamaskinen og stasjonære høyttaleroppsettet fra universitetet, oppdager mange at noen smarte oppgraderinger kan gjøre den trange studentboligen om til det ultimate strømmesenteret uten å tømme bankkontoen.

8 skjulte Windows-berøringsplatebevegelser som gjør arbeidsflyten din lynrask

8 skjulte Windows-berøringsplatebevegelser som gjør arbeidsflyten din lynrask

En bærbar PCs berøringsplate er ikke bare til for å peke, klikke og zoome. Den rektangulære overflaten støtter også bevegelser som lar deg bytte mellom apper, kontrollere medieavspilling, administrere filer og til og med se varsler.