Hvordan Powershell Foreach, While og andre sløyfer fungerer

Hvordan Powershell Foreach, While og andre sløyfer fungerer

Et avgjørende første skritt i å lære programmering er å jobbe med sløyfer. Heldigvis fortsetter PowerShell å vokse med dine ferdigheter.





hvor mye er youtube premium i måneden

Du kan ramme inn de eksisterende kommandoene du bruker hver dag i sløyfer for å spare tid og krefter. Skriptene dine gjør de tunge løftene mens du gjør det viktige arbeidet med å lese flere artikler på MakeUseOf!





Powershell ForEach Loops: Døren til avansert databehandling

ForEach er aliaset for ForEach-Object. (Et alias er bare en snarvei for en kommando i PowerShell.) Dette er et godt tidspunkt å snakke om hvordan PowerShell håndterer data.





Som de fleste moderne programmeringsspråk er PowerShell objektorientert. Alt i PowerShell er et objekt, noe som betyr at selv variabler har utvidede egenskaper og funksjoner . Denne egenskapen er grunnen til at du kan sette søkene dine til en variabel og ende opp med en rekke resultater.

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

På noen språk vil behandling av denne matrisen være en flertrinns prosess. Først får du lengden og deretter teller opp hvert trinn.



I PowerShell går du gjennom matrisen og utfører handlingen på hver enkelt ved hjelp av ForEach. Dette sparer deg for flere kodelinjer, noe som er nyttig hvis du har et lengre skript. For eksempel er det følgende et lite skript som vil bruke et par Powershell ForEach -løkker. Det oppretter et ZIP -arkiv med alle filene dine som du ikke har åpnet på 30 dager.

Bygg et filarkivsystem ved hjelp av ForEach Loops

La oss bryte trinnene ned. Du bruker Get-ChildItem for å få alle filene i Dokumenter -mappen. Miljøvariabelen $ env: BRUKERPROFIL kjører skriptet med den nåværende profilen. Denne variabelen er mer bærbar enn en hardkodet bane. Resultatene av det søket er tilordnet variabelen $ MyDocs . Vi lager deretter ForEach -løkken vår ved å la den gå gjennom hver $ Doc i $ MyDocs .





$oldDocs = @()
$MyDocs = Get-ChildItem -Path '$($env:USERPROFILE)Documents' -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path '$($env:USERPROFILE)Documents$((Get-Date -Format MMddyy).toString())' -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination '$($ArchiveFolder.FullName)$($doc.Name)' -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = '$($env:USERPROFILE)Documents$($ArchiveFolder.Name).zip'
Add-Type -AssemblyName 'system.io.compression.filesystem'
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

Inne i løkken sjekker vi om hver fil er LastAccessTime eiendommen er eldre enn 30 dager. Vi får dette med Get-Date cmdlet, og bruk av AddDays funksjon med negative tretti. Hvis det er det, legger vi til filen i $ myOldDocs matrise. Etter at filsorteringen er fullført, tar vi den ferdige matrisen og lager en zip -fil. Denne prosessen er litt mer komplisert da den innebærer å påkalle litt .NET. Ikke bekymre deg hvis du ikke helt skjønner det - du kan stjele koden fra dette TechNet -hjelpedokumentet .

For å bryte ned hva som skjer her: Vi vil flytte alle våre gamle filer til en ny katalog med navn på dagens dato for eldre enn 30 dager. Når den mappen er bygget, må vi lage ZIP -arkivet med samme navn. Vi tester for å sikre at arkivet lyktes og .ZIP -filen er der, og deretter sletter vi den nye mappen. Angi dette som en planlagt oppgave som skal kjøres en gang i måneden. Du sparer deg litt plass og holder Dokumentmappen ren.





While and Do While: Loops on Condition

Hvis du bare vil kjøre en sløyfe når en bestemt betingelse er oppfylt, bruker du en Mens -løkke. Hvis du bruker en variabel for å spore tellingen, må du angi den først.

i=0
while(i<10){
Your Steps
i+=1
}

Problemet er at hvis du ikke bruker en teller, vil du kanskje at koden skal kjøres minst én gang, selv om testen er sann. Dette er tilfellet med eksempelskriptet nedenfor. Så i disse tilfellene vil du bruke en Do-While-sløyfe. Syntaksen er litt annerledes.

do{
Your Steps
}while(Conditional Statement)

