реклама
Решаваща първа стъпка ученето програмиране работи с бримки Абсолютните основи на програмирането за начинаещи (част 2)В част 2 от нашите абсолютни начинаещи ръководства за програмиране ще разгледам основите на функциите, връщащите стойности, контурите и условностите. Уверете се, че сте прочели част 1, преди да се заемете с това, където обясних ... Прочетете още . За щастие, PowerShell продължава да расте с вашите умения.
Можете да рамкирате съществуващите команди, които използвате всеки ден вътре в циклите, за да спестите време и усилия. Вашите скриптове правят тежко повдигане, докато вършите важната работа по четенето на още статии за MakeUseOf!
Powershell ForEach Loops: Вратата за усъвършенствана работа с данни
ForEach е псевдоним на ForEach-Object. (Псевдонимът е просто пряк път за команда в PowerShell.) Това е подходящ момент да поговорим за начина, по който PowerShell обработва данни.
Както повечето съвременни езици за програмиране, PowerShell е ориентирана към обекта Откъде „Обектно ориентирано“ програмиране получи името си? Обектно ориентираното не е просто произволна модна дума, която чувате в кръговете за програмиране. За името има причина - но какво? Присъединете се към мен, докато изследвам някои основи на програмните концепции и обяснявам ... Прочетете още . Всичко в PowerShell е обект, което означава, че дори променливи имат разширени свойства и функции Powershell Cmdlets, които ще подобрят вашите Windows Admin SkillsPowershell е инструмент за командни линии с равни части и език за скриптове. Дава ви възможност да автоматизирате компютъра си чрез същите команди, които използвате за администрирането му. Прочетете още . Това свойство е защо можете да зададете търсенията на променлива и да завършите с масив от резултати.
$ yourVar = Get-ChildItem * foreach ($ файл в $ yourVar) {Вашите стъпки. }
В някои езици обработката на този масив би била многостъпален процес. Първо, получаване на дължината и след това броене на всяка стъпка.
В PowerShell преминавате през масива и извършвате действието върху всеки от тях, използвайки ForEach. Това ви спестява няколко реда код, което е полезно, ако имате по-дълъг скрипт. Например, по-долу е малък скрипт, който би използвал няколко цикъла на Powershell ForEach. Той създава ZIP архив на всички ваши файлове, които не сте отворили за 30 дни.
Изграждане на система за архивни файлове с помощта на ForEach Loops
Да прекъснем стъпките надолу. Ти използваш Get-ChildItem за да получите всички файлове в папката „Документи“. Променливата на средата Какво представляват променливите на околната среда и как мога да ги използвам? [Windows]От време на време ще науча малко съвет, който ме кара да се замисля "добре, ако знаех, че преди година, тогава щеше да ми спести часове време". Живо помня как се научих как да ... Прочетете още $ env: USERPROFILE изпълнява скрипта, използвайки текущия профил. Тази променлива е по-преносима от твърдо кодиран път. Резултатите от това търсене са присвоени на променливата $ MyDocs. След това създаваме нашия цикъл ForEach, като го правим стъпка през всеки $ Doc в $ MyDocs.
$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Документи" -повторете. foreach ($ doc в $ MyDocs) {if ($ doc. LastAccessTime -lt $ (Get-Date) .addDays (-30)) {$ oldDocs + = $ doc} } $ ArchiveFolder = New-Item -Path "$ ($ env: USERPROFILE) \ Документи \ $ ((Get-Date -Format MMddyy) .toString ())" -ItemType Directory. foreach ($ doc в $ oldDocs) {Move-Item -Path $ doc. FullName -Определяне "$ ($ ArchiveFolder. FullName) \ $ ($ док. Име) "-потвърдете $ false. } $ source = $ ArchiveFolder. Пълно име. $ target = "$ ($ env: USERPROFILE) \ Документи \ $ ($ ArchiveFolder. Name) .zip " Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ източник, $ дестинация) if (тестова пътека $ дестинация) {Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false. }
Вътре в цикъла проверяваме дали всеки файл е LastAccessTime имотът е по-стар от 30 дни. Получаваме това с Get-Дата cmdlet и използване на AddDays функция с отрицателна тридесет. Ако е, добавяме файла към $ myOldDocs масив. След като сортирането на файла завърши, ние вземаме нашия завършен масив и създаваме zip файл. Този процес е малко по-сложен, тъй като включва извикване на малко .NET. Не се притеснявайте, ако не го схванете - можете да откраднете кода този помощен документ на TechNet.
За да разделим какво се случва тук: Ще преместим всички наши стари файлове в нова директория, посочена за днешната дата за по-стари от 30 дни. След като тази папка се изгради, трябва да създадем ZIP архива със същото име. Ще тестваме, за да се уверим, че архивът е успешен и .ZIP файлът е там, след което ще изтрием новата папка. Задайте това като планирана задача, която да се изпълнява веднъж месечно. Ще спестите малко място и ще запазите папката си „Документи“ чиста.
Докато и да правите: Цикли при условие
Ако искате да стартирате цикъл, само когато е изпълнено определено условие, използвате цикъл "Докато". Ако използвате променлива, за да проследите броя, задайте първо това.
I = 0. докато (i <10) {Вашите стъпки i + = 1. }
Проблемът е, че ако не използвате брояч, може да искате кода ви да се стартира поне веднъж, дори ако тестът е истина. Такъв е случаят с примерния скрипт по-долу. Така че в тези случаи, искате да използвате цикъл Do-while Как работят циклите в компютърно програмиранеLoops са един от първите видове контроли, които ще научите в програмирането. Вероятно знаете за времето и за контурите, но какво прави цикълът за едновременно? Прочетете още . Синтаксисът е малко по-различен.
направете {Вашите стъпки. } докато (Условно изявление)
Използването им не е толкова очевидно за начинаещ програмист. Правейки типични сценарии всеки ден, може да не се сблъскате с тях толкова често. Там, където те са особено полезни, е да се направи импровизиран таймер за тестване на успеха на един процес.
Ще създадем бърз скрипт, за да рестартираме отдалечена машина и да предупредим, ако тя не се появи в рамките на 15 минути. Този сценарий предполага, че това е домашен сървър или друга машина, която не се рестартира много често. Не се колебайте да коригирате времето, ако компютърът ви обикновено се появява по-бързо.
Рестартирайте и проверете: Използване на Do-while цикъл
Този скрипт е малко по-прост. Първо, вие използвате Рестарт-Computer команда за рестартиране на отдалечената машина. (Тук използвахме фиктивен IP за командите за рестартиране, не забравяйте да презапишете това с DNS / IP на вашия компютър). След това създайте променлива на брояча, аз и го задайте на 0. След това имате своя цикъл Do със Start-Sleep, който спира сценария за 300 секунди (пет минути). Втора команда добавя една към брояча.
Рестарт-Компютър -ComputerName 127.0.0.1. I = 0. направете {Start-Sleep -Seconds 300 $ i + = 1. } докато ((! (тест-връзка 127.0.0.1-тихо)) -или $ i -gt 3) ако ($ i -gt 3) {Write-Ouput "Отдалечената машина не отговаря, моля проверете." } else {Write-Output "Reboot Succeded" }
Тогава ние имаме критериите си. Използваме тест „Или“, за да гарантираме, че грешка генерира сигнал. Алтернативата е скриптът безкрайно да се чака за отдалечената машина. За да проверим машината, използваме Тест-Connection кратката команда. За простота, това е Ping за PowerShell. Добавяме параметъра -Quiet което го принуждава да върне True или False, а не резултатите от пакетите. Втората част на оператора Or проверява дали броячът е повече от три.
След като цикълът завърши, искаме да създадем изхода. Това означава, че трябва да проверим нашия брояч. Това е бързо, ако / else изявление. Ако е по-голяма от три, скриптът извежда, че отдалечената машина не отговаря. Ако не е, ще се получи, че рестартирането е било успешно.
Други бримки
В PowerShell има два други вида бримки. Те са до известна степен свързани с предишните две бримки, те просто не са толкова често използвани. A For цикъл работи подобно на примера като while. Вие задавате всичките си критерии в оценката, след това задавате командлети.
за ($ i = 0; $ i -lt 10; $ i ++) {Вашите стъпки. }
Правете, докато циклите не са като цикъл „Докато цикли“, просто промените оператора „Докато“ на „До“. В примерния скрипт би било същото като поведението. Това е избор на стил, но Do while е по-универсален в други ситуации. Така че, ако си спомняте само едно, „Докато е по-полезно“.
PowerShell има помощ и за всяка от тези бримки. Можете да получите помощта, като добавите относно преди името на цикъла в Get-Help. След това можете да видите примери и други съвети за всеки тип. Те трябва да са ви от полза, ако се забиете
Продължавайки да расте с вас
На този етап имате повечето умения да започнете да изграждате стабилни скриптове. дали автоматизиране на вашия дом 15 Разширени задачи PowerShell може да се справи в Windows 10PowerShell е подобен на командния ред, но по-добре. Това е мощен инструмент за системно администриране. Съставихме 15 задачи, някои прости, някои сложни, които се възползват от магията на PowerShell. Прочетете още или спестяване на време на работа, контурите помагат на вашите скриптове да правят повече. Комбинирането на тези бримки с обработката на грешки премества сценариите ви извън основните положения Работете с PowerShell грешки като шеф с тези съветиУправлението на грешките в PowerShell има четири части. Научете как да коригирате грешки и повече в Microsoft PowerShell. Прочетете още . Това отваря вратата към по-напредналите езици.
Какво е умен скрипт на PowerShell, който сте създали с помощта на контури? Споделете го с нас в коментарите.
Майкъл не е използвал Mac, когато са били обречени, но той може да кодира в Applescript. Има дипломи по компютърни науки и английски език; от известно време пише за Mac, iOS и видео игри; и той е ежедневна ИТ маймуна повече от десетилетие, специализиран в сценарии и виртуализация.