Kuidas Powershell Foreach, while ja muud ahelad töötavad

Kuidas Powershell Foreach, while ja muud ahelad töötavad

Programmeerimise õppimise oluline esimene samm on tsüklitega töötamine. Õnneks kasvab PowerShell teie oskustega.





kuidas lisada iPhone'ile otsetee

Aja ja vaeva säästmiseks saate raamida olemasolevaid käske, mida kasutate iga päev. Teie skriptid teevad raskusi, kui teete olulist tööd, lugedes MakeUseOfis rohkem artikleid!





Powershell ForEach Loops: Uks kuni täiustatud andmetöötluseni

ForEach on ForEach-Objekti varjunimi. (Varjunimi on pelgalt PowerShelli käsu otsetee.) Praegu on hea aeg rääkida PowerShelli andmete töötlemise viisist.





Nagu enamik kaasaegseid programmeerimiskeeli, on ka PowerShell objektorienteeritud. Kõik PowerShellis on objekt, mis tähendab, et isegi muutujad neil on laiendatud omadused ja funktsioonid . Selle atribuudi tõttu saate oma otsingutele määrata muutuja ja saada tulemuste massiivi.

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

Mõnes keeles oleks selle massiivi töötlemine mitmeastmeline protsess. Esiteks pikkuse leidmine ja seejärel iga sammu üleslugemine.



PowerShellis astute massiivist läbi ja sooritate iga toimingu ForEachi abil. See säästab mitut koodirida, mis on kasulik, kui teil on pikem skript. Näiteks on järgmine väike skript, mis kasutaks paari Powershelli ForEachi silmust. See loob ZIP -arhiivi kõigist teie failidest, mida te pole 30 päeva jooksul avanud.

Failiarhiivisüsteemi loomine ForEach Loopide abil

Murrame sammud alla. Sa kasutad Get-ChildItem et saada kõik failid kausta Dokumendid. Keskkonnamuutuja $ env: USERPROFILE käivitab skripti praeguse profiili abil. See muutuja on kaasaskantavam kui kõvakodeeritud tee. Selle otsingu tulemused määratakse muutujale $ MyDocs . Seejärel loome oma ForEachi silmuse, lastes sellel igaüks läbi astuda $ Doc teenuses $ 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
}

Silmuse sees kontrollime, kas iga fail on LastAccessTime vara on vanem kui 30 päeva. Me saame selle koos Hangi kuupäev cmdlet ja kasutades AddDays funktsioon negatiivse kolmekümnega. Kui see on nii, lisame faili kausta $ myOldDocs massiiv. Pärast failide sortimise lõpuleviimist võtame oma valmis massiivi ja loome zip -faili. See protsess on natuke keerulisem, kuna see hõlmab natuke .NET -i käivitamist. Ärge muretsege, kui te sellest päris hästi aru ei saa - saate koodi varastada see TechNeti abidokument .

Siin toimuva jagamiseks: teisaldame kõik meie vanad failid uude kataloogi, mis on määratud tänaseks kuupäevaks, üle 30 päeva. Kui see kaust on loodud, peame looma samanimelise ZIP -arhiivi. Testime, et veenduda, kas arhiiv õnnestus ja .ZIP -fail on olemas, ning kustutame seejärel uue kausta. Seadke see plaaniliseks ülesandeks, mida käiakse kord kuus. Säästate natuke ruumi ja hoiate oma kausta Dokumendid puhtana.





Kuigi ja tee samal ajal: silmused tingimusel

Kui soovite tsüklit käivitada ainult siis, kui teatud tingimus on täidetud, kasutage tsüklit While. Kui kasutate loendamise jälgimiseks muutujat, seadke see kõigepealt.

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

Probleem on selles, et kui te loendurit ei kasuta, võiksite oma koodi vähemalt korra käivitada, isegi kui test on tõene. See on nii allpool toodud skripti puhul. Nii et sellistel juhtudel soovite kasutada Do-while-tsüklit. Süntaks on veidi erinev.

do{
Your Steps
}while(Conditional Statement)

Nende kasutamine pole algajale programmeerijale nii ilmne. Tüüpilisi igapäevaseid skripte tehes ei pruugi te nendega nii tihti kokku puutuda. Need on eriti kasulikud, kui teha ajutine taimer protsessi edukuse testimiseks.

looge usb alglaadimisketas Windows 7

