Kuinka Powershell Foreach, While ja muut silmukat toimivat

Kuinka Powershell Foreach, While ja muut silmukat toimivat

Tärkeä ensimmäinen askel ohjelmoinnin oppimisessa on silmukoiden käyttö. Onneksi PowerShell kasvaa taitojesi mukana.





missä on reitittimen wps -painike

Voit kehystää nykyiset komennot, joita käytät päivittäin silmukoiden sisällä säästääksesi aikaa ja vaivaa. Käsikirjoituksesi rasittavat sinua samalla kun teet tärkeän työn, kun luet lisää artikkeleita MakeUseOf!





Powershell ForEach Loops: Ovi edistyneeseen tietojenkäsittelyyn

ForEach on ForEach-objektin alias. (Alias ​​on vain pikakuvake PowerShellin komennolle.) Tämä on hyvä aika puhua tavasta, jolla PowerShell käsittelee tietoja.





Kuten useimmat nykyaikaiset ohjelmointikielet, PowerShell on objektiivinen. Kaikki PowerShellissä on objekti, eli jopa muuttujia on laajennettu ominaisuuksia ja toimintoja . Tämän ominaisuuden vuoksi voit asettaa hauille muuttujan ja saada lopputuloksen joukon.

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

Joillakin kielillä tämän taulukon käsittely olisi monivaiheinen prosessi. Ensin hanki pituus ja laske sitten jokainen vaihe.



PowerShellissä voit käydä läpi taulukon ja suorittaa toiminnot jokaisella ForEach -ohjelmalla. Tämä säästää useita koodirivejä, mikä on hyödyllistä, jos sinulla on pidempi komentosarja. Esimerkiksi seuraava on pieni skripti, joka käyttäisi pari Powershell ForEach -silmukkaa. Se luo ZIP -arkiston kaikista tiedostoistasi, joita et ole avannut 30 päivään.

Tiedostoarkistojärjestelmän rakentaminen ForEach -silmukoiden avulla

Murtetaan askeleet alas. Sinä käytät Get-ChildItem kaikki asiakirjat -kansiossa olevat tiedostot. Ympäristömuuttuja $ env: USERPROFILE suorittaa komentosarjan nykyisen profiilin avulla. Tämä muuttuja on kannettavampi kuin kovakoodattu polku. Tämän haun tulokset määritetään muuttujalle $ MyDocs . Luomme sitten ForEach -silmukan ottamalla sen jokaisen läpi $ Doc $ MyDocsissa .





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

Silmukan sisällä tarkistamme, ovatko kukin tiedosto LastAccessTime omaisuus on yli 30 päivää vanhempi. Saamme tämän kanssa Hae päivämäärä cmdlet ja käyttämällä AddDays funktio negatiivisella kolmekymmentä. Jos on, lisäämme tiedoston $ myOldDocs matriisi. Kun tiedoston lajittelu on valmis, otamme sitten valmiit matriisit ja luomme zip -tiedoston. Tämä prosessi on hieman monimutkaisempi, koska siihen liittyy hieman .NET -kutsuminen. Älä huoli, jos et ymmärrä sitä - voit varastaa koodin tämä TechNet -ohjeasiakirja .

Tässä kuvatun tapahtuman eritteleminen: Siirrämme kaikki vanhat tiedostomme uuteen hakemistoon, joka on nimetty tämän päivän päivämäärälle yli 30 päivän ajaksi. Kun kansio on rakennettu, meidän on luotava samanniminen ZIP -arkisto. Testaamme varmistaaksemme, että arkisto onnistui ja .ZIP -tiedosto on olemassa, ja poistamme sitten uuden kansion. Aseta tämä ajoitetuksi tehtäväksi, joka suoritetaan kerran kuukaudessa. Säästät vähän tilaa ja pidät asiakirjakansion puhtaana.





Sillä aikaa ja tee samalla: Silmukat kunnossa

Jos haluat suorittaa silmukan vain tietyn ehdon täyttyessä, käytä while -silmukkaa. Jos käytät muuttujaa laskennan seuraamiseen, aseta se ensin.

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

Ongelmana on, että jos et käytä laskuria, saatat haluta koodisi toimivan ainakin kerran, vaikka testi olisi totta. Näin on alla olevan käsikirjoituksen tapauksessa. Joten näissä tapauksissa haluat käyttää Do-While-silmukkaa. Syntaksi on hieman erilainen.

do{
Your Steps
}while(Conditional Statement)

Niiden käyttäminen ei ole aivan yhtä ilmeistä aloittelijalle. Suoritat tyypillisiä päivittäisiä komentosarjoja, et ehkä törmää niihin usein. Erityisesti niistä on hyötyä, kun tehdään väliaikainen ajastin prosessin onnistumisen testaamiseksi.