Å bruke disse er ikke like åpenbart for en nybegynner programmerer. Hvis du gjør vanlige skript daglig, kan det hende du ikke støter på dem så ofte. Der de spesielt er nyttige, er å lage en provisorisk timer for å teste suksessen til en prosess.

Hvordan laste ned apper på samsung smart tv 2016

Vi skal bygge et raskt skript for å starte en ekstern maskin på nytt og varsle om den ikke kommer opp igjen innen 15 minutter. Dette scenariet forutsetter at det er en hjemmeserver eller annen maskin som ikke starter på nytt veldig ofte. Juster gjerne tiden hvis datamaskinen din vanligvis kommer opp raskere.

Start på nytt og sjekk: Bruk en gjør-mens-sløyfe

Dette skriptet er litt enklere. Først bruker du Start datamaskinen på nytt kommando for å starte den eksterne maskinen på nytt. (Vi brukte en dummy IP her for omstartskommandoene. Sørg for å overskrive dette med datamaskinens DNS/IP). Lag deretter tellervariabelen, Jeg og sett den til 0. Deretter har du Do-loop med Start-Sleep som stopper scriptet i 300 sekunder (fem minutter). En annen kommando legger en til telleren.

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput 'Remote Machine not responding, please check.'
}
else{
Write-Output 'Reboot Succeeded'
}

Så har vi våre While -kriterier. Vi bruker en Or -test for å sikre at en feil genererer et varsel. Alternativet er at manuset sløyfe uendelig og venter på den eksterne maskinen. For å se etter maskinen bruker vi Test-tilkobling cmdlet. For enkelhets skyld er dette Ping for PowerShell. Vi legger til parameteren -Stille som tvinger den til å returnere Sant eller usant i stedet for resultatene av pakkene. Den andre delen av Or -setningen sjekker om telleren er mer enn tre.

Når løkken er fullført, ønsker vi å lage utgangen. Det betyr at vi må sjekke telleren vår. Dette er en rask if/else -uttalelse. Hvis det er større enn tre, gir skriptet ut at den eksterne maskinen ikke svarer. Hvis det ikke er det, gir det ut at omstarten var vellykket.

Andre sløyfer

Det er to andre typer løkker tilgjengelig i PowerShell. De er noe relatert til de to foregående løkkene, de er bare ikke så vanlig. En For -sløyfe fungerer på samme måte som While -eksemplet. Du angir alle kriteriene dine i evalueringen, og angir deretter cmdlets.

for($i = 0;$i -lt 10;$i++){
Your Steps
}

Gjør til sløyfer er som Gjør mens sløyfer, du endrer bare mens -setningen til Til. I eksempelskriptet vil det være det samme så langt som oppførsel. Det er et stilvalg, men Do While er mer allsidig i andre situasjoner. Så hvis du bare husker en, er Do While mer nyttig.

PowerShell har også hjelp for hver av disse løkkene. Du kan få hjelpen ved å legge til Om før loop-navnet i Get-Help. Du kan deretter se eksempler og andre tips for hver type. Disse bør være nyttige hvis du blir sittende fast.

Fortsetter å vokse med deg

På dette tidspunktet har du de fleste ferdighetene til å begynne å bygge robuste skript. Enten du automatiserer hjemmeplattformen eller sparer tid på jobben, hjelper sløyfer scriptene dine med å gjøre mer. Å kombinere disse løkkene med feilhåndtering flytter skriptingen din utover det grunnleggende. Dette åpner døren til mer avanserte språk.

Hva er et smart PowerShell -skript du har opprettet ved hjelp av looper? Del det med oss ​​i kommentarene.

Dele Dele kvitring E -post Slett disse Windows -filene og mappene for å frigjøre diskplass

Trenger du å tømme diskplass på Windows -datamaskinen? Her er Windows -filer og mapper som trygt kan slettes for å frigjøre diskplass.

Les neste
Relaterte temaer
  • Programmering
  • Kraftskall
  • Scripting
Om forfatteren Michael McConnell(44 artikler publisert)

Michael brukte ikke en Mac da de var dødsdømt, men han kan kode i Applescript. Han har grader i informatikk og engelsk; han har skrevet om Mac, iOS og videospill en stund nå; og han har vært en IT -ape på dagtid i over et tiår, som spesialiserer seg på scripting og virtualisering.

hvordan få iPhone til å lades raskere
Mer fra Michael McConnell

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere