Advertentie

Een cruciale eerste stap leren programmeren is werken met lussen De absolute basis van programmeren voor beginners (deel 2)In deel 2 van onze absolute beginnershandleiding voor programmeren, zal ik de basis van functies, retourwaarden, loops en conditionals behandelen. Zorg ervoor dat je deel 1 hebt gelezen voordat je dit aanpakt, waar ik de ... Lees verder . Gelukkig blijft PowerShell groeien met uw vaardigheden.

U kunt de bestaande opdrachten die u elke dag gebruikt, in loops plaatsen om tijd en moeite te besparen. Uw scripts doen het zware werk terwijl u het belangrijke werk doet om meer artikelen over MakeUseOf te lezen!

Powershell ForEach Loops: The Door to Advanced Data Handling

ForEach is de alias voor het ForEach-Object. (Een alias is slechts een snelkoppeling voor een opdracht in PowerShell.) Dit is een goed moment om te praten over de manier waarop PowerShell met gegevens omgaat.

Zoals de meeste moderne programmeertalen, PowerShell is objectgeoriënteerd Waar heeft "objectgeoriënteerde" programmering zijn naam aan ontleend?

instagram viewer
Object Oriented is niet zomaar een willekeurig modewoord dat je hoort in programmeerkringen. Er zit een reden achter de naam - maar wat? Doe met me mee terwijl ik enkele van de grondbeginselen van programmeerconcepten verken en uitleg ... Lees verder . Alles in PowerShell is een object, wat betekent dat zelfs variabelen hebben uitgebreide eigenschappen en functies Powershell-cmdlets die uw Windows-beheerdersvaardigheden zullen verbeterenPowershell is een opdrachtregelprogramma voor gelijke delen en scripttaal. Het geeft je de mogelijkheid om je computer te automatiseren met dezelfde commando's die je gebruikt om hem te beheren. Lees verder . Die eigenschap is de reden waarom u uw zoekopdrachten op een variabele kunt instellen en een reeks resultaten krijgt.

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

In sommige talen zou het verwerken van deze array een meerstapsproces zijn. Eerst de lengte ophalen en vervolgens elke stap tellen.

In PowerShell doorloop je de array en voer je de actie op elk uit met ForEach. Dit bespaart u verschillende regels code, wat handig is als u een langer script heeft. Het volgende is bijvoorbeeld een klein script dat een paar Powershell ForEach-lussen zou gebruiken. Het maakt een ZIP-archief van al uw bestanden die u niet binnen 30 dagen heeft geopend.

Een bestandsarchiefsysteem bouwen met ForEach Loops

Laten we de stappen afbreken. Je gebruikt Get-ChildItem om alle bestanden in de map Documenten op te halen. De omgevingsvariabele Wat zijn omgevingsvariabelen en hoe kan ik ze gebruiken? [Ramen]Af en toe leer ik een kleine tip die me doet denken "nou, als ik dat een jaar geleden wist, dan zou het me uren tijd hebben bespaard". Ik herinner me levendig hoe ik leerde ... Lees verder $ env: USERPROFILE voert het script uit met het huidige profiel. Deze variabele is draagbaarder dan een hardgecodeerd pad. De resultaten van die zoekopdracht worden toegewezen aan de variabele $ MyDocs. Vervolgens maken we onze ForEach-lus door deze door elke stap te laten lopen $ Doc in $ 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) "-Bevestig $ false. } $ source = $ ArchiveFolder. Voor-en achternaam. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Name) .zip " Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ source, $ destination) if (testpad $ bestemming) {Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false. }

Binnen de lus controleren we of elk bestand is LastAccessTime woning is ouder dan 30 dagen. We krijgen dit met de Krijg datum cmdlet en gebruik de AddDays functie met min dertig. Als dat zo is, voegen we het bestand toe aan de $ myOldDocs matrix. Nadat het sorteren van het bestand is voltooid, nemen we vervolgens onze voltooide array en maken we een zip-bestand. Dit proces is iets gecompliceerder omdat het een beroep doet op een beetje .NET. Maak je geen zorgen als je het niet helemaal begrijpt - je kunt de code stelen dit TechNet-helpdocument.

Om op te splitsen wat hier gebeurt: we verplaatsen al onze oude bestanden naar een nieuwe directory met de naam van vandaag voor meer dan 30 dagen. Zodra die map is opgebouwd, moeten we het ZIP-archief met dezelfde naam maken. We testen of het archief is geslaagd en het .ZIP-bestand er is, en verwijderen vervolgens de nieuwe map. Stel dit in als een geplande taak die één keer per maand moet worden uitgevoerd. U bespaart uzelf een beetje ruimte en houdt uw map Documenten schoon.

While and Do While: Loops on Condition

Als u alleen een lus wilt uitvoeren wanneer aan een bepaalde voorwaarde is voldaan, gebruikt u een While-lus. Als u een variabele gebruikt om het tellen bij te houden, stelt u dat eerst in.

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

Het probleem is dat als u geen teller gebruikt, u wilt dat uw code minstens één keer wordt uitgevoerd, zelfs als de test waar is. Dit is het geval met het onderstaande voorbeeldscript. Dus in die gevallen, u wilt een Do-While-lus gebruiken Hoe do-while-lussen werken bij computerprogrammeringLussen zijn een van de eerste besturingstypen die u tijdens het programmeren leert. U weet waarschijnlijk van while en for loops, maar wat bereikt een do-while-lus? Lees verder . De syntaxis is iets anders.

doe {Your Steps. } while (voorwaardelijke verklaring)

Het gebruik hiervan is niet zo vanzelfsprekend voor een beginnende programmeur. Als u typische dagelijkse scripting uitvoert, komt u ze misschien niet zo vaak tegen. Waar ze vooral van pas komen, is om een ​​geïmproviseerde timer te maken om het succes van een proces te testen.

We gaan een snel script bouwen om een ​​externe machine opnieuw op te starten en waarschuwen als het niet binnen 15 minuten weer verschijnt. In dit scenario wordt ervan uitgegaan dat het een thuisserver of een andere machine is die niet vaak opnieuw wordt opgestart. U kunt de tijd gerust aanpassen als uw computer doorgaans sneller opstart.

Herstart en controleer: een do-while-lus gebruiken

Dit script is iets eenvoudiger. Eerst gebruik je de Herstart computer commando om de externe machine opnieuw op te starten. (We hebben hier een dummy-IP gebruikt voor de herstartopdrachten, zorg ervoor dat u dit overschrijft met de DNS / IP van uw computer). Maak vervolgens de tellervariabele, ik en zet het op 0. Vervolgens heb je je Do-lus waarbij Start-Sleep het script 300 seconden (vijf minuten) stopt. Een tweede commando voegt er een toe aan de teller.

Herstart-Computer -ComputerName 127.0.0.1. i = 0. doe {Start-Sleep -Seconds 300 $ i + = 1. } while ((! (Test-Connection 127.0.0.1 -Quiet)) -of $ i -gt 3) if ($ i -gt 3) {Write-Ouput "Remote Machine reageert niet, controleer." } anders {Write-Output "Reboot Succeeded" }

Dan hebben we onze While-criteria. We gebruiken een Or-test om ervoor te zorgen dat een fout een waarschuwing genereert. Het alternatief is dat het script eindeloos in een lus wacht op de machine op afstand. Om de machine te controleren, gebruiken we de Test verbinding cmdlet. Voor de eenvoud is dit Ping voor PowerShell. We voegen de parameter toe -Stil wat het dwingt om Waar of Onwaar terug te geven in plaats van de resultaten van de pakketten. Het tweede deel van de Or-instructie controleert of de teller meer dan drie is.

Zodra de lus is voltooid, willen we de uitvoer maken. Dat betekent dat we onze teller moeten controleren. Dit is een snelle if / else-verklaring. Als het groter is dan drie, geeft het script weer dat het externe apparaat niet reageert. Als dit niet het geval is, geeft het aan dat het opnieuw opstarten is geslaagd.

Andere lussen

Er zijn twee andere soorten lussen beschikbaar in PowerShell. Ze zijn enigszins gerelateerd aan de vorige twee lussen, ze worden gewoon niet zo vaak gebruikt. Een For-lus werkt op dezelfde manier als het While-voorbeeld. U stelt al uw criteria in bij de evaluatie en stelt vervolgens uw cmdlets in.

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

Do totdat Loops zijn zoals Do While-lussen, verander gewoon de While-instructie in Tot. In het voorbeeldscript zou het hetzelfde zijn wat gedrag betreft. Het is een stijlkeuze, maar de Do While is veelzijdiger in andere situaties. Dus als je er maar één onthoudt, is Do While nuttiger.

powershell foreach lussen

PowerShell heeft ook hulp voor elk van deze lussen. U kunt de hulp krijgen door toe te voegen over voor de lusnaam in Get-Help. U kunt dan voor elk type voorbeelden en andere tips zien. Deze zouden nuttig moeten zijn als u vastloopt.

Blijf met je meegroeien

Op dit moment heb je de meeste vaardigheden om te beginnen met het bouwen van robuuste scripts. Of het automatiseren van uw thuisinstallatie 15 geavanceerde taken die PowerShell aankan in Windows 10PowerShell lijkt op de opdrachtprompt, maar beter. Het is een krachtige tool voor systeembeheer. We hebben 15 taken samengesteld, sommige eenvoudig, sommige complex, die profiteren van de magie van PowerShell. Lees verder of door tijd te besparen op het werk, loops helpen uw scripts om meer te doen. Deze lussen combineren met foutafhandeling verplaatst uw scripting verder dan de basis Behandel PowerShell-fouten als een baas met deze tipsDe afhandeling van PowerShell-fouten bestaat uit vier delen. Meer informatie over het oplossen van fouten en meer in Microsoft PowerShell. Lees verder . Dit opent de deur naar meer geavanceerde talen.

Wat is een slim PowerShell-script dat je hebt gemaakt met lussen? Deel het met ons in de comments.

Michael gebruikte geen Mac toen ze verdoemd waren, maar hij kan in Applescript coderen. Hij heeft diploma's in informatica en Engels; hij schrijft al een tijdje over Mac, iOS en videogames; en hij is al meer dan een decennium een ​​IT-aap overdag, gespecialiseerd in scripting en virtualisatie.