kuinka tallentaa kuva pdf -tiedostosta

Aiomme luoda nopean komentosarjan käynnistääksesi etäkoneen uudelleen ja varoittaa, jos se ei palaa 15 minuutin kuluessa. Tässä skenaariossa oletetaan, että se on kotipalvelin tai muu kone, joka ei käynnisty uudelleen kovin usein. Voit vapaasti säätää aikaa, jos tietokoneesi yleensä tulee nopeammin.

Käynnistä uudelleen ja tarkista: Käytä Do-while-silmukkaa

Tämä skripti on hieman yksinkertaisempi. Käytä ensin Käynnistä tietokone uudelleen komento käynnistää etälaite uudelleen. (Käytimme tässä IP -osoitetta uudelleenkäynnistyskomennoille, muista korvata tämä tietokoneen DNS/IP -osoitteella). Luo sitten laskurimuuttuja, i ja aseta se 0. Seuraavaksi sinulla on Do-silmukka, jossa Start-Sleep pysäyttää komentosarjan 300 sekunniksi (viideksi minuutiksi). Toinen komento lisää yhden laskuriin.

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

Sitten meillä on Vaikka -kriteerit. Käytämme Or -testiä varmistaaksemme, että vika luo hälytyksen. Vaihtoehto on, että komentosarja silmukoi loputtomasti odottaen etäkonetta. Koneen tarkistamiseksi käytämme Testi-yhteys cmdlet. Yksinkertaisuuden vuoksi tämä on Ping for PowerShell. Lisäämme parametrin -Hiljainen joka pakottaa sen palauttamaan tosi tai epätosi pakettien tulosten sijaan. Or -lauseen toinen osa tarkistaa, onko laskuri enemmän kuin kolme.

Kun silmukka on valmis, haluamme luoda tuloksen. Tämä tarkoittaa, että meidän on tarkistettava laskurimme. Tämä on nopea jos/muuten -lausunto. Jos se on suurempi kuin kolme, komentosarja ilmaisee, että etäkone ei vastaa. Jos näin ei ole, se osoittaa, että uudelleenkäynnistys onnistui.

Muut silmukat

PowerShellissä on saatavana kaksi muuta silmukkatyyppiä. Ne liittyvät jonkin verran kahteen edelliseen silmukkaan, eivät vain ole yhtä yleisesti käytettyjä. A For -silmukka toimii samalla tavalla kuin vaikkapa esimerkki. Määrität kaikki kriteerit arvioinnissa ja määrität sitten cmdlet -komennot.

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

Tee kunnes -silmukat ovat kuin Do While -silmukoita, muutat samalla Vaikka -lausekkeen arvoksi asti. Esimerkkikirjoituksessa se olisi sama kuin käyttäytyminen. Se on tyylivalinta, mutta Do While on monipuolisempi muissa tilanteissa. Joten jos muistat vain yhden, Do While on hyödyllisempi.

PowerShellissä on apua myös näihin silmukoihin. Voit saada apua lisäämällä noin ennen silmukan nimeä Get-Helpissa. Näet sitten esimerkkejä ja muita vinkkejä kullekin tyypille. Näistä pitäisi olla apua, jos jäät jumiin.

Jatka kasvua kanssasi

Tässä vaiheessa sinulla on suurin osa taidoista aloittaa vankan komentosarjan luominen. Riippumatta siitä, automatisoitko kotilaitteesi tai säästätkö aikaa työssä, silmukat auttavat komentosarjojasi tekemään enemmän. Näiden silmukoiden yhdistäminen virheiden käsittelyyn siirtää komentosarjasi perusasioiden ulkopuolelle. Tämä avaa oven kehittyneemmille kielille.

Mikä on älykäs PowerShell -komentosarja, jonka olet luonut silmukoilla? Jaa se kanssamme kommenteissa.

Jaa Jaa Tweet Sähköposti Vapauta levytilaa poistamalla nämä Windowsin tiedostot ja kansiot

Tarvitsetko tyhjentää levytilaa Windows -tietokoneellasi? Tässä on Windows -tiedostot ja kansiot, jotka voidaan poistaa turvallisesti levytilan vapauttamiseksi.

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • PowerShell
  • Käsikirjoitus
Kirjailijasta Michael McConnell(44 artikkelia julkaistu)

Michael ei käyttänyt Macia, kun he olivat tuomittuja, mutta hän voi koodata Applescriptissä. Hänellä on tutkinto tietojenkäsittelytieteestä ja englannista; hän on kirjoittanut Macista, iOS: sta ja videopeleistä jo jonkin aikaa; ja hän on ollut päivittäinen IT -apina yli kymmenen vuoden ajan erikoistunut komentosarjoihin ja virtualisointiin.

miksi hbo max ei toimi
Lisää Michael McConnellilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi