Глава 1. Основы PowerShell
Содержание
Давайте начнём с базовых элементов и быстро просмотрим переменные, циклы, операторы if/else,
переключатели и функции. Все они являются сердцем любого языка сценариев и поспособствуют вам в создании сценариев от простых
до сложных.
Я не погружаюсь в версии PowerShell или в то чем является PowerShell (но вот вам быстрое для понимания определение без особого углубления: PowerShell это решение автоматизации задач составленных в командной строке оболочки и язык сценариев {Прим. пер.: подробнее в нашем переводе 4 издания Книга рецептов автоматизации Windows Server при помощи PowerShell Томаса Ли, Packt Publishing, 2021}). Я также не хочу говорить о том в каких платформах он может применяться или получать и устанавливать команды, потому как это не всеобъемлющая книга для изучения данного языка.
Основной посыл этой книги состоит в обучении вас созданию сценариев, не обладая знаниями лежащих под капотом элементов. Это подход, который я успешно применял со многими студентами. Постепенно они стали хорошо разбираться в этом языке программирования.
Не все обладают опытом программирования, и не все умеют создавать код. Однако, следуя описанному в этой книге подходу, вы сможете быстро создавать собственные сценарии и автоматизировать ИТ системы/ процессы.
![]() | Замечание |
|---|---|
|
Ко всем применяемым в данной книге кодам можно получить доступ кликнув по кнопке Download Source Code, расположенной на www.apress.com/9781484277584 (следите за номерами листингов). |
Для начала нам необходимо разобраться с основами, которые включают переменные и массивы. Всякая переменная в PowerShell начинается с символа доллара ($), например:
$a = "1"
$b = "Vikas"
Когда вы набираете $a и $b, будут отображены значения, как это показано на Рисунке 1-1.
Теперь для вывода на свой экран вы можете применить Write-host:
Input: PS C:\> Write-host $a
Output: 1
Input: PS C:\> Write-host $b
Output: vikas
![]() | Совет |
|---|---|
|
Возьмите за правило применять кавычки при присвоении значений переменным, как это показано в предыдущих двух примерах. |
Давайте изменим значение фонового цвета того, что отображается через Write-host:
Input: PS C:\& Write-host $b -ForegroundColor Green
Output: vikas
Input: PS C:\& Write-host "processing .........." -ForegroundColor Green
Output: processing ..........
PS C:\&
Рисунок 1-2 отображает получаемый результат:
Давайте по- быстрому проиллюстрируем массивы. В PowerShell массивы могут определяться аналогичным переменным способом. Вот некоторые образцы:
$b = "A","B","C","D","E"
Если вы определите это как переменную и разделяете все элементы запятой, PowerShell автоматически распознаёт что это массив, как то отображено на Рисунке 1-3.
Надлежащим способом определения массива выступает показанный ниже, потому как это показано самим синтаксисом, именно это представляет массив (что показано на Рисунке 1-4):
$c= @("server1","server2")
Динамический массив может определяться как @(). Вы будете применять этот тип в
примерах данной книги для добавления элементов в свой массив и выработки отчётов:
$d= @()
If else является обработкой на основе условия. Это основа любого языка
программирования сценариев. Если некоторое условие истинно, вам необходимо обработать нечто; в противном случае обрабатывается
нечто иное.
Листинг 1-1 показывает два примера. Во- первых, вы
определяете значение переменной как 10 и затем вы пользуетесь соответствующим условными операторами и предложениями
if else для проверки больше ли это чем 9 или меньше. На основании полученного
результата вы применяете Write-host для вывода на экран, как это показано на
Рисунке 1-5.
Обратите внимание, что -gt означает больше чем, а
-lt меньше чем. Не беспокойтесь; я быстро пробегусь по ним в своём следующем
подразделе.
Листинг 1-1. Пример кода для применения оператора больше чем в If/Else
[int]$a= "10"
if($a -gt "9")
{
write-host "True" -foregroundcolor Green
}else {
Write-host "False" -foregroundcolor Red
}
И да, [int] означает целое. Если вы применяете префикс перед самой переменной, он
означает что вы исключительно определяете её как целое. Определять всегда лучше, но если вы не хотите, PowerShell достаточно
сообразителен чтобы выполнить это неявно. Существуют именуемые типы данных и они содержат [string],
[char], [int], [array]
и так далее.
Листинг 1-2 и Рисунок 1-6 показывают фрагмент кода применения оператора меньше чем.
Листинг 1-2. Пример кода для применения оператора меньше чем в If/Else
[int]$a= "10"
if($a -lt "9"){
write-host "True" -foregroundcolor Green
}else {
Write-host "False" -foregroundcolor Red
}
Ниже приводится перечень операторов условия/ логики, которые вы можете применять в своих повседневных сценариях. Без них
многие операции сценариев были бы невозможны. Они всегда используются в предложениях сравнения if
else, как это показано выше в родительском разделе.
-
-eqРавно -
-neНе равно -
-geБольше чем или равно -
-gtБольше чем -
-ltМеньше чем -
-leМеньше чем или равно -
-likeСопоставление с символами подстановки -
-notlikeСопоставление с символами подстановки -
-matchСопоставление регулярным выражением -
-notmatchСопоставление регулярным выражением -
-replaceОператор замены -
-containsОператор включения -
-notcontainsОператор включения
-
-andЛогическое И -
-orЛогическое ИЛИ -
-notЛогическое ОТРИЦАНИЕ -
-!Логическое ОТРИЦАНИЕ
Логические операторы применяются когда вы желаете комбинировать свои условия. Давайте обновим приводимый ранее пример в
отображаемый в Листинге 1-3 пример. Вы выводите на печать true
когда значение переменной $a меньшем чем 9 или равно 10. Здесь вы сочетаете два
условия. Поскольку это оператор OR, TRUE
будет возвращаться при одном из совпадений. Здесь наше второе условие, $a -eq "10",
совпадает если значение равно 10. Посмотрите на полученный на
Рисунке 1-7
результат.
Листинг 1-3. Пример кода, отображающего логический оператор -or
[int]$a= "10"
If(($a -lt "9") -or ($a -eq "10")){
write-host "True" -foregroundcolor Green
}else {
Write-host "False" -foregroundcolor Red}
Когда вы применяете оператор OR, тогда должны совпадать оба условия если вы желаете
получить TRUE, что не происходит в обоих случаях. Смотрите
Листинге 1-4 и
Рисунок 1-8.
Листинг 1-4. Пример кода, отображающего логический оператор -and
[int]$a= "10"
If(($a -lt "9") -and ($a -eq "10")){
write-host "True" -foregroundcolor Green
}else {
Write-host "False" -foregroundcolor Red}
Not служит для отрицания. В целом, я не пользуюсь им часто. По моему опыту,
это приводит к человеческой ошибке когда вы спешите и недостаточно всё обдумаете.
В любом языке программирования сценариев существуют два основных цикла, и это верно и для PowerShell. Существуют и прочие, но все они выступают вариантами этих двух.
В PowerShell существуют три повтора для циклов for:
-
foreach -
foreach-object -
for
Давайте проведём различия между этими тремя циклами for рассмотрев их на примерах.
foreach: Вам требуется определить foreach $variable
в $collection: foreach ($i in $x).
![]() | Замечание |
|---|---|
|
В Листинге 1-5 вы сочетаете операторы
|
Листинг 1-5. Код, отображающий цикл foreach
$x=@("1","2","3",,"4")
foreach ($i in $x) {
if ($i -lt 2) { write-host "$i is Green" -foregroundcolor Green
}
else{ write-host "$i is yellow" -foregroundcolor yellow
}
}
foreach-object: Вы пользуетесь конвейером (PIPE) с его коллекцией для достижения
тех же самых моментов (смотрите Листинг 1-6 и
Рисунок 1-10):
$x | foreach-object
Листинг 1-6. Код, отображающий цикл foreach-object
$x=@("1","2","3",,"4")
$x | foreach-object{
if ($_ -lt 2) { write-host "$_ is Green" -foregroundcolor Green
}
else{ write-host "$_ is yellow" -foregroundcolor yellow
}
}
for: Это именно то, что вы могли запомнить в свои школьные годы. Я почти не применяю
его вовсе и вижу меньше применений по всему сообществу. Посмотрите на его код в
Листинге 1-7 и получаемые результаты на
Рисунке 1-11.
Листинг 1-7. Код, отображающий цикл for
for($x=1; $x -le 5; $x++){
if($x -lt 2){write-host "$x is Green" -foregroundcolor Green
}
else{ write-host "$x is yellow" -foregroundcolor yellow
}
}
Цикл while является совсем другим, потому как он продолжается пока его условие
истинно. Давайте пройдёмся по некоторым образцам чтобы получить больше ясности.
Цикл while также обладает двумя повторами:
-
do-while -
while
Для do-while вы выполняете нечто пока выполняется соответствие какого- то
условия. В Листинге 1-8
переменная x = 0 и внутри вы наращиваете значение этой переменной, пока оно не станет
равным 4. Для получаемых результатов посмотрите на Рисунок 1-12.
![]() | Замечание |
|---|---|
|
Сначала вы делаете что- то, а потом проверяете соответствие условия. |
Листинг 1-8. Код, отображающий цикл do-while
$x= 0
Do {$x++
if($x -lt 2){write-host "$x is Green" -foregroundcolor Green
}
else{ write-host "$x is yellow" -foregroundcolor yellow
}
}while($x -ne 4)
Для while вы также выполняете нечто пока выполняется соответствие какого- то
условия. В Листинге 1-9
переменная x = 0 и внутри вы наращиваете значение этой переменной, пока оно не станет
равным 4.
![]() | Замечание |
|---|---|
|
Сначала вы осуществляете проверку и после этого выполняете свои дела. |
Основное отличие между этими двумя, как вы можете видеть, состоит в том, что цикл while
(пример, который показан на Листинге 1-9) проверяет своё
условие перед самим циклом (повтором), а do-while осуществляет проверку после своего
выполнения. Для получаемых результатов взгляните на Рисунок 1-13.
Листинг 1-9. Код, отображающий цикл while
$x= 0
while($x -ne 4) {$x++
if($x -lt 2){write-host "$x is Green" -foregroundcolor Green
}
else{ write-host "$x is yellow" -foregroundcolor yellow
}
}
Функции это такие предметы, которые после определения могут вызываться в любом месте сценария. Применение функций
позволяет избегать повторов длинного кода. Это намёк для лучшего понимания. Я не буду вдаваться в подробности задания
параметров и расширенных функциональных возможностей функции, так как мой главный мотив здесь - слегка разобраться и
объединить свой код для выполнения необходимой работы. В
Листинге 1-10
вы создаёте функцию Add для сложения двух чисел. Получаемый результат показан на
Рисунке 1-14.
Листинг 1-10. Пример кода, отображающего функцию сложения двух чисел
Function Add ($a1, $b1)
{
$a1 + $b1
}
Add 5 6 # Вызов функции
Аналогично, вы можете создать её для трёх и более чисел. Отсылаем вас к Листингу 1-11 и Рисунку 1-15.
Листинг 1-11. Пример кода, отображающего функцию сложения трёх чисел
Function Add ($a1, $b1, $c1)
{
$a1 + $b1 +$c1
}
Add 5 6 9 # Вызов функции
-
Сетевые протоколы для профессионалов безопасности, Йорам Орзач, Дипаншу Ханна, Packt Publishing, октябрь 2022
-
JavaScript для хакеров. Научитесь думать как хакер, Гарет Хейс, Leanpub, декабрь 2022
-
Как заниматься взломом словно легенда. Прорываемся в Windows, Спарк Флоу, No Starch Press, октябрь 2022
-
Управление оперативной памятью в реляционных системах баз данных, Педро Мехия Альварес, Марсело Леон Айяла, Сусана Ортега Сиснерос, Springer, август 2022
-
Атакующий код запуска оболочки с нуля, Ришалин Пиллэй, Packt Publishing, май 2022
-
Linux подсистема Windows (WSL) для профессионалов, Хайден Барнс, Apress, июнь 2021
-
Внутреннее устройство CPython, Энтони Шоу, Real Python, январь 2021
-
Контейнеры Linux и Виртуализация: с точки зрения ядра, Шашанк Мохан Джейн, Apress, октябрь 2020
-
Изучаем подсистемы Windows для Linux, Прэйтик Сингх, Apress, сентябрь 2020
-
Всё что требуется для RabbitMQ, 2е изд., Ловайса Йохансон, Дэйвид Доссо, Packt Publishing, август 2020
-
Практика загрузки. Изучение процесса загрузки Linux, Windows и Unix, Йогеш Бабар, Apress, июль 2020
-
Распределённые системы для практиков, Даймос Раптис, Leanpub, май 2020
-
Практическая автоматизация предприятия в Linux, Джеймс Фриман, Packt Publishing, январь 2020, Действенное выполнение крупномасштабной автоматизации инфраструктуры Linux с применением Ansible.
-
Внутреннее устройство баз данных, Алекс Петров, O`Reilly Media, Inc., октябрь 2019
-
Книга рецептов параллельного программирования Python. 2е изд., Джанкарло Закконе, Packt Publishing, сентябрь 2019
-
Полное руководство Ansible. 3е изд., Джеймс Фриман и Джесс Китинг, Packt Publishing, март 2019
-
Книга рецептов NGINX Дерек ДеДжонге, O’Reilly Media, Inc, ноябрь 2018
-
Полное руководство Ceph, 2е изд. Ник Фиск, Packt Publishing, февраль 2019
-
Docker для разработчиков Rails Роб Айзенберг, The Pragmatic Programmers, LLC., февраль 2019, с дополнениями по настройкам Django и 100Gb IB
-
Глава 11. SQL Server и контейнеры (включая Kubernetes) Боб Вордс, "Профессиональный SQL Server поверх Linux", Apress, октябрь 2018
-
Полное руководство параллельного программирования на Python Куан Нгуен, Packt Publishing, ноябрь 2018
-
Asyncio в Python 3 Цалеб Хаттингх, O’Reilly Media, Inc, март 2018
-
RabbitMQ для профессионалов Гайвин Рой, Manning Publications, сентябрь 2017
-
Proxmox. Полное руководство. 3е изд Васим Ахмед, Packt Publishing, ноябрь 2017
-
Книга рецептов Ceph, 2е изд Викхайят Умрао,Мишель Хаккет,Каран Сингх, Packt Publishing, ноябрь 2017
-
Изучаем Ceph, 2е изд., Энтони Д`Атри, Вайбхав Бхембре, Каран Сингх, Packt Publishing, октябрь 2017
-
Книга рецептов виртуализации KVM Константин Иванов, Packt Publishing, июнь 2017
-
Полное руководство работы с сетями на Python. Эрик Чоу, Июнь 2017
-
Контейнеризация при помощи LXC Константин Иванов, Packt Publishing, март 2017
-
Proxmox. Полное руководство. 2е изд., Васим Ахмед, Packt Publishing, май 2016
-
Книга рецептов Ceph Каран Сингх, Packt Publishing, февраль 2016
-
Полная виртуализация. Базовая коммерческая редакция: Proxmox-freeNAS-Zentyal-pfSense. Ли Р. Сюрбер, февраль 2016
-
Zabbix. Полное руководство. 2е изд., Андреа Далле Ваккье, сентябрь 2015
-
Книга рецептов Proxmox. Главы 1-6, Дополнения: Преобразование OpenVZ в LXC, Организация ограждения Васим Ахмед, Packt Publishing, август 2015
-
Изучаем Ceph Каран Сингх, Packt Publishing, январь 2015
Дополнительные ссылки:
-
Сетевые протоколы для профессионалов безопасности, Йорам Орзач, Дипаншу Ханна, Packt Publishing, октябрь 2022
-
JavaScript для хакеров. Научитесь думать как хакер, Гарет Хейс, Leanpub, декабрь 2022
-
Как заниматься взломом словно легенда. Прорываемся в Windows, Спарк Флоу, No Starch Press, октябрь 2022
-
Управление оперативной памятью в реляционных системах баз данных, Педро Мехия Альварес, Марсело Леон Айяла, Сусана Ортега Сиснерос, Springer, август 2022
-
Атакующий код запуска оболочки с нуля, Ришалин Пиллэй, май 2022
-
Ускоренное продвижение PowerShell: хакерство для не- программистов, Викас Сухиджа, ноябрь 2021
-
Книга рецептов автоматизации Windows Server при помощи PowerShell, 4е изд., Томас Ли, июль 2021
-
Linux подсистема Windows (WSL) для профессионалов, Хайден Барнс, Apress, июнь 2021
-
Изучаем подсистемы Windows для Linux, Прэйтик Сингх, Apress, сентябрь 2020
-
Active Directory Полное руководство. 2е изд., частичный перевод, Дишан Франсис, Packt Publishing, август 2019
-
Полное руководство Ansible. 3е изд., Джеймс Фриман и Джесс Китинг, Packt Publishing, март 2019
-
PowerShell и Python сообща - настроены на цифровые расследования Чет Хосмер, Apress, Октябрь 2018
-
Windows Server 2019. Полное руководство - 2е изд Джордан Краузе, Packt Publishing, март 2019
-
Docker для разработчиков Rails Роб Айзенберг, The Pragmatic Programmers, LLC., февраль 2019, с дополнениями по настройкам Django и 100Gb IB
-
Глава 11. SQL Server и контейнеры (включая Kubernetes) Боб Вордс, "Профессиональный SQL Server поверх Linux", Apress, октябрь 2018
-
Windows Server 2016 Administration Fundamentals Bekim Dauti, ISBN: 978-1-78862-656-9
-
Windows Server 2016 Hyper- V. Полное руководство, Джон Сэйвиль
-
SQL Server 2016 с высокой доступностью. Выпущенный на волю., Поль Бертуччи, Раджу Шривастава
-
Внутреннее устройство Windows, Часть 1, 7е изд., Павел Йосифович, Алекс Ионеску, Марк Э. Руссинович, Дэвид А. Соломон
-
Windows Server 2016 наизнанку, Оурин Томас
-
Exam Ref 70-743. Обновление ваших навыков MCSA: Windows Server 2016, Чарли Плута
-
Exam Ref 70-740. Установка, хранение и вычисления с Windows Server 2016., Крейг Заккер
-
Windows Server 2016 Hyper-V Книга рецептов. 2е изд, Патрик Лоундс, Чарбел Немном, Леанардо Карваль
-
Windows Server 2016. Книга рецептов, Джордан Краузе
-
Hyper-V 2016 Практический опыт. 2е изд., Бенедикт Бергер, Ромейн Серре
-
Zabbix. Полное руководство. 2е изд., Андреа Далле Ваккье
Дополнительные ссылки:
| Перевод: Copyright © 2022 All rights reserved. Ссылки обязательны (Refs and links are obligatory). | http://www.mdl.ru портфолио SD DC |
| HPE DL360 G10 since 4300$ | |

![[Замечание]](/common/images/admon/note.png)

![[Совет]](/common/images/admon/tip.png)













