Kā darbojas Powershell Foreach, While un citas cilpas

Kā darbojas Powershell Foreach, While un citas cilpas

Būtisks pirmais solis programmēšanas apguvē ir darbs ar cilpām. Par laimi, PowerShell turpina augt līdz ar jūsu prasmēm.





kā izvairīties no sociālajiem medijiem

Jūs varat ierāmēt esošās komandas, kuras katru dienu izmantojat cilpās, lai ietaupītu laiku un pūles. Jūsu skripti veic smagu celšanu, kamēr jūs veicat svarīgu darbu, lasot vairāk rakstu par MakeUseOf!





Powershell ForEach Loops: durvis uz uzlabotu datu apstrādi

ForEach ir ForEach-Object aizstājvārds. (Pseidonīms ir tikai saīsne komandai programmā PowerShell.) Šis ir īstais laiks, lai runātu par to, kā PowerShell apstrādā datus.





Tāpat kā lielākā daļa mūsdienu programmēšanas valodu, PowerShell ir orientēta uz objektiem. Viss PowerShell ir objekts, kas nozīmē, ka pat mainīgie ir paplašinātas īpašības un funkcijas . Šī rekvizīta dēļ jūs varat iestatīt meklēšanu uz mainīgo un galu galā iegūt rezultātu masīvu.

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

Dažās valodās šī masīva apstrāde būtu daudzpakāpju process. Pirmkārt, iegūstiet garumu un pēc tam saskaitiet katru soli.



Programmā PowerShell jūs iziet cauri masīvam un veicat darbību katram, izmantojot ForEach. Tas ietaupa vairākas koda rindas, kas ir noderīgi, ja jums ir garāks skripts. Piemēram, tālāk ir neliels skripts, kurā tiktu izmantotas pāris Powershell ForEach cilpas. Tas izveido ZIP arhīvu no visiem jūsu failiem, kurus neesat atvēris 30 dienu laikā.

Failu arhīva sistēmas izveide, izmantojot forEach cilpas

Sadalīsim soļus uz leju. Jūs izmantojat Get-ChildItem lai iegūtu visus failus mapē Dokumenti. Vides mainīgais $ env: USERPROFILE palaiž skriptu, izmantojot pašreizējo profilu. Šis mainīgais ir pārnēsājamāks nekā cieto kodu kods. Šīs meklēšanas rezultāti tiek piešķirti mainīgajam $ MyDocs . Pēc tam mēs izveidojam savu ForEach cilpu, ļaujot tai iziet cauri katram $ Doc pakalpojumā $ 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
}

Cilpas iekšpusē mēs pārbaudām, vai katrs fails ir LastAccessTime īpašums ir vecāks par 30 dienām. Mēs to iegūstam ar Iegūt datumu cmdlet un izmantojot AddDays funkcija ar negatīvu trīsdesmit. Ja tā ir, mēs pievienojam failu $ myOldDocs masīvs. Kad failu kārtošana ir pabeigta, mēs paņemam pabeigto masīvu un izveidojam zip failu. Šis process ir nedaudz sarežģītāks, jo tas ietver mazliet .NET izsaukšanu. Neuztraucieties, ja to neuztverat - jūs varat nozagt kodu šo TechNet palīdzības dokumentu .

Lai izjauktu šeit notiekošo: mēs pārvietosim visus vecos failus uz jaunu direktoriju, kas nosaukts par šodienas datumu un kas ir vecāks par 30 dienām. Kad šī mape ir izveidota, mums ir jāizveido tāda paša nosaukuma ZIP arhīvs. Mēs pārbaudīsim, lai pārliecinātos, ka arhīvs ir izdevies un vai ir .ZIP fails, un pēc tam izdzēsīsim jauno mapi. Iestatiet to kā plānoto uzdevumu, kas jāizpilda reizi mēnesī. Jūs ietaupīsiet nedaudz vietas un saglabāsit mapi Dokumenti tīru.





Kamēr un dari kamēr: cilpas pēc stāvokļa

Ja vēlaties palaist ciklu tikai tad, ja ir izpildīts kāds konkrēts nosacījums, izmantojiet ciklu Cik. Ja skaitīšanas uzskaitei izmantojat mainīgo, vispirms iestatiet to.

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

Problēma ir tāda, ka, ja jūs neizmantojat skaitītāju, iespējams, vēlēsities, lai jūsu kods tiktu palaists vismaz vienu reizi, pat ja tests ir patiess. Tas attiecas uz skripta piemēru zemāk. Tātad šajos gadījumos vēlaties izmantot cilni Do-while. Sintakse nedaudz atšķiras.

do{
Your Steps
}while(Conditional Statement)

Iesācēju programmētājam to izmantošana nav tik acīmredzama. Veicot tipiskus ikdienas skriptus, jūs, iespējams, ar tiem tik bieži nesaskaraties. Tie ir īpaši noderīgi, lai izveidotu pagaidu taimeri, lai pārbaudītu procesa panākumus.

