Kako delujejo Powershell Foreach, While in druge zanke

Kako delujejo Powershell Foreach, While in druge zanke

Pomemben prvi korak pri učenju programiranja je delo z zankami. Na srečo PowerShell še naprej raste z vašimi veščinami.





kako igrati igre Windows 98 v sistemu Windows 10

Obstoječe ukaze, ki jih uporabljate vsak dan, lahko uokvirite, da prihranite čas in trud. Vaši skripti močno obremenjujejo, medtem ko pri pomembnem delu berete več člankov o MakeUseOf!





Powershell ForEach zanke: vrata do naprednega ravnanja s podatki

ForEach je vzdevek za objekt ForEach. (Vzdevek je le bližnjica za ukaz v PowerShellu.) To je pravi čas, da se pogovorite o tem, kako PowerShell ravna s podatki.





Tako kot večina sodobnih programskih jezikov je PowerShell objektno naravnan. Vse v PowerShellu je predmet, kar pomeni, da tudi spremenljivke imajo razširjene lastnosti in funkcije . Zaradi te lastnosti lahko nastavite iskanje na spremenljivko in na koncu prikažete niz rezultatov.

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

V nekaterih jezikih bi bila obdelava te matrike večstopenjski proces. Najprej določimo dolžino in nato štejemo vsak korak.



V PowerShell -ju stopite skozi matriko in z ForEach izvedete dejanje na vsakem od njih. Tako prihranite več vrstic kode, kar je koristno, če imate daljši skript. Spodaj je na primer majhen skript, ki bi uporabil nekaj zank Powershell ForEach. Ustvari ZIP arhiv vseh datotek, ki jih niste odprli v 30 dneh.

Ustvarjanje sistema arhiviranja datotek z uporabo zank ForEach

Prelomimo korake. Uporabljaš Get-ChildItem da dobite vse datoteke v mapi Dokumenti. Spremenljivka okolja $ env: USERPROFILE zažene skript z uporabo trenutnega profila. Ta spremenljivka je bolj prenosna kot trdo kodirana pot. Rezultati tega iskanja so dodeljeni spremenljivki $ MyDocs . Nato ustvarimo našo zanko ForEach tako, da stopi skozi vsako $ Doc v $ 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
}

Znotraj zanke preverimo, ali je vsaka datoteka LastAccessTime nepremičnina je starejša od 30 dni. To dobimo z Get-Date cmdlet in z uporabo AddDays funkcijo z minus trideset. Če je, datoteko dodamo v datoteko $ myOldDocs matriko. Ko je razvrščanje datotek končano, vzamemo zaključeno matriko in ustvarimo datoteko zip. Ta postopek je nekoliko bolj zapleten, saj vključuje klicanje .NET -a. Ne skrbite, če tega ne razumete - kodo lahko ukradete tega dokumenta za pomoč TechNet .

Če želite razčleniti, kaj se tukaj dogaja: Vse stare datoteke bomo premaknili v nov imenik, imenovan za današnji datum, starejši od 30 dni. Ko se ta mapa sestavi, moramo ustvariti ZIP arhiv z istim imenom. Preizkusili bomo, ali je arhiv uspel in ali obstaja datoteka .ZIP, nato pa izbrišimo novo mapo. To nastavite kot načrtovano opravilo, ki se bo izvajalo enkrat na mesec. Prihranili boste malo prostora in mapo Dokumenti ohranili čisto.





While in Do While: zanke pod pogojem

Če želite zanko zagnati le, ko je izpolnjen določen pogoj, uporabite zanko While. Če uporabljate spremenljivko za sledenje štetju, jo najprej nastavite.

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

Težava je v tem, da če ne uporabljate števca, boste morda želeli, da se koda zažene vsaj enkrat, tudi če je test resničen. Tako je s spodnjim primerom skripta. Torej v teh primerih želite uporabiti zanko Do-While. Sintaksa je nekoliko drugačna.

do{
Your Steps
}while(Conditional Statement)

Začetnikom programerjev njihova uporaba ni tako očitna. Pri običajnih vsakodnevnih skriptah se morda ne boste srečali tako pogosto. Kjer jim še posebej pridejo prav, je izdelava začasnega merilnika časa za preverjanje uspešnosti procesa.

