Paano Gumagana ang Powershell Foreach, Habang, at Ibang Loops

Paano Gumagana ang Powershell Foreach, Habang, at Ibang Loops

Ang isang kritikal na unang hakbang sa pag-aaral ng programa ay gumagana sa mga loop. Sa kabutihang palad, ang PowerShell ay patuloy na lumalaki sa iyong mga kasanayan.





factory reset windows 10 mula sa bios

Maaari mong i-frame ang mayroon nang mga utos na ginagamit mo araw-araw sa loob ng mga loop upang makatipid ng oras at pagsisikap. Ginagawa ng iyong mga script ang mabibigat na nakakataas habang ginagawa mo ang mahalagang gawain ng pagbabasa ng maraming mga artikulo sa MakeUseOf!





Powershell Para sa bawat Loops: Ang Pinto sa Advanced na Pangangasiwa ng Data

Ang ForEach ay ang alias para sa ForEach-Object. (Ang Isang Alias ​​ay isang shortcut lamang para sa isang utos sa PowerShell.) Ito ay isang magandang panahon upang pag-usapan ang tungkol sa paraan ng paghawak ng PowerShell ng data.





Tulad ng karamihan sa mga modernong wika ng pagprograma, ang PowerShell ay nakatuon sa object. Ang lahat sa PowerShell ay isang bagay, nangangahulugang kahit na mga variable may pinalawig na mga katangian at pag-andar . Ang pag-aari na iyon ang dahilan kung bakit maitatakda mo ang iyong mga paghahanap sa isang variable, at magtapos sa isang hanay ng mga resulta.

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

Sa ilang mga wika, ang pagpoproseso ng array na ito ay magiging isang multistep na proseso. Una, pagkuha ng haba at pagkatapos ay bilangin ang bawat hakbang.



Sa PowerShell, hakbangin mo ang array at isagawa ang pagkilos sa bawat isa gamit ang ForEach. Sine-save ka nito ng maraming mga linya ng code, na kapaki-pakinabang kung mayroon kang mas mahabang script. Halimbawa, ang sumusunod ay isang maliit na script na gagamit ng isang pares ng Powershell ForEach loop. Lumilikha ito ng isang archive ng ZIP ng lahat ng iyong mga file na hindi mo pa binubuksan sa loob ng 30 araw.

Pagbuo ng isang File Archive System Gamit ang ForEach Loops

Tanggalin natin ang mga hakbang. Ginagamit mo Get-ChildItem upang makuha ang lahat ng mga file sa folder ng Mga Dokumento. Ang variable ng kapaligiran $ env: USERPROFILE nagpapatakbo ng script gamit ang kasalukuyang profile. Ang variable na ito ay mas portable kaysa sa isang hardcoded path. Ang mga resulta ng paghahanap na iyon ay nakatalaga sa variable $ MyDoc . Nilikha namin ang aming ForEach loop sa pamamagitan ng paglalakad nito sa bawat isa $ Doc sa $ 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
}

Sa loob ng loop, sinusuri namin upang makita kung ang bawat file ay LastAccessTime ang pag-aari ay mas matanda sa 30 araw. Nakukuha natin ito sa Get-Date cmdlet, at gamit ang Mga AddDay gumana na may negatibong tatlumpung. Kung ito ay, idaragdag namin ang file sa $ myOldDokes array Matapos makumpleto ang pag-uuri ng file, kukuha kami ng aming nakumpletong array at lumikha ng isang zip file. Ang prosesong ito ay medyo mas kumplikado dahil nagsasangkot ito ng pag-uusap ng kaunting. NET. Huwag mag-alala kung hindi mo masyadong maunawaan ito - maaari mong nakawin ang code mula sa ang dokumentong ito ng tulong sa TechNet .

Upang masira ang nangyayari dito: Ililipat namin ang lahat ng aming mga lumang file sa isang bagong direktoryo na pinangalanan para sa petsa ngayon para sa mas matanda sa 30 araw. Kapag bumuo ang folder na iyon, kailangan naming lumikha ng ZIP archive ng parehong pangalan. Susubukan namin upang matiyak na ang archive ay nagtagumpay at ang .ZIP file ay naroroon, at pagkatapos ay tanggalin ang bagong folder. Itakda ito bilang isang naka-iskedyul na gawain upang tumakbo nang isang beses sa isang buwan. Makakatipid ka ng iyong sarili ng kaunting espasyo at panatilihing malinis ang iyong folder ng Mga Dokumento.





Habang at Gawin Habang: Mga loop sa Kalagayan

Kung nais mong magpatakbo ng isang loop lamang kapag natutugunan ang isang partikular na kundisyon, gumamit ka ng isang loop na Habang. Kung gumagamit ka ng variable upang subaybayan ang bilangin, itakda muna iyon.

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

Ang problema ay kung hindi ka gumagamit ng isang counter, baka gusto mong tumakbo ang iyong code kahit isang beses kahit na ang pagsubok ay totoo. Ito ang kaso sa halimbawa ng script sa ibaba. Kaya sa mga kasong iyon, nais mong gumamit ng isang loop na Do-While. Ang syntax ay bahagyang naiiba.

do{
Your Steps
}while(Conditional Statement)

Ang paggamit ng mga ito ay hindi masyadong halata sa isang baguhan na programmer. Ang paggawa ng tipikal na araw-araw na pag-script, maaaring hindi mo masagasaan ang mga ito nang madalas. Kung saan lalo silang madaling gamitin ay upang makagawa ng isang pansamantalang timer para sa pagsubok sa tagumpay ng isang proseso.