kā iegūt statisku ip

Mēs izveidosim ātru skriptu, lai atsāknētu attālo mašīnu un brīdinātu, ja tā netiks atjaunota 15 minūšu laikā. Šajā scenārijā tiek pieņemts, ka tas ir mājas serveris vai cita mašīna, kas netiek pārstartēta ļoti bieži. Jūtieties brīvi pielāgot laiku, ja dators parasti darbojas ātrāk.

Pārstartējiet un pārbaudiet: izmantojot do-while cilpu

Šis skripts ir nedaudz vienkāršāks. Pirmkārt, jūs izmantojat Restartējiet datoru komandu, lai atsāknētu attālo mašīnu. (Atsāknēšanas komandām mēs izmantojām fiktīvu IP, noteikti pārrakstiet to ar sava datora DNS/IP). Pēc tam izveidojiet skaitītāja mainīgo, i un iestatiet to uz 0. Tālāk jums ir Do cilpa ar Start-Sleep, kas skriptu aptur uz 300 sekundēm (piecas minūtes). Otra komanda pievieno skaitītājam vienu.

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

Tad mums ir savi kritēriji. Mēs izmantojam Or testu, lai pārliecinātos, ka kļūme rada brīdinājumu. Alternatīva ir skripta cilpošana bezgalīgi, gaidot attālo mašīnu. Lai pārbaudītu mašīnu, mēs izmantojam Testa savienojums cmdlet. Vienkāršības labad tas ir Ping for PowerShell. Mēs pievienojam parametru -klusi kas liek tai atgriezt patiesu vai nepatiesu, nevis pakešu rezultātus. Otrā paziņojuma daļa pārbauda, ​​vai skaitītājs ir vairāk nekā trīs.

Kad cikls ir pabeigts, mēs vēlamies izveidot izvadi. Tas nozīmē, ka mums ir jāpārbauda skaitītājs. Šis ir ātrs paziņojums, ja/citādi. Ja tas ir lielāks par trim, skripts parāda, ka attālā mašīna nereaģē. Ja tā nav, tas parāda, ka atsāknēšana bija veiksmīga.

Citas cilpas

PowerShell ir pieejami vēl divu veidu cilpas. Tie ir nedaudz saistīti ar iepriekšējām divām cilpām, tie vienkārši nav tik plaši izmantoti. A Cilpa darbojas līdzīgi kā piemērs Kam. Novērtēšanā jūs iestatāt visus savus kritērijus un pēc tam iestatāt cmdlet.

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

Darīt, līdz cilpas ir līdzīgas cilnēm Do Kamēr, jūs vienkārši maināt paziņojumu Kam uz līdz. Skripta piemērā tas būtu tāds pats kā uzvedība. Tā ir stila izvēle, bet Do Do ir daudzpusīgāka citās situācijās. Tātad, ja jūs atceraties tikai vienu, dariet, kamēr ir noderīgāk.

PowerShell ir palīdzība arī katrai no šīm cilpām. Palīdzību varat saņemt, pievienojot par pirms cilpas nosaukuma Get-Help. Pēc tam varat skatīt piemērus un citus padomus katram tipam. Tiem vajadzētu būt noderīgiem, ja iestrēgstat.

Turpinot augt kopā ar jums

Šajā brīdī jums ir lielākā daļa prasmju, lai sāktu veidot spēcīgus skriptus. Neatkarīgi no tā, vai automatizējat mājas aprīkojumu vai ietaupāt laiku darbā, cilpas palīdz jūsu skriptiem paveikt vairāk. Apvienojot šīs cilpas ar kļūdu apstrādi, jūsu skripti pārsniedz pamatus. Tas paver iespējas attīstītākām valodām.

Kāds ir gudrs PowerShell skripts, ko esat izveidojis, izmantojot cilpas? Kopīgojiet to ar mums komentāros.

Kopīgot Kopīgot Čivināt E -pasts Dzēsiet šos Windows failus un mapes, lai atbrīvotu vietu diskā

Vai jums ir nepieciešams atbrīvot vietu diskā Windows datorā? Šeit ir Windows faili un mapes, ko var droši izdzēst, lai atbrīvotu vietu diskā.

Lasīt Tālāk
Saistītās tēmas
  • Programmēšana
  • PowerShell
  • Skriptu veidošana
Par autoru Maikls Makkonels(44 raksti publicēti)

Maikls neizmantoja Mac, kad viņi bija nolemti, bet viņš var kodēt Applescript. Viņam ir grāds datorzinātnēs un angļu valodā; viņš jau kādu laiku raksta par Mac, iOS un videospēlēm; un viņš ir bijis IT mērkaķis dienā vairāk nekā desmit gadus, specializējies skriptu veidošanā un virtualizācijā.

programmu pārvietošana no viena diska uz otru
Vairāk no Maikla Makonela

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu