Рекламное объявление
Важный первый шаг в обучение программированию работает с циклами Абсолютные основы программирования для начинающих (часть 2)Во второй части нашего абсолютного руководства по программированию для начинающих я расскажу об основах функций, возвращаемых значениях, циклах и условных выражениях. Убедитесь, что вы прочитали часть 1, прежде чем заняться этим, где я объяснил ... Подробнее . К счастью, PowerShell продолжает расти вместе с вашими навыками.
Вы можете создавать существующие команды, которые вы используете каждый день, внутри циклов, чтобы сэкономить время и усилия. Ваши сценарии выполняют тяжелую работу, в то время как вы выполняете важную работу - читаете больше статей на MakeUseOf!
Петли Powershell ForEach: дверь в расширенную обработку данных
ForEach - это псевдоним ForEach-Object. (Псевдоним - это просто ярлык для команды в PowerShell.) Сейчас самое время поговорить о том, как PowerShell обрабатывает данные.
Как и большинство современных языков программирования,
PowerShell является объектно-ориентированным Откуда "объектно-ориентированное" программирование получило свое название?Object Oriented - это не случайное модное слово, которое вы слышите в кругах программистов. Есть причина за имя - но что? Присоединяйтесь ко мне, чтобы изучить некоторые основы программирования и объяснить ... Подробнее . Все в PowerShell является объектом, что означает, что даже переменные имеют расширенные свойства и функции Командлеты Powershell, которые улучшат ваши навыки администратора WindowsPowershell - это инструмент командной строки и язык сценариев. Это дает вам возможность автоматизировать ваш компьютер с помощью тех же команд, которые вы используете для его администрирования. Подробнее . Именно из-за этого свойства вы можете задать поиск по переменной и в итоге получить массив результатов.$ yourVar = Get-ChildItem * foreach ($ file in $ yourVar) {Ваши действия. }
В некоторых языках обработка этого массива будет многоэтапным процессом. Сначала получаем длину, а затем просчитываем каждый шаг.
В PowerShell вы проходите массив и выполняете действие для каждого из них, используя ForEach. Это сэкономит вам несколько строк кода, что полезно, если у вас есть более длинный скрипт. Например, ниже приведен небольшой скрипт, который будет использовать пару циклов Powershell ForEach. Он создает ZIP-архив всех ваших файлов, которые вы не открыли в течение 30 дней.
Построение системы файлового архива с использованием циклов ForEach
Давайте сломать шаги вниз. Ты используешь Get-ChildItem чтобы получить все файлы в папке «Документы». Переменная среды Что такое переменные среды и как я могу их использовать? [Windows]Время от времени я получаю небольшой совет, который заставляет меня думать: «Ну, если бы я знал, что год назад, то это сэкономило бы мне часы времени». Я хорошо помню, как учился ... Подробнее $ env: USERPROFILE запускает скрипт, используя текущий профиль. Эта переменная более переносима, чем жестко закодированный путь. Результаты этого поиска присваиваются переменной $ MyDocs. Затем мы создаем наш цикл ForEach, заставляя его проходить через каждый $ Doc в $ MyDocs.
$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Recurse. foreach ($ doc в $ 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 в $ oldDocs) {Move-Item -Path $ doc. FullName -Destination "$ ($ ArchiveFolder. FullName) \ $ ($ док. Имя) "-Подтвердите $ ложь. } $ source = $ ArchiveFolder. Полное имя. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Имя) .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. }
Внутри цикла мы проверяем, есть ли у каждого файла LastAccessTime недвижимость старше 30 дней. Мы получаем это с Get-Date командлет, и используя AddDays функция с отрицательным тридцать. Если это так, мы добавляем файл в $ myOldDocs массив. После того, как сортировка файлов завершена, мы берем наш законченный массив и создаем zip-файл. Этот процесс немного сложнее, так как включает в себя немного .NET. Не беспокойтесь, если вы не совсем поняли - вы можете украсть код из этот справочный документ TechNet.
Чтобы разобраться в том, что здесь происходит: мы переместим все наши старые файлы в новый каталог, названный для сегодняшней даты старше 30 дней. После того, как эта папка будет создана, мы должны создать ZIP-архив с тем же именем. Мы проверим, что архив завершился успешно, а файл .ZIP есть, а затем удалим новую папку. Установите это как запланированное задание для запуска один раз в месяц. Вы сэкономите немного места и сохраните папку «Документы» в чистоте.
Пока и Делай Пока: Циклы при условии
Если вы хотите запустить цикл только при соблюдении определенного условия, используйте цикл While. Если вы используете переменную для отслеживания счета, сначала установите ее.
I = 0. while (i <10) {Ваши шаги i + = 1. }
Проблема в том, что если вы не используете счетчик, вы можете захотеть, чтобы ваш код запускался хотя бы один раз, даже если тест верен. Это случай с примером сценария ниже. Так что в тех случаях, Вы хотите использовать цикл Do-While Как работают циклы Do-While в компьютерном программированииЦиклы являются одним из первых типов управления, которые вы изучите в программировании. Вы, вероятно, знаете о циклах while и for, но что делает цикл do-while? Подробнее . Синтаксис немного отличается.
делать {Ваши шаги. } while (Условное заявление)
Их использование не так очевидно для начинающего программиста. Делая типичные ежедневные сценарии, вы не можете столкнуться с ними так часто. Для них особенно полезно создать временный таймер для проверки успешности процесса.
Мы собираемся создать быстрый сценарий для перезагрузки удаленного компьютера и оповещения, если он не возвращается в течение 15 минут. В этом сценарии предполагается, что это домашний сервер или другой компьютер, который не часто перезагружается. Не стесняйтесь настраивать время, если ваш компьютер обычно загружается быстрее.
Перезагрузка и проверка: использование цикла Do-While
Этот скрипт немного проще. Во-первых, вы используете Перезапустить компьютер Команда перезагрузить удаленную машину. (Мы использовали фиктивный IP здесь для команд перезагрузки, не забудьте перезаписать его DNS / IP вашего компьютера). Затем создайте переменную счетчика, я и установите его в 0. Затем у вас есть цикл Do с Start-Sleep, который останавливает сценарий на 300 секунд (пять минут). Вторая команда добавляет один к счетчику.
Restart-Computer -ComputerName 127.0.0.1. I = 0. do {Start-Sleep -Seconds 300 $ i + = 1. } while ((! (Test-Connection 127.0.0.1 -Quiet)) -или $ i -gt 3) if ($ i -gt 3) {Write-Ouput "Удаленный компьютер не отвечает, проверьте." } else {Write-Output "Reboot Succeeded" }
Тогда у нас есть наши критерии. Мы используем тест Or, чтобы убедиться, что сбой генерирует предупреждение. Альтернативой является скрипт, бесконечно зацикливающийся на ожидании удаленного компьютера. Чтобы проверить машину, мы используем Тест-соединение Командлет. Для простоты это Ping для PowerShell. Добавляем параметр -Тихо что заставляет его возвращать True или False, а не результаты пакетов. Вторая часть оператора Or проверяет, больше ли счетчик, чем три.
Как только цикл завершится, мы хотим создать вывод. Это означает, что нам нужно проверить наш счетчик. Это быстрый оператор if / else. Если оно больше трех, скрипт выводит, что удаленная машина не отвечает. Если это не так, выводится, что перезагрузка прошла успешно.
Другие петли
В PowerShell есть два других типа циклов. Они в некоторой степени связаны с предыдущими двумя циклами, они просто не так часто используются. Цикл 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 и видеоиграх; и он был более десяти лет дневной ИТ-обезьяной, специализирующейся на сценариях и виртуализации.