kako izbrisati datoteke na androidu

Zgradili bomo hiter skript za ponovni zagon oddaljenega računalnika in opozorili, če se v 15 minutah ne prikaže nazaj. Ta scenarij predvideva, da gre za domači strežnik ali drug računalnik, ki se ne zažene zelo pogosto. Če računalnik običajno prihaja hitreje, lahko prilagodite čas.

Znova zaženite in preverite: z uporabo Do-While zanke

Ta skript je nekoliko preprostejši. Najprej uporabite Znova zaženite računalnik ukaz za ponovni zagon oddaljenega stroja. (Tukaj smo uporabili lažni IP za ukaze za ponovni zagon, ne pozabite ga prepisati z DNS/IP vašega računalnika). Nato ustvarite spremenljivko števca, jaz in ga nastavite na 0. Nato imate svojo zanko Do s Start-Sleep, ki zaustavi skript za 300 sekund (pet minut). Drugi ukaz doda enega števcu.

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

Potem imamo svoja merila While. Za preverjanje, ali napaka ustvari opozorilo, uporabljamo preskus Or. Druga možnost je skript, ki neskončno čaka na oddaljeni stroj. Za preverjanje stroja uporabljamo Testna povezava cmdlet. Zaradi preprostosti je to Ping za PowerShell. Dodamo parameter -Tih zaradi česar mora vrniti True ali False namesto rezultatov paketov. Drugi del stavka Or preveri, ali je števec več kot tri.

Ko se zanka zaključi, želimo ustvariti izhod. To pomeni, da moramo preveriti naš števec. To je hitra izjava if/else. Če je večja od treh, skript prikaže, da se oddaljeni stroj ne odziva. Če ni, se prikaže, da je bil ponovni zagon uspešen.

Druge zanke

V PowerShellu sta na voljo še dve vrsti zank. Nekoliko so povezani s prejšnjima dvema zankama, le da se ne uporabljajo tako pogosto. Zanka For deluje podobno kot primer While. V ocenjevanju nastavite vsa svoja merila, nato pa nastavite svoje ukaze.

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

Zanke Do Do so podobne zankam Do Med, samo spremenite stavek While na Do. V vzorčnem scenariju bi bilo enako kot vedenje. To je izbira sloga, vendar je funkcija Do While v drugih situacijah bolj vsestranska. Če se torej spomnite le enega, je Do While bolj uporaben.

PowerShell ima pomoč tudi za vsako od teh zank. Pomoč lahko dobite z dodajanjem približno pred imenom zanke v Get-Help. Nato si lahko ogledate primere in druge nasvete za vsako vrsto. Ti bi morali biti v pomoč, če se zataknete.

Še naprej rastem s tabo

Na tej točki imate večino spretnosti za začetek gradnje robustnih skriptov. Ne glede na to, ali avtomatizirate vašo domačo opremo ali prihranite čas pri delu, zanke pomagajo vašim skriptom narediti več. Kombiniranje teh zank z obravnavo napak premakne vaše skriptiranje preko osnov. To odpira vrata naprednejšim jezikom.

Kaj je pameten skript PowerShell, ki ste ga ustvarili z zankami? Delite ga z nami v komentarjih.

Deliti Deliti Cvrkutati E-naslov Izbrišite te datoteke in mape Windows, da sprostite prostor na disku

Ali morate v računalniku s sistemom Windows počistiti prostor na disku? Tu so datoteke in mape Windows, ki jih je mogoče varno izbrisati, da sprostite prostor na disku.

Preberite Naprej
Sorodne teme
  • Programiranje
  • PowerShell
  • Skriptiranje
O avtorju Michael McConnell(44 objavljenih člankov)

Michael ni bil uporabljen Mac, ko sta bila obsojena, vendar lahko kodira v Applescriptu. Diplomiral je iz računalništva in angleščine; že nekaj časa piše o Mac, iOS in video igrah; in že več kot desetletje je dnevni opica IT, specializiran za skriptiranje in virtualizacijo.

kako popraviti bsod windows 10
Več od Michaela McConnella

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e -knjige in ekskluzivne ponudbe!

Kliknite tukaj, če se želite naročiti