kung paano bawasan ang laki ng file ng jpeg

Bubuo kami ng isang mabilis na script upang muling i-reboot ang isang remote machine at alerto kung hindi ito babalik sa loob ng 15 minuto. Ipinapalagay ng sitwasyong ito na ito ay isang server ng bahay o iba pang makina na hindi madalas na reboot. Huwag mag-atubiling ayusin ang oras kung ang iyong computer ay karaniwang mas mabilis na lumalapit.

I-reboot at Suriin: Gamit ang isang Do-While Loop

Medyo mas simple ang script na ito. Una, gagamitin mo ang I-restart-Computer utos na i-reboot ang remote machine. (Gumamit kami ng isang dummy IP dito para sa mga reboot na utos, siguraduhin na patungan ito sa DNS / IP ng iyong computer). Pagkatapos ay lumikha ng counter variable, ako at itakda ito sa 0. Susunod, mayroon kang iyong Do loop na may Start-Sleep na humihinto sa script sa loob ng 300 segundo (limang minuto). Ang isang pangalawang utos ay nagdaragdag ng isa sa counter.

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

Pagkatapos mayroon kaming aming pamantayan habang. Gumagamit kami ng isang O pagsubok upang matiyak na ang isang pagkabigo ay makakabuo ng isang alerto. Ang kahalili ay ang script loop na walang katapusan na naghihintay para sa remote machine. Upang suriin para sa makina, ginagamit namin ang Test Connection cmdlet Para sa pagiging simple, ito ang Ping para sa PowerShell. Nagdagdag kami ng parameter -Tahimik na pinipilit itong ibalik ang Tama o Mali kaysa sa mga resulta ng mga packet. Sinusuri ng ikalawang bahagi ng pahayag O kung ang counter ay higit sa tatlo.

Kapag nakumpleto ang loop, nais naming lumikha ng output. Nangangahulugan iyon na kailangan naming suriin ang aming counter. Ito ay isang mabilis kung / ibang pahayag. Kung ito ay mas malaki sa tatlo, ang output ng script na hindi tumutugon ang remote machine. Kung hindi, lumalabas na matagumpay ang pag-reboot.

Iba pang mga loop

Mayroong dalawang iba pang mga uri ng mga loop na magagamit sa PowerShell. Medyo nauugnay ang mga ito sa nakaraang dalawang mga loop, hindi lamang ito karaniwang ginagamit. Ang isang Para sa loop ay gumagana nang katulad sa halimbawa ng Habang. Itinakda mo ang lahat ng iyong pamantayan sa pagsusuri, pagkatapos ay itakda ang iyong mga cmdlet.

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

Ang Do Hanggang sa mga loop ay tulad ng Do While loop, binabago mo lang ang pahayag na Habang hanggang sa. Sa halimbawa ng script, magiging pareho ito hanggang sa pag-uugali. Ito ay isang pagpipilian ng estilo, ngunit ang Do While ay mas maraming nalalaman sa iba pang mga sitwasyon. Kaya kung isa lang ang naalala mo, mas kapaki-pakinabang ang Do While.

Ang PowerShell ay may tulong para sa bawat isa sa mga loop na ito rin. Maaari kang makakuha ng tulong sa pamamagitan ng pagdaragdag tungkol sa bago ang pangalan ng loop sa Get-Help. Maaari mo ring makita ang mga halimbawa at iba pang mga tip para sa bawat uri. Dapat maging kapaki-pakinabang ang mga ito kung makaalis ka.

Patuloy na Lumago Sa Iyo

Sa puntong ito, mayroon kang karamihan sa mga kasanayan upang simulan ang pagbuo ng mga matatag na script. Awtomatiko man ang iyong rig sa bahay o pag-save ng oras sa trabaho, tulungan ng mga loop ang iyong mga script na gumawa ng higit pa. Ang pagsasama-sama ng mga loop na ito sa paghawak ng error ay gumagalaw sa iyong pag-script nang lampas sa mga pangunahing kaalaman. Binubuksan nito ang pinto sa mga mas advanced na wika.

Ano ang isang matalinong script ng PowerShell na iyong nilikha gamit ang mga loop? Ibahagi ito sa amin sa mga komento.

Magbahagi Magbahagi Mag-tweet Email Tanggalin ang Mga Windows File at Folder na Ito upang Palayain ang Space ng Disk

Kailangang i-clear ang disk space sa iyong Windows computer? Narito ang mga Windows file at folder na maaaring ligtas na matanggal upang mapalaya ang puwang ng disk.

Basahin Susunod
Mga Kaugnay na Paksa
  • Programming
  • Power shell
  • Pag-iskrip
Tungkol sa May-akda Michael McConnell(44 na Artikulo Nai-publish)

Hindi gumamit si Michael ng isang Mac nang sila ay tiyak na mapapahamak, ngunit maaari siyang mag-code sa Applescript. Mayroon siyang degree sa Computer Science at English; pansamantala na siyang nagsusulat tungkol sa Mac, iOS, at mga video game; at siya ay naging isang IT day unggoy sa loob ng higit sa isang dekada, na nagdadalubhasa sa scripting at virtualization.

kung paano baguhin ang nakatuon na video ram
Higit pa Mula kay Michael McConnell

Mag-subscribe sa aming newsletter

Sumali sa aming newsletter para sa mga tip sa tech, pagsusuri, libreng ebook, at eksklusibong deal!

Mag-click dito upang mag-subscribe