Ehitame kiire skripti kaugmasina taaskäivitamiseks ja hoiatame, kui see 15 minuti jooksul tagasi ei tule. See stsenaarium eeldab, et see on koduserver või muu masin, mis ei taaskäivitu väga sageli. Reguleerige kellaaega, kui teie arvuti käivitub tavaliselt kiiremini.

Taaskäivitage ja kontrollige: Do-while-silmuse kasutamine

See skript on natuke lihtsam. Esiteks kasutate Taaskäivitage arvuti käsk kaugmasina taaskäivitamiseks. (Me kasutasime siin taaskäivituskäskude jaoks näiv IP -d, kirjutage see kindlasti üle oma arvuti DNS/IP -ga). Seejärel looge loenduri muutuja, i ja seadke see väärtuseks 0. Järgmisena on teil Do-tsükkel, kus Start-Sleep peatab skripti 300 sekundiks (viis minutit). Teine käsk lisab loendurile ühe.

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'
}

Siis on meil oma kriteeriumid. Kasutame Or -testi tagamaks, et rike tekitab hoiatuse. Alternatiiviks on skript, mis lõputult loopib kaugarvutit oodates. Masina kontrollimiseks kasutame Testiühendus cmdlet. Lihtsuse huvides on see Ping for PowerShell. Lisame parameetri -vaikne mis sunnib teda tagastama pigem tõese või vale kui pakettide tulemused. Teate teises osas kontrollitakse, kas loendurit on rohkem kui kolm.

Kui tsükkel on lõpule jõudnud, tahame väljundi luua. See tähendab, et peame oma loendurit kontrollima. See on kiire if/else avaldus. Kui see on suurem kui kolm, väljastab skript, et kaugmasin ei reageeri. Kui ei, siis kuvatakse, et taaskäivitamine õnnestus.

Muud silmused

PowerShellis on saadaval veel kahte tüüpi silmuseid. Need on mõnevõrra seotud kahe eelmise silmusega, neid lihtsalt ei kasutata. V Ahel töötab sarnaselt näitega Kuigi. Määrate hindamisel kõik oma kriteeriumid ja seejärel määrate cmdlet -käsud.

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

Tee kuni tsüklid on nagu Do while -ahelad, muudad lause Kuigi ainult väärtuseks Kuni. Näiteskripti puhul oleks see käitumise osas sama. See on stiilivalik, kuid Do While on teistes olukordades mitmekülgsem. Nii et kui mäletate ainult ühte, on Do Kuigi kasulikum.

PowerShellil on abi ka kõigi nende silmuste jaoks. Abi saate lisades umbes enne silmuse nime rakenduses Get-Help. Seejärel näete iga tüübi kohta näiteid ja muid näpunäiteid. Need peaksid olema abiks, kui jänni jääte.

Jätkates teiega kasvamist

Sel hetkel on teil enamus oskusi jõuliste skriptide loomiseks. Olgu teie koduseadme automatiseerimine või tööl aja säästmine - aasad aitavad teie skriptidel rohkem ära teha. Nende silmuste kombineerimine veakäsitlusega viib skriptimise põhitõdedest kaugemale. See avab ukse arenenumate keelte juurde.

Milline on nutikas PowerShelli skript, mille olete loonud silmuste abil? Jagage seda meiega kommentaarides.

Jaga Jaga Piiksuma E -post Kustutage need Windowsi failid ja kaustad kettaruumi vabastamiseks

Kas vajate Windowsi arvutis kettaruumi tühjendamist? Siin on Windowsi failid ja kaustad, mida saab kettaruumi vabastamiseks turvaliselt kustutada.

Loe edasi
Seotud teemad
  • Programmeerimine
  • PowerShell
  • Skriptimine
Autori kohta Michael McConnell(44 artiklit avaldatud)

Michael ei kasutanud Maci, kui nad olid hukule määratud, kuid ta oskab Applescriptis kodeerida. Ta on lõpetanud arvutiteaduse ja inglise keele; ta on juba mõnda aega kirjutanud Macist, iOS -ist ja videomängudest; ja ta on olnud üle kümne aasta päevane IT -ahv, kes on spetsialiseerunud skriptimisele ja virtualiseerimisele.

kuidas muusikat vanast ipodist arvutisse üle kanda
Veel Michael McConnellilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e -raamatuid ja eksklusiivseid pakkumisi!

Tellimiseks klõpsake siin