HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#Руководства</a></p>
1 <p><a>#Руководства</a></p>
2 <ul><li>1 июн 2023</li>
2 <ul><li>1 июн 2023</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Рассказываем о языке программирования, с помощью которого можно творить чудеса в Windows (и не только).</p>
4 </ul><p>Рассказываем о языке программирования, с помощью которого можно творить чудеса в Windows (и не только).</p>
5 <p>Иллюстрация: Francesca Tosolini / Unsplash / Annie для Skillbox Media</p>
5 <p>Иллюстрация: Francesca Tosolini / Unsplash / Annie для Skillbox Media</p>
6 <p>Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.</p>
6 <p>Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.</p>
7 <p>Рядовые пользователи общаются со своими ПК через графический интерфейс: нажимают иконки и кнопки, переключаются между окнами и вкладками.</p>
7 <p>Рядовые пользователи общаются со своими ПК через графический интерфейс: нажимают иконки и кнопки, переключаются между окнами и вкладками.</p>
8 <p>А системные администраторы используют для этого командную строку. Чтобы компьютер понимал их указания, интерпретатор, он же командная оболочка, переводит всё на машинный язык.</p>
8 <p>А системные администраторы используют для этого командную строку. Чтобы компьютер понимал их указания, интерпретатор, он же командная оболочка, переводит всё на машинный язык.</p>
9 <p>Есть десятки оболочек под разные нужды, предпочтения и операционные системы. В Linux обычно используют<a>Bash</a>, в macOS по умолчанию установлен Zsh, а для Windows (но не только) есть PowerShell.</p>
9 <p>Есть десятки оболочек под разные нужды, предпочтения и операционные системы. В Linux обычно используют<a>Bash</a>, в macOS по умолчанию установлен Zsh, а для Windows (но не только) есть PowerShell.</p>
10 <p>Из статьи вы узнаете:</p>
10 <p>Из статьи вы узнаете:</p>
11 <ul><li><a>Что такое Windows PowerShell</a></li>
11 <ul><li><a>Что такое Windows PowerShell</a></li>
12 <li><a>Как открыть PowerShell в Windows</a></li>
12 <li><a>Как открыть PowerShell в Windows</a></li>
13 <li><a>Какие у неё есть команды (они же командлеты)</a></li>
13 <li><a>Какие у неё есть команды (они же командлеты)</a></li>
14 <li><a>Что такое объекты и конвейеры (пайплайны)</a></li>
14 <li><a>Что такое объекты и конвейеры (пайплайны)</a></li>
15 <li><a>Как запустить выполнение задач в фоновом режиме</a></li>
15 <li><a>Как запустить выполнение задач в фоновом режиме</a></li>
16 <li><a>Как работать в PowerShell ISE</a></li>
16 <li><a>Как работать в PowerShell ISE</a></li>
17 <li><a>О переменных</a></li>
17 <li><a>О переменных</a></li>
18 <li><a>О логических операторах</a></li>
18 <li><a>О логических операторах</a></li>
19 <li><a>Об условиях в Power Shell</a></li>
19 <li><a>Об условиях в Power Shell</a></li>
20 <li><a>Как работать с циклами</a></li>
20 <li><a>Как работать с циклами</a></li>
21 <li><a>О массивах, хеш-таблицах, функциях и классах</a></li>
21 <li><a>О массивах, хеш-таблицах, функциях и классах</a></li>
22 </ul><p><strong>Windows PowerShell</strong>- это одновременно командная оболочка и язык сценариев, основанный на <a>.NET</a>. PowerShell используют для управления компьютером и автоматизации задач. Это полноценный объектно-ориентированный язык, в котором есть переменные, функции, классы и объекты.</p>
22 </ul><p><strong>Windows PowerShell</strong>- это одновременно командная оболочка и язык сценариев, основанный на <a>.NET</a>. PowerShell используют для управления компьютером и автоматизации задач. Это полноценный объектно-ориентированный язык, в котором есть переменные, функции, классы и объекты.</p>
23 <p>В отличие от других командных оболочек, PowerShell работает не со строками, а с <a>объектами</a>. Благодаря этому можно создавать сложную логику. При этом интерпретатор полностью совместим со стандартными командами cmd.exe и может выполнять их.</p>
23 <p>В отличие от других командных оболочек, PowerShell работает не со строками, а с <a>объектами</a>. Благодаря этому можно создавать сложную логику. При этом интерпретатор полностью совместим со стандартными командами cmd.exe и может выполнять их.</p>
24 <p>Команды пишут в интерактивном режиме внутри терминала. Но если вы хотите сохранить какой-то часто используемый скрипт, удобнее использовать ISE.</p>
24 <p>Команды пишут в интерактивном режиме внутри терминала. Но если вы хотите сохранить какой-то часто используемый скрипт, удобнее использовать ISE.</p>
25 <p><strong>Windows PowerShell ISE</strong> - это интегрированная среда сценариев для PowerShell. В ней можно писать, сохранять и запускать скрипты, есть подсветка синтаксиса, автодополнение, справочник команд и инструменты отладки. PowerShell ISE - легаси-инструмент, он работает для версии языка 5.1 и ниже. Для более поздних обновлений используют IDE общего назначения с плагинами.</p>
25 <p><strong>Windows PowerShell ISE</strong> - это интегрированная среда сценариев для PowerShell. В ней можно писать, сохранять и запускать скрипты, есть подсветка синтаксиса, автодополнение, справочник команд и инструменты отладки. PowerShell ISE - легаси-инструмент, он работает для версии языка 5.1 и ниже. Для более поздних обновлений используют IDE общего назначения с плагинами.</p>
26 <p>С 2016 года язык стал<strong>кросс-платформенным</strong>. Его можно использовать не только в Windows, но и в macOS (начиная с версии 10.13) и популярных дистрибутивах Linux (каких именно, можно узнать в <a>документации</a>).</p>
26 <p>С 2016 года язык стал<strong>кросс-платформенным</strong>. Его можно использовать не только в Windows, но и в macOS (начиная с версии 10.13) и популярных дистрибутивах Linux (каких именно, можно узнать в <a>документации</a>).</p>
27 <p>Обычно PowerShell предустановлен по умолчанию. Но если у вас его нет, можете воспользоваться<a>инструкцией</a>от Microsoft. Также в документации есть руководства по установке для<a>macOS</a>и <a>Linux</a>.</p>
27 <p>Обычно PowerShell предустановлен по умолчанию. Но если у вас его нет, можете воспользоваться<a>инструкцией</a>от Microsoft. Также в документации есть руководства по установке для<a>macOS</a>и <a>Linux</a>.</p>
28 <p>PowerShell не зависит от версии операционной системы и одинаково работает как на Windows 10, так и на Windows Server.</p>
28 <p>PowerShell не зависит от версии операционной системы и одинаково работает как на Windows 10, так и на Windows Server.</p>
29 <p>Есть два основных способа открыть PowerShell или PowerShell ISE в Windows: меню "Пуск" и приложение "Выполнить".</p>
29 <p>Есть два основных способа открыть PowerShell или PowerShell ISE в Windows: меню "Пуск" и приложение "Выполнить".</p>
30 <p><strong>В меню "Пуск"</strong>долистайте до папки Windows PowerShell, откройте её и выберите нужное приложение. Здесь есть 32-разрядные (у них х86 в скобках) и 64-разрядные версии терминала и ISE.</p>
30 <p><strong>В меню "Пуск"</strong>долистайте до папки Windows PowerShell, откройте её и выберите нужное приложение. Здесь есть 32-разрядные (у них х86 в скобках) и 64-разрядные версии терминала и ISE.</p>
31 Открытие через "Пуск"<em>Скриншот: Skillbox Media</em><p><strong>Приложение "Выполнить"</strong>открывается сочетанием клавиш<strong>Win + R</strong>. В появившемся окне введите<em>powershell</em>или<em>powershell ise</em>(в зависимости от того, что вам нужно) и нажмите<strong>ОК</strong>.</p>
31 Открытие через "Пуск"<em>Скриншот: Skillbox Media</em><p><strong>Приложение "Выполнить"</strong>открывается сочетанием клавиш<strong>Win + R</strong>. В появившемся окне введите<em>powershell</em>или<em>powershell ise</em>(в зависимости от того, что вам нужно) и нажмите<strong>ОК</strong>.</p>
32 Открытие через утилиту "Выполнить"<em>Скриншот: Skillbox Media</em><p>Команды в PowerShell называются<strong>командлетами</strong>(от английского cmdlet). Все они состоят из связки "Глагол-Существительное", или по-другому "Действие-Объект". Например, Get-Services и Start-Process. Благодаря такой структуре можно понять назначение команды, даже если вы с ней ещё не сталкивались.</p>
32 Открытие через утилиту "Выполнить"<em>Скриншот: Skillbox Media</em><p>Команды в PowerShell называются<strong>командлетами</strong>(от английского cmdlet). Все они состоят из связки "Глагол-Существительное", или по-другому "Действие-Объект". Например, Get-Services и Start-Process. Благодаря такой структуре можно понять назначение команды, даже если вы с ней ещё не сталкивались.</p>
33 <p>После самого командлета ему передаются параметры и их значения. Между всеми словами в команде ставится пробел. Вот пример синтаксиса команды, чтобы перейти в каталог C:\:</p>
33 <p>После самого командлета ему передаются параметры и их значения. Между всеми словами в команде ставится пробел. Вот пример синтаксиса команды, чтобы перейти в каталог C:\:</p>
34 Set-Location -LiteralPath C:\ -PassThru<em>Скриншот: Skillbox Media</em><p>Препарируем её:</p>
34 Set-Location -LiteralPath C:\ -PassThru<em>Скриншот: Skillbox Media</em><p>Препарируем её:</p>
35 <ul><li>Set-Location - буквально "установить местоположение". Переходит в нужный каталог.</li>
35 <ul><li>Set-Location - буквально "установить местоположение". Переходит в нужный каталог.</li>
36 <li>-LiteralPath C:\ - в этом параметре мы прописываем путь до каталога, в который хотим перейти. У командлета Set-Location это аргумент по умолчанию, поэтому -LiteralPath можно не прописывать отдельно: Set-Location C:\ -Passthru сработает точно так же.</li>
36 <li>-LiteralPath C:\ - в этом параметре мы прописываем путь до каталога, в который хотим перейти. У командлета Set-Location это аргумент по умолчанию, поэтому -LiteralPath можно не прописывать отдельно: Set-Location C:\ -Passthru сработает точно так же.</li>
37 <li>-PassThru - обычно командлет Set-Location просто меняет местоположение и ничего не возвращает. Этот параметр говорит, что нужно вывести на экран расположение каталога, в который мы перешли.</li>
37 <li>-PassThru - обычно командлет Set-Location просто меняет местоположение и ничего не возвращает. Этот параметр говорит, что нужно вывести на экран расположение каталога, в который мы перешли.</li>
38 </ul><p>При этом в PowerShell<strong>не важен регистр</strong>. Эту же команду можно записать только заглавными буквами, только строчными и даже "лесенкой" - она всё равно сработает.</p>
38 </ul><p>При этом в PowerShell<strong>не важен регистр</strong>. Эту же команду можно записать только заглавными буквами, только строчными и даже "лесенкой" - она всё равно сработает.</p>
39 sEt-loCATion -PATH c:\ -passthru<em>Скриншот: Skillbox Media</em><p>Если в одной строке написаны сразу несколько команд, они разделяются точкой с запятой ;.</p>
39 sEt-loCATion -PATH c:\ -passthru<em>Скриншот: Skillbox Media</em><p>Если в одной строке написаны сразу несколько команд, они разделяются точкой с запятой ;.</p>
40 <p>Иногда команда может получиться слишком длинной. Чтобы разбить её на несколько строк, в месте переноса ставится гравис `. Создать новую строку можно сочетанием клавиш<strong>Shift + Enter</strong>(появится ниже текущей) или<strong>Ctrl + Enter</strong>(появится выше текущей).</p>
40 <p>Иногда команда может получиться слишком длинной. Чтобы разбить её на несколько строк, в месте переноса ставится гравис `. Создать новую строку можно сочетанием клавиш<strong>Shift + Enter</strong>(появится ниже текущей) или<strong>Ctrl + Enter</strong>(появится выше текущей).</p>
41 <p>Разделим предыдущую команду:</p>
41 <p>Разделим предыдущую команду:</p>
42 Set-Location ` -LiteralPath C:\ ` -PassThru<em>Скриншот: Skillbox Media</em><p><strong>Совет</strong></p>
42 Set-Location ` -LiteralPath C:\ ` -PassThru<em>Скриншот: Skillbox Media</em><p><strong>Совет</strong></p>
43 <p>Стрелки вверх и вниз позволяют прокручивать историю команд, которые вы вводили. Это удобно, если нужно выполнить одну из предыдущих команд ещё раз или внести в неё небольшие изменения.</p>
43 <p>Стрелки вверх и вниз позволяют прокручивать историю команд, которые вы вводили. Это удобно, если нужно выполнить одну из предыдущих команд ещё раз или внести в неё небольшие изменения.</p>
44 <p>При работе с терминалом в интерактивном режиме бывает неудобно каждый раз вводить полные названия командлетов. Поэтому у самых распространённых есть псевдонимы, или алиасы, - их сокращённые версии.</p>
44 <p>При работе с терминалом в интерактивном режиме бывает неудобно каждый раз вводить полные названия командлетов. Поэтому у самых распространённых есть псевдонимы, или алиасы, - их сокращённые версии.</p>
45 <p>Получить список доступных алиасов можно командой Get-Alias (у неё тоже есть свой псевдоним - gal).</p>
45 <p>Получить список доступных алиасов можно командой Get-Alias (у неё тоже есть свой псевдоним - gal).</p>
46 <em>Скриншот: Skillbox Media</em><p>Чтобы узнать список алиасов для отдельного командлета, воспользуйтесь параметром -Definition. Например:</p>
46 <em>Скриншот: Skillbox Media</em><p>Чтобы узнать список алиасов для отдельного командлета, воспользуйтесь параметром -Definition. Например:</p>
47 Get-Alias -Definition Get-ChildItem<em>Скриншот: Skillbox Media</em><p>Если вы по алиасу хотите узнать полное название командлета, примените параметр -Name. Это аргумент по умолчанию, поэтому писать его необязательно.</p>
47 Get-Alias -Definition Get-ChildItem<em>Скриншот: Skillbox Media</em><p>Если вы по алиасу хотите узнать полное название командлета, примените параметр -Name. Это аргумент по умолчанию, поэтому писать его необязательно.</p>
48 # Оба варианта равноправны Get-Alias -Name clear Get-Alias clear<em>Скриншот: Skillbox Media</em><p>Многим командлетам для работы нужно передать путь до файла или каталога. Делается это в виде строки, например: C:\Windows\System32.</p>
48 # Оба варианта равноправны Get-Alias -Name clear Get-Alias clear<em>Скриншот: Skillbox Media</em><p>Многим командлетам для работы нужно передать путь до файла или каталога. Делается это в виде строки, например: C:\Windows\System32.</p>
49 <p>Но если в этом адресе встретится пробел или другой спецсимвол, PowerShell воспримет его как разделитель. Например:</p>
49 <p>Но если в этом адресе встретится пробел или другой спецсимвол, PowerShell воспримет его как разделитель. Например:</p>
50 # Эта команда не будет работать Set-Location C:\Program Files<em>Скриншот: Skillbox Media</em><p>PowerShell "видит" пробел и думает, что путь до папки закончился на слове Program, а files - это уже значение какого-то другого параметра.</p>
50 # Эта команда не будет работать Set-Location C:\Program Files<em>Скриншот: Skillbox Media</em><p>PowerShell "видит" пробел и думает, что путь до папки закончился на слове Program, а files - это уже значение какого-то другого параметра.</p>
51 <p>Есть два способа избежать таких ситуаций:</p>
51 <p>Есть два способа избежать таких ситуаций:</p>
52 <ul><li>Экранировать проблемные символы обратным грависом `: C:\Program` Files. Если путь длинный, то это может быть неудобно.</li>
52 <ul><li>Экранировать проблемные символы обратным грависом `: C:\Program` Files. Если путь длинный, то это может быть неудобно.</li>
53 <li>Поместить весь путь в одинарные или двойные кавычки: 'C:\Program Files' или "C:\Program Files" (лучше одинарные).</li>
53 <li>Поместить весь путь в одинарные или двойные кавычки: 'C:\Program Files' или "C:\Program Files" (лучше одинарные).</li>
54 </ul><p>Также в PowerShell есть сокращения для быстрого доступа к ближайшим директориям:</p>
54 </ul><p>Также в PowerShell есть сокращения для быстрого доступа к ближайшим директориям:</p>
55 <ul><li>Точка . указывает на текущий каталог. Например, Get-ChildItem . позволяет посмотреть все папки и файлы в нынешнем местоположении.</li>
55 <ul><li>Точка . указывает на текущий каталог. Например, Get-ChildItem . позволяет посмотреть все папки и файлы в нынешнем местоположении.</li>
56 <li>Две точки .. указывают на родительский каталог. Например, Set-Location .. позволяет быстро к нему перейти. Это может быть полезно, если вы находитесь где-то в глубоко вложенной директории.</li>
56 <li>Две точки .. указывают на родительский каталог. Например, Set-Location .. позволяет быстро к нему перейти. Это может быть полезно, если вы находитесь где-то в глубоко вложенной директории.</li>
57 </ul><p>У многих командлетов есть сразу два параметра, в которых можно указать путь до папки или файла: -Path и -LiteralPath. Разница между ними в том, что в -Path можно подставлять переменные, а -LiteralPath воспринимает символы буквально, даже если в них указано имя переменной. О переменных в PowerShell мы рассказываем<a>ниже</a>.</p>
57 </ul><p>У многих командлетов есть сразу два параметра, в которых можно указать путь до папки или файла: -Path и -LiteralPath. Разница между ними в том, что в -Path можно подставлять переменные, а -LiteralPath воспринимает символы буквально, даже если в них указано имя переменной. О переменных в PowerShell мы рассказываем<a>ниже</a>.</p>
58 <p>Чтобы узнать подробную информацию о командлете, используйте Get-Help<em>Название-Командлета</em>. Например:</p>
58 <p>Чтобы узнать подробную информацию о командлете, используйте Get-Help<em>Название-Командлета</em>. Например:</p>
59 Get-Help Get-Childitem<em>Скриншот: Skillbox Media</em><p>У Get-Help есть несколько полезных параметров:</p>
59 Get-Help Get-Childitem<em>Скриншот: Skillbox Media</em><p>У Get-Help есть несколько полезных параметров:</p>
60 <ul><li>-Detailed даёт более детальную справку.</li>
60 <ul><li>-Detailed даёт более детальную справку.</li>
61 <li>-Full даёт полную справку.</li>
61 <li>-Full даёт полную справку.</li>
62 <li>-Examples приводит примеры использования командлета.</li>
62 <li>-Examples приводит примеры использования командлета.</li>
63 <li>-Online перенаправляет на веб-страницу с документацией.</li>
63 <li>-Online перенаправляет на веб-страницу с документацией.</li>
64 </ul><p>Командлеты PowerShell возвращают в терминал не строки, а <strong>объекты</strong> - структуру данных с набором свойств и методов. Подробно об объектах можно прочитать в нашей<a>статье</a>.</p>
64 </ul><p>Командлеты PowerShell возвращают в терминал не строки, а <strong>объекты</strong> - структуру данных с набором свойств и методов. Подробно об объектах можно прочитать в нашей<a>статье</a>.</p>
65 <p>Строка, которую вы видите в терминале после выполнения команды - только визуальное представление объекта. PowerShell в виде таблицы показывает некоторые свойства, но не все.</p>
65 <p>Строка, которую вы видите в терминале после выполнения команды - только визуальное представление объекта. PowerShell в виде таблицы показывает некоторые свойства, но не все.</p>
66 <p>Так же, как командлеты возвращают объекты, они могут принимать и обрабатывать их. Можно написать команду, на выходе получить объект, передать его другому командлету, получить объект уже от него, передать - и так до бесконечности. Это и есть<strong>конвейеры</strong>, или<strong>пайплайны</strong>.</p>
66 <p>Так же, как командлеты возвращают объекты, они могут принимать и обрабатывать их. Можно написать команду, на выходе получить объект, передать его другому командлету, получить объект уже от него, передать - и так до бесконечности. Это и есть<strong>конвейеры</strong>, или<strong>пайплайны</strong>.</p>
67 <p>Чтобы передать результат командлета другому командлету, между ними ставят вертикальную черту |.</p>
67 <p>Чтобы передать результат командлета другому командлету, между ними ставят вертикальную черту |.</p>
68 <p>Get-Process возвращает список процессов, запущенных на компьютере. Если передать ему название процесса (или шаблон, написанный с помощью<a>регулярных выражений</a>), командлет выведет только нужные элементы списка.</p>
68 <p>Get-Process возвращает список процессов, запущенных на компьютере. Если передать ему название процесса (или шаблон, написанный с помощью<a>регулярных выражений</a>), командлет выведет только нужные элементы списка.</p>
69 <p>Вызовем запущенный процесс powershell.</p>
69 <p>Вызовем запущенный процесс powershell.</p>
70 Get-Process powershell<em>Скриншот: Skillbox Media</em><p>Мы получили объект и таблицу с некоторыми его свойствами. Чтобы узнать все свойства и методы, передадим объект командлету Get-Member. Для этого нам и понадобится конвейер.</p>
70 Get-Process powershell<em>Скриншот: Skillbox Media</em><p>Мы получили объект и таблицу с некоторыми его свойствами. Чтобы узнать все свойства и методы, передадим объект командлету Get-Member. Для этого нам и понадобится конвейер.</p>
71 Get-Process powershell | Get-Member<em>Скриншот: Skillbox Media</em><p>Get-Member получил объект от Get-Process и вывел таблицу со всем его содержимым. Результат работы Get-Member - тоже объект (вернее, список объектов), который можно передать по конвейеру дальше.</p>
71 Get-Process powershell | Get-Member<em>Скриншот: Skillbox Media</em><p>Get-Member получил объект от Get-Process и вывел таблицу со всем его содержимым. Результат работы Get-Member - тоже объект (вернее, список объектов), который можно передать по конвейеру дальше.</p>
72 <p>Например, мы хотим отобразить только те строки, в которых MemberType - это Property. Для этого используем командлет Where-Object.</p>
72 <p>Например, мы хотим отобразить только те строки, в которых MemberType - это Property. Для этого используем командлет Where-Object.</p>
73 Get-Process powershell | Get-Member | Where-Object {$_.MemberType -eq 'Property'}<em>Скриншот: Skillbox Media</em><p>Where-Object по очереди перебирает каждый объект, полученный от Get-Member. Выражение в фигурных скобках - логическое:</p>
73 Get-Process powershell | Get-Member | Where-Object {$_.MemberType -eq 'Property'}<em>Скриншот: Skillbox Media</em><p>Where-Object по очереди перебирает каждый объект, полученный от Get-Member. Выражение в фигурных скобках - логическое:</p>
74 <ul><li>$_ ссылается на текущий объект (то есть на отдельную строку в таблице);</li>
74 <ul><li>$_ ссылается на текущий объект (то есть на отдельную строку в таблице);</li>
75 <li>.MemberType обращается к значению свойства MemberType в этом объекте;</li>
75 <li>.MemberType обращается к значению свойства MemberType в этом объекте;</li>
76 <li>-eq сравнивает, равно ли выражение слева от него выражению справа от него;</li>
76 <li>-eq сравнивает, равно ли выражение слева от него выражению справа от него;</li>
77 <li>'Property' - это значение, которое мы ожидаем увидеть у свойства MemberType.</li>
77 <li>'Property' - это значение, которое мы ожидаем увидеть у свойства MemberType.</li>
78 </ul><p>О логических выражениях мы рассказываем<a>ниже</a>.</p>
78 </ul><p>О логических выражениях мы рассказываем<a>ниже</a>.</p>
79 <p>Командлет Format-Table позволяет настроить отображение таблицы, которую PowerShell выводит в терминале: выбрать свойства и методы, которые в ней будут, установить ширину столбцов, сгруппировать данные по нескольким таблицам и так далее.</p>
79 <p>Командлет Format-Table позволяет настроить отображение таблицы, которую PowerShell выводит в терминале: выбрать свойства и методы, которые в ней будут, установить ширину столбцов, сгруппировать данные по нескольким таблицам и так далее.</p>
80 <p>Отформатируем таблицу, которую получили от командлета Get-Member.</p>
80 <p>Отформатируем таблицу, которую получили от командлета Get-Member.</p>
81 Get-Process powershell | Get-Member | Format-Table -AutoSize -Wrap -GroupBy MemberType -Property Name, Definition<em>Скриншот: Skillbox Media</em><p>Расшифруем параметры Format-Table:</p>
81 Get-Process powershell | Get-Member | Format-Table -AutoSize -Wrap -GroupBy MemberType -Property Name, Definition<em>Скриншот: Skillbox Media</em><p>Расшифруем параметры Format-Table:</p>
82 <ul><li>-AutoSize выравнивает ширину столбцов по размеру их содержимого;</li>
82 <ul><li>-AutoSize выравнивает ширину столбцов по размеру их содержимого;</li>
83 <li>-Wrap переносит содержимое ячейки на следующую строку, если она не помещается в размеры экрана (по умолчанию текст обрезается);</li>
83 <li>-Wrap переносит содержимое ячейки на следующую строку, если она не помещается в размеры экрана (по умолчанию текст обрезается);</li>
84 <li>-GroupBy разделяет одну таблицу на несколько, сгруппированных по значению какого-либо свойства (в нашем случае для каждого MemberType создана отдельная таблица);</li>
84 <li>-GroupBy разделяет одну таблицу на несколько, сгруппированных по значению какого-либо свойства (в нашем случае для каждого MemberType создана отдельная таблица);</li>
85 <li>-Property указывает, какие свойства объекта будут отображаться в таблице в качестве столбцов (в нашем случае Name и Definition).</li>
85 <li>-Property указывает, какие свойства объекта будут отображаться в таблице в качестве столбцов (в нашем случае Name и Definition).</li>
86 </ul><p>Командлет Sort-Object позволяет отсортировать список объектов (то есть таблицу) по значениям её свойств (то есть столбцов). Отсортируем результат работы GetMember по столбцу Name в алфавитном порядке. Для этого используем параметр -Property (работает как у Format-Table).</p>
86 </ul><p>Командлет Sort-Object позволяет отсортировать список объектов (то есть таблицу) по значениям её свойств (то есть столбцов). Отсортируем результат работы GetMember по столбцу Name в алфавитном порядке. Для этого используем параметр -Property (работает как у Format-Table).</p>
87 Get-Process powershell | Get-Member | Sort-Object -Property Name<em>Скриншот: Skillbox Media</em><p>У Sort-Object есть и другие полезные параметры:</p>
87 Get-Process powershell | Get-Member | Sort-Object -Property Name<em>Скриншот: Skillbox Media</em><p>У Sort-Object есть и другие полезные параметры:</p>
88 <ul><li>-Descending сортирует объекты в порядке убывания.</li>
88 <ul><li>-Descending сортирует объекты в порядке убывания.</li>
89 <li>-Unique удаляет дубликаты и возвращает только уникальные объекты.</li>
89 <li>-Unique удаляет дубликаты и возвращает только уникальные объекты.</li>
90 <li>-Top получает число N и отображает первые N объектов в таблице.</li>
90 <li>-Top получает число N и отображает первые N объектов в таблице.</li>
91 <li>-Bottom получает число N и отображает последние N объектов в таблице.</li>
91 <li>-Bottom получает число N и отображает последние N объектов в таблице.</li>
92 </ul><p>Некоторые задачи могут занимать много времени. Это, например, установка и обновление ПО, поиск файла в большой директории.<strong>Пока PowerShell выполняет одну команду, писать другие нельзя.</strong></p>
92 </ul><p>Некоторые задачи могут занимать много времени. Это, например, установка и обновление ПО, поиск файла в большой директории.<strong>Пока PowerShell выполняет одну команду, писать другие нельзя.</strong></p>
93 <p>К примеру, попытаемся найти на всём диске C файл powershell.exe. Используем для этого командлет Get-ChildItem с параметром -Recurse. Так он будет искать не только в текущем каталоге, но и во всех подкаталогах.</p>
93 <p>К примеру, попытаемся найти на всём диске C файл powershell.exe. Используем для этого командлет Get-ChildItem с параметром -Recurse. Так он будет искать не только в текущем каталоге, но и во всех подкаталогах.</p>
94 <p>PowerShell может попытаться зайти в папки, к которым у него нет доступа, поэтому добавим -ErrorAction SilentlyContinue. Если случится ошибка, команда не станет сообщать об этом и просто продолжит выполняться.</p>
94 <p>PowerShell может попытаться зайти в папки, к которым у него нет доступа, поэтому добавим -ErrorAction SilentlyContinue. Если случится ошибка, команда не станет сообщать об этом и просто продолжит выполняться.</p>
95 <p>Получается так:</p>
95 <p>Получается так:</p>
96 Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue<em>Скриншот: Skillbox Media</em><p>Как видим, пока задача не завершена, командная строка недоступна. Чтобы принудительно прервать её выполнение, нажмите сочетание клавиш<strong>Ctrl + C</strong>(при этом ничего не должно быть выделено, иначе компьютер воспримет это как команду "Копировать").</p>
96 Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue<em>Скриншот: Skillbox Media</em><p>Как видим, пока задача не завершена, командная строка недоступна. Чтобы принудительно прервать её выполнение, нажмите сочетание клавиш<strong>Ctrl + C</strong>(при этом ничего не должно быть выделено, иначе компьютер воспримет это как команду "Копировать").</p>
97 <p>Чтобы не ждать выполнения долгих задач и сразу приступать к следующим, их можно запускать в фоновом режиме. Делается это командлетом Start-Job, а сама команда помещается в фигурные скобки.</p>
97 <p>Чтобы не ждать выполнения долгих задач и сразу приступать к следующим, их можно запускать в фоновом режиме. Делается это командлетом Start-Job, а сама команда помещается в фигурные скобки.</p>
98 Start-Job {Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue}<em>Скриншот: Skillbox Media</em><p>Одновременно можно выполнять любое количество фоновых задач. Помимо Start-Job для работы с фоновыми задачами есть другие командлеты:</p>
98 Start-Job {Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue}<em>Скриншот: Skillbox Media</em><p>Одновременно можно выполнять любое количество фоновых задач. Помимо Start-Job для работы с фоновыми задачами есть другие командлеты:</p>
99 <ul><li>Get-Job выдаёт отчёт со статусом фоновых задач.</li>
99 <ul><li>Get-Job выдаёт отчёт со статусом фоновых задач.</li>
100 <li>Wait-Job делает консоль недоступной, пока выполняется фоновая задача.</li>
100 <li>Wait-Job делает консоль недоступной, пока выполняется фоновая задача.</li>
101 <li>Stop-Job прерывает выполнение фоновой задачи.</li>
101 <li>Stop-Job прерывает выполнение фоновой задачи.</li>
102 <li>Receive-Job выводит результат фоновой задачи и удаляет его из памяти. Чтобы сохранить результат в памяти, используйте параметр -Keep.</li>
102 <li>Receive-Job выводит результат фоновой задачи и удаляет его из памяти. Чтобы сохранить результат в памяти, используйте параметр -Keep.</li>
103 </ul><p>Wait-Job, Stop-Job и Receive-Job ожидают, что вы примените их к конкретной задаче (или нескольким). Для этого укажите название Name или идентификатор Id. Делать это можно и в связке с Get-Job.</p>
103 </ul><p>Wait-Job, Stop-Job и Receive-Job ожидают, что вы примените их к конкретной задаче (или нескольким). Для этого укажите название Name или идентификатор Id. Делать это можно и в связке с Get-Job.</p>
104 Get-Job Job1<em>Скриншот: Skillbox Media</em><p>Терминал PowerShell удобен для выполнения небольших коротких однострочных задач. Чтобы создавать и сохранять сложные скрипты, есть интегрированная среда сценариев.</p>
104 Get-Job Job1<em>Скриншот: Skillbox Media</em><p>Терминал PowerShell удобен для выполнения небольших коротких однострочных задач. Чтобы создавать и сохранять сложные скрипты, есть интегрированная среда сценариев.</p>
105 <em>Скриншот: Skillbox Media</em><p><strong>Важно!</strong></p>
105 <em>Скриншот: Skillbox Media</em><p><strong>Важно!</strong></p>
106 <p>PowerShell ISE предназначен для версий языка 5.1 и младше. Для более старших версий Microsoft рекомендует использовать Visual Studio Code с расширением PowerShell.</p>
106 <p>PowerShell ISE предназначен для версий языка 5.1 и младше. Для более старших версий Microsoft рекомендует использовать Visual Studio Code с расширением PowerShell.</p>
107 <p>PowerShell ISE состоит из трёх основных окон:</p>
107 <p>PowerShell ISE состоит из трёх основных окон:</p>
108 <ul><li><strong>область сценариев</strong>в верхней части экрана - в ней пишут скрипты;</li>
108 <ul><li><strong>область сценариев</strong>в верхней части экрана - в ней пишут скрипты;</li>
109 <li><strong>область консоли</strong>в нижней части экрана - работает так же, как обычный терминал, здесь можно писать команды в интерактивном режиме;</li>
109 <li><strong>область консоли</strong>в нижней части экрана - работает так же, как обычный терминал, здесь можно писать команды в интерактивном режиме;</li>
110 <li><strong>панель команд</strong>в правой части экрана - полный справочник команд PowerShell с конструктором, в котором можно указать значения нужных параметров.</li>
110 <li><strong>панель команд</strong>в правой части экрана - полный справочник команд PowerShell с конструктором, в котором можно указать значения нужных параметров.</li>
111 </ul><p>PowerShell позволяет вставлять в код комментарии. Они никак не влияют на выполнение скрипта и нужны людям, которые будут читать вашу программу. Однострочный комментарий начинается с символа #, а многострочный обрамляется с двух сторон символами &lt;# и #&gt;.</p>
111 </ul><p>PowerShell позволяет вставлять в код комментарии. Они никак не влияют на выполнение скрипта и нужны людям, которые будут читать вашу программу. Однострочный комментарий начинается с символа #, а многострочный обрамляется с двух сторон символами &lt;# и #&gt;.</p>
112 <em>Скриншот: Skillbox Media</em><p>Любой код чаще читают, чем пишут, и важно делать его понятным для человека. Разработчики PowerShell договорились между собой о едином своде правил и выпустили<a>стайлгайд</a>. Вот несколько правил оттуда.</p>
112 <em>Скриншот: Skillbox Media</em><p>Любой код чаще читают, чем пишут, и важно делать его понятным для человека. Разработчики PowerShell договорились между собой о едином своде правил и выпустили<a>стайлгайд</a>. Вот несколько правил оттуда.</p>
113 <p><strong>Используйте нотацию PascalCase</strong>в названиях командлетов, функций, параметров, свойств, методов, переменных и классов.<strong>Неправильно</strong>писать: get-service, Get-service, GET-SERVICE.<strong>Правильно</strong>: Get-Service.</p>
113 <p><strong>Используйте нотацию PascalCase</strong>в названиях командлетов, функций, параметров, свойств, методов, переменных и классов.<strong>Неправильно</strong>писать: get-service, Get-service, GET-SERVICE.<strong>Правильно</strong>: Get-Service.</p>
114 <p><strong>Пишите полные названия командлетов.</strong>Алиасы удобны для работы в интерактивном режиме, но в скриптах могут затруднять чтение команд.<strong>Неправильно</strong>: dir, gci, ls.<strong>Правильно</strong>: Get-ChildItem.</p>
114 <p><strong>Пишите полные названия командлетов.</strong>Алиасы удобны для работы в интерактивном режиме, но в скриптах могут затруднять чтение команд.<strong>Неправильно</strong>: dir, gci, ls.<strong>Правильно</strong>: Get-ChildItem.</p>
115 <p><strong>One True Brace Style</strong>при оформлении вложенности. Если вы где-то используете фигурные скобки, то код внутри них отбивается табуляцией (четыре пробела), а сами скобки ставятся так:</p>
115 <p><strong>One True Brace Style</strong>при оформлении вложенности. Если вы где-то используете фигурные скобки, то код внутри них отбивается табуляцией (четыре пробела), а сами скобки ставятся так:</p>
116 if ($var1 -eq $var2) { # Код внутри условия } else { # Код внутри условия # Ещё код внутри условия }<p><strong>Исключение из прошлого правила</strong> - когда код в фигурных скобках совсем небольшой, его можно записать в одну строку. Например:</p>
116 if ($var1 -eq $var2) { # Код внутри условия } else { # Код внутри условия # Ещё код внутри условия }<p><strong>Исключение из прошлого правила</strong> - когда код в фигурных скобках совсем небольшой, его можно записать в одну строку. Например:</p>
117 Get-ChildItem | Where-Object { $_.Length -gt 10mb }<p><strong>Комментируйте код.</strong>Так будет гораздо проще разобраться, что он делает и как работает. Причём как другому человеку, так и вам самим через полгода.</p>
117 Get-ChildItem | Where-Object { $_.Length -gt 10mb }<p><strong>Комментируйте код.</strong>Так будет гораздо проще разобраться, что он делает и как работает. Причём как другому человеку, так и вам самим через полгода.</p>
118 <p>В PowerShell ISE можно выполнить код целиком или частично, есть инструменты отладки. Скрипты сохраняются в файлах с расширением .ps1. Но запустить их двойным кликом не получится - нужно нажать правую кнопку мыши и в появившемся окне выбрать<em>Выполнить с помощью PowerShell.</em></p>
118 <p>В PowerShell ISE можно выполнить код целиком или частично, есть инструменты отладки. Скрипты сохраняются в файлах с расширением .ps1. Но запустить их двойным кликом не получится - нужно нажать правую кнопку мыши и в появившемся окне выбрать<em>Выполнить с помощью PowerShell.</em></p>
119 <p>Также запустить скрипт можно из оболочки. Например, в каталоге C:\Scripts есть файл test_script.ps1. Выполнить его можно:</p>
119 <p>Также запустить скрипт можно из оболочки. Например, в каталоге C:\Scripts есть файл test_script.ps1. Выполнить его можно:</p>
120 <ul><li>командой PowerShell -File C:\Scripts\test_script.ps1, запущенной из любого места;</li>
120 <ul><li>командой PowerShell -File C:\Scripts\test_script.ps1, запущенной из любого места;</li>
121 <li>командой .\test_script.ps1, запущенной, когда вы находитесь в каталоге C:\Scripts.</li>
121 <li>командой .\test_script.ps1, запущенной, когда вы находитесь в каталоге C:\Scripts.</li>
122 </ul><p>По умолчанию запускать любые файлы с PowerShell-скриптами запрещено. Сделано это в целях безопасности. Узнать нынешнюю политику выполнения можно с помощью командлета Get-ExecutionPolicy. Вот какая она может быть:</p>
122 </ul><p>По умолчанию запускать любые файлы с PowerShell-скриптами запрещено. Сделано это в целях безопасности. Узнать нынешнюю политику выполнения можно с помощью командлета Get-ExecutionPolicy. Вот какая она может быть:</p>
123 <ul><li><strong>Restricted</strong>(установлена по умолчанию) - запрещено запускать любые скрипты.</li>
123 <ul><li><strong>Restricted</strong>(установлена по умолчанию) - запрещено запускать любые скрипты.</li>
124 <li><strong>AllSigned</strong> - разрешено запускать только скрипты, которые были подписаны доверенным разработчиком.</li>
124 <li><strong>AllSigned</strong> - разрешено запускать только скрипты, которые были подписаны доверенным разработчиком.</li>
125 <li><strong>RemoteSigned</strong> - разрешено запускать подписанные доверенным разработчиком и собственные скрипты.</li>
125 <li><strong>RemoteSigned</strong> - разрешено запускать подписанные доверенным разработчиком и собственные скрипты.</li>
126 <li><strong>Unrestricted</strong> - разрешено запускать любые скрипты.</li>
126 <li><strong>Unrestricted</strong> - разрешено запускать любые скрипты.</li>
127 </ul><p>Чтобы ваши ps1-файлы запускались, нужно заменить политику выполнения на RemoteSigned. Для этого откройте PowerShell от имени администратора и выполните команду:</p>
127 </ul><p>Чтобы ваши ps1-файлы запускались, нужно заменить политику выполнения на RemoteSigned. Для этого откройте PowerShell от имени администратора и выполните команду:</p>
128 Set-ExecutionPolicy RemoteSigned<p>Чтобы подтвердить действие, введите y.</p>
128 Set-ExecutionPolicy RemoteSigned<p>Чтобы подтвердить действие, введите y.</p>
129 - <em>Скриншот: Skillbox Media</em><p>Чтобы сохранять данные и обращаться к ним в будущем, в PowerShell есть переменные. Перед их названием ставится знак доллара $, а сами они могут содержать латинские буквы (заглавные и строчные), цифры и нижние подчёркивания.</p>
129 + <em>Скриншот: Skillbox Media</em><p>Чтобы сохраять данные и обращаться к ним в будущем, в PowerShell есть переменные. Перед их названием ставится знак доллара $, а сами они могут содержать латинские буквы (заглавные и строчные), цифры и нижние подчёркивания.</p>
130 <em>Скриншот: Skillbox Media</em><p>Переменная может хранить данные любого типа, и их можно перезаписывать.</p>
130 <em>Скриншот: Skillbox Media</em><p>Переменная может хранить данные любого типа, и их можно перезаписывать.</p>
131 <em>Скриншот: Skillbox Media</em><p>Переменную можно<strong>привести к определённому типу данных</strong>. Создадим переменную со строкой 2023 и преобразуем её в число. Чтобы узнать тип данных, воспользуемся методом .GetType().</p>
131 <em>Скриншот: Skillbox Media</em><p>Переменную можно<strong>привести к определённому типу данных</strong>. Создадим переменную со строкой 2023 и преобразуем её в число. Чтобы узнать тип данных, воспользуемся методом .GetType().</p>
132 <em>Скриншот: Skillbox Media</em><p>Чтобы<strong>удалить переменную</strong>, используется метод .Clear().</p>
132 <em>Скриншот: Skillbox Media</em><p>Чтобы<strong>удалить переменную</strong>, используется метод .Clear().</p>
133 <p>Переменные можно<strong>подставлять в строки</strong>, если они оформлены двойными кавычками. Если же кавычки одинарные, то PowerShell воспринимает символы в строке буквально. Сравните:</p>
133 <p>Переменные можно<strong>подставлять в строки</strong>, если они оформлены двойными кавычками. Если же кавычки одинарные, то PowerShell воспринимает символы в строке буквально. Сравните:</p>
134 <em>Скриншот: Skillbox Media</em><p>Помимо пользовательских также есть<strong>системные переменные</strong>. Например, $PSVersionTable хранит информацию о версии PowerShell.</p>
134 <em>Скриншот: Skillbox Media</em><p>Помимо пользовательских также есть<strong>системные переменные</strong>. Например, $PSVersionTable хранит информацию о версии PowerShell.</p>
135 <em>Скриншот: Skillbox Media</em><p>PowerShell позволяет проводить с объектами арифметические операции и сравнивать их друг с другом. Для этого он использует логические операторы.</p>
135 <em>Скриншот: Skillbox Media</em><p>PowerShell позволяет проводить с объектами арифметические операции и сравнивать их друг с другом. Для этого он использует логические операторы.</p>
136 <p><strong>Арифметические операторы:</strong></p>
136 <p><strong>Арифметические операторы:</strong></p>
137 <ul><li>+ - сложение;</li>
137 <ul><li>+ - сложение;</li>
138 <li>- - вычитание;</li>
138 <li>- - вычитание;</li>
139 <li>* - умножение;</li>
139 <li>* - умножение;</li>
140 <li>/ - деление;</li>
140 <li>/ - деление;</li>
141 <li>% - деление по модулю;</li>
141 <li>% - деление по модулю;</li>
142 <li>( и ) - скобки для группировки операций.</li>
142 <li>( и ) - скобки для группировки операций.</li>
143 </ul><p><strong>Операторы сравнения</strong>оформляются так же, как параметры командлетов. Их названия произошли от английских выражений, указанных в скобках.</p>
143 </ul><p><strong>Операторы сравнения</strong>оформляются так же, как параметры командлетов. Их названия произошли от английских выражений, указанных в скобках.</p>
144 <ul><li>-eq - равно (от <strong>eq</strong>ual);</li>
144 <ul><li>-eq - равно (от <strong>eq</strong>ual);</li>
145 <li>-ne - не равно (от <strong>n</strong>ot <strong>e</strong>qual);</li>
145 <li>-ne - не равно (от <strong>n</strong>ot <strong>e</strong>qual);</li>
146 <li>-gt - больше (от <strong>g</strong>reater<strong>t</strong>han);</li>
146 <li>-gt - больше (от <strong>g</strong>reater<strong>t</strong>han);</li>
147 <li>-ge - больше либо равно (от <strong>g</strong>reater than or <strong>e</strong>qual);</li>
147 <li>-ge - больше либо равно (от <strong>g</strong>reater than or <strong>e</strong>qual);</li>
148 <li>-lt - меньше (от <strong>l</strong>ess<strong>t</strong>han);</li>
148 <li>-lt - меньше (от <strong>l</strong>ess<strong>t</strong>han);</li>
149 <li>-le - меньше либо равно (от <strong>l</strong>ess than or <strong>e</strong>qual).</li>
149 <li>-le - меньше либо равно (от <strong>l</strong>ess than or <strong>e</strong>qual).</li>
150 </ul><p><strong>Условия</strong>в PowerShell создаются с помощью ключевых слов if, elseif и else. В обычных скобках указывается само условие, в фигурных - код, который запускается при его выполнении. Например:</p>
150 </ul><p><strong>Условия</strong>в PowerShell создаются с помощью ключевых слов if, elseif и else. В обычных скобках указывается само условие, в фигурных - код, который запускается при его выполнении. Например:</p>
151 $Number = 123 if ($Number -gt 0) { Write-Host 'Число больше нуля' } elseif ($Number -lt 0) { Write-Host 'Число меньше нуля' } else { Write-Host 'Число равно нулю' } &gt;&gt;&gt; Число больше нуля<p>Также условия можно задавать с помощью ключевого слова switch. Например:</p>
151 $Number = 123 if ($Number -gt 0) { Write-Host 'Число больше нуля' } elseif ($Number -lt 0) { Write-Host 'Число меньше нуля' } else { Write-Host 'Число равно нулю' } &gt;&gt;&gt; Число больше нуля<p>Также условия можно задавать с помощью ключевого слова switch. Например:</p>
152 $Day = 2 switch ($Day) { 1 {Write-Host 'Понедельник'} 2 {Write-Host 'Вторник'} 3 {Write-Host 'Среда'} 4 {Write-Host 'Четверг'} 5 {Write-Host 'Пятница'} 6 {Write-Host 'Суббота'} 7 {Write-Host 'Воскресенье'} } &gt;&gt;&gt; Вторник<p><strong>Windows PowerShell</strong> - язык программирования, на котором администрируют операционные системы и автоматизируют процессы. Он поддерживает объектно-ориентированное программирование и позволяет работать в интерактивном режиме, а также писать, сохранять и выполнять полноценные скрипты.</p>
152 $Day = 2 switch ($Day) { 1 {Write-Host 'Понедельник'} 2 {Write-Host 'Вторник'} 3 {Write-Host 'Среда'} 4 {Write-Host 'Четверг'} 5 {Write-Host 'Пятница'} 6 {Write-Host 'Суббота'} 7 {Write-Host 'Воскресенье'} } &gt;&gt;&gt; Вторник<p><strong>Windows PowerShell</strong> - язык программирования, на котором администрируют операционные системы и автоматизируют процессы. Он поддерживает объектно-ориентированное программирование и позволяет работать в интерактивном режиме, а также писать, сохранять и выполнять полноценные скрипты.</p>
153 <ul><li>PowerShell<strong>предустановлен в Windows</strong>, но его можно скачать на macOS и Linux.</li>
153 <ul><li>PowerShell<strong>предустановлен в Windows</strong>, но его можно скачать на macOS и Linux.</li>
154 <li>У языка есть собственная<strong>интегрированная среда сценариев</strong>PowerShell ISE, предназначенная для старых версий языка (5.1 и ниже).</li>
154 <li>У языка есть собственная<strong>интегрированная среда сценариев</strong>PowerShell ISE, предназначенная для старых версий языка (5.1 и ниже).</li>
155 <li>PowerShell работает не со строками, а с <strong>объектами</strong>. Он обрабатывает их с помощью<strong>командлетов</strong>, построенных по принципу "Глагол-Существительное".</li>
155 <li>PowerShell работает не со строками, а с <strong>объектами</strong>. Он обрабатывает их с помощью<strong>командлетов</strong>, построенных по принципу "Глагол-Существительное".</li>
156 <li>Результат выполнения одного командлета можно передавать другому в <strong>конвейере</strong>.</li>
156 <li>Результат выполнения одного командлета можно передавать другому в <strong>конвейере</strong>.</li>
157 <li>Задачи можно выполнять в <strong>фоновом режиме</strong>.</li>
157 <li>Задачи можно выполнять в <strong>фоновом режиме</strong>.</li>
158 <li>PowerShell - высокоуровневый язык, на котором можно работать с переменными, логическими операторами, условиями, циклами, массивами, хеш-таблицами, функциями и классами.</li>
158 <li>PowerShell - высокоуровневый язык, на котором можно работать с переменными, логическими операторами, условиями, циклами, массивами, хеш-таблицами, функциями и классами.</li>
159 </ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
159 </ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>