Шпаргалка по PowerShell — это версия языка командной строки Windows, которая помогает вам легко выполнять и автоматизировать критически важные задачи в ваших системах. Но как выполнять эти задачи и максимально использовать PowerShell в своей системе Windows?
Мы составили шпаргалку по PowerShell, в которой описаны синтаксис PowerShell и все команды PowerShell, чтобы помочь вам оптимизировать PowerShell и даже подготовиться к собеседованиям.
Шпаргалка по PowerShell
Начнем с краткого введения в команды Windows 10 PowerShell.
Основы PowerShell
PowerShell — это кроссплатформенное и широко используемое решение для автоматизации задач, сочетающее в себе возможности оболочки командной строки, языка сценариев и структуры управления конфигурацией. PowerShell можно запускать на операционных системах Windows, Linux и macOS. В отличие от других доступных оболочек, которые только принимают и возвращают данные, PowerShell принимает и возвращает объекты .NET.
Эта оболочка имеет следующие возможности.
- Удобная история командной строки
- Широкие возможности, такие как завершение табуляции и предсказание команд
- Псевдонимы команд и параметров
- Система изменения команд
- Встроенная справочная система, подобная Unix man pages
Учитывая возможности любого языка сценариев, вы можете использовать PowerShell для автоматизации процессов и задач управления системой. Он позволяет создавать, тестировать и развертывать решения в средах CI/CD.
PowerShell построен на базе .NET Common Language Runtime (CLR), что означает, что все входные и выходные данные являются объектами .NET. Вам не придется разбирать текстовый вывод, чтобы получить из него информацию.
Язык сценариев PowerShell обладает следующими возможностями.
- Функции, классы, объекты и модули
- Простая система форматирования для обеспечения четкого вывода данных для повышения удобочитаемости
- Встроенная поддержка различных форматов данных, таких как CSV, JSON и XML
- Система типов для создания динамических типов
Теперь перейдем к некоторым полезным командам PowerShell.
Шпаргалка PowerShell по командам
Командлеты
Cmdlets — это внутренние команды PowerShell. Эти команды возвращают один или несколько объектов в конвейер, в конце которого мы упоминаем некоторые свойства объектов в следующей таблице, чтобы увидеть их значения, отображаемые на экране.
Команда | Описание |
|
Эта команда позволяет получить поддержку с помощью PowerShell. |
|
Эта команда предлагает вам список доступных PSDrives, таких как c, env, hklm, hkcu, alias и т.д. |
|
В любом реестре дочерние ключи — это подключи текущего ключа. Чтобы получить необходимые сведения, можно воспользоваться следующей командой. |
|
Выполните эту команду, чтобы рекурсивно перечислить все дочерние элементы текущего PSdrive, папки или ключа реестра. |
|
Используйте эту команду для включения скрытых папок (каталогов). |
|
Выполните любую из этих команд, чтобы получить список имен файлов и каталогов в текущей папке. |
|
Используйте эту команду, чтобы получить количество записей в коллекции объектов, возвращенных командой Get-Children. |
PSdrives
PSdrives — это коллекция объектов, сгруппированных вместе, чтобы к ним можно было получить доступ как к диску файловой системы. PSprovider» выполняет эту группировку.
По умолчанию сеанс PS может обращаться к нескольким PSdrives, включая c:, env:, alias: и HKLM:, где c: означает обычный диск c Windows; env: — это пространство переменных среды Windows; alias: — это коллекция псевдонимов команд; а HKLM — это ветка в реестре.
При любом сеансе PS пользователь попадает в свою домашнюю папку. Если вы хотите перейти из сеанса PS на другой диск PSdrive и получить информацию с этого диска, воспользуйтесь следующими командами:
Команды | Описание |
|
Символ подсказки изменится на «ENV:\>». Установите env, выполнив следующую команду:
|
|
Эта команда предоставит вам все переменные окружения. |
|
Используйте эту команду, чтобы получить переменные окружения «userprofile». |
|
Выполните следующую команду, чтобы изменить символ подсказки на » Alias». |
|
Выполните эту команду, чтобы получить все дочерние элементы всех псевдонимов. |
|
Используйте эту команду, чтобы снова получить приглашение «C:/>», вернувшись к диску по умолчанию. |
|
Выполните эту команду, чтобы узнать, что означает псевдоним «ls». |
Конвейеры
Cmdlets использует конвейеры для передачи объектов, но не потоков символов, как Unix. Символ конвейера — | (ASCII 124), за которым следует команда, обрабатывающая вывод, проходящий через конвейер. Конвейер состоит из следующих трех этапов.
Get-ChildItem *.txt | Where-Object length -lt 1000 | Sort-Object length
В следующей таблице приведены некоторые из основных команд конвейеров:
Команда | Описание |
|
Легко устанавливает значение свойства ‘lastwritetime.year’ на текущую дату и время, не влияя на содержимое файла. |
|
Предоставляет пустой результат |
|
Изменяет старые имена файлов и расширения файлов на новые |
|
Тривиальная команда переименования, вызывающая автоматическую переменную |
|
Если у передаваемого объекта $_ нет свойства (name), вы получите ошибку, так как параметр $_.name является null |
|
Отображает список имен всех файлов, присутствующих в текущей папке, отсортированных в алфавитном порядке. |
|
Перемещает все файлы в подкаталог папки |
|
Выдает сообщение об ошибке, что Move-Item не имеет входа |
Alias (Алиас)
Cmdlets поддерживают несколько псевдонимов. В следующей таблице приведены некоторые псевдонимы и их описания:
Команда | Описание |
|
Добавляет значение к файлу |
|
Поиск содержимого файла в массиве |
|
Изменение папки, ключа или диска PS |
|
Очищает консоль |
|
Удаление файлов |
|
Списки папок, ключей или дочерних элементов PSDrive |
|
Отправляет массив в консоль, конвейер или перенаправляет его в файл |
|
Обход каждого объекта в конвейере |
|
Форматирует таблицу с выбранными свойствами для каждого объекта в каждом столбце |
|
Форматирует свойства процесса по имени |
|
Обеспечивает псевдоним командлета |
|
Предоставляет вам команды только из текущей сессии |
|
Извлечение всех членов объекта |
|
Предоставляет свойства указанного элемента |
|
Получает текущее значение для указанного свойства при использовании параметра name |
|
Находит имена переменных сеансов |
|
Создает новый файл, каталог, символическую ссылку, ключ реестра или запись реестра. |
|
Выдает полный список всех запущенных процессов |
|
Предоставляет местоположение текущего каталога или ключа реестра |
|
Переименовывает старое имя элемента в новое имя |
|
Удаляет указанный каталог, файлы или ключи реестра |
|
Удаляет указанную переменную |
|
Приостанавливает деятельность на определенный период времени |
Операторы
Арифметические операторы
Оператор | Описание | Пример |
+ | Складывает целые числа; объединяет | 6 + 2 |
строки, массивы и хэш-таблицы. | «file» + «name»
@(1, «one») + @(2.0, «two») @{«one» = 1} + @{«two» = 2} |
|
+ | Делает число из объекта | 123 |
— | Вычитание одного значения из другого | 6 — 2 |
— | Вычисляет противоположное число | — -6 |
(Get-Date).AddDays(-1) | ||
* | Умножение чисел или копирование строк и массивов заданное количество раз | 6 * 2 |
@(«!») * 4 | ||
«!» * 3 | ||
/ | Делит два значения | 6 / 2 |
% | Modulus — возвращает остаток от операции деления | 7 % 2 |
-band | Побитовое И | 5 -band 3 |
-bnot | Побитовое НЕ | -bnot 5 |
-bor | Побитовое ИЛИ | 5 -bor 0x03 |
-bxor | Побитовое XOR | 5 -bxor 3 |
-shl | Сдвигает биты влево | 102 -shl 2 |
-shr | Сдвигает биты вправо | 102 -shr 2 |
Приоритет оператора
Приоритет | Оператор | Описание |
1 | () | Круглые скобки |
2 | — | Для отрицательного числа или унарного оператора |
3 | *, /, % | Для умножения и деления |
4 | +,- | Для сложения и вычитания |
5 | -band, -bnot, -bor, -bxor, -shr, and -shl | Для побитовых операций |
Операторы присваивания
Оператор | Описание |
= | Устанавливает значение переменной на указанное значение |
+= | Увеличивает значение переменной на указанное значение или добавляет указанное значение к существующему значению |
-= | Уменьшает значение переменной на заданную величину |
*= | Умножает значение переменной на указанное значение или добавляет указанное значение к существующему значению |
/= | Делит значение переменной на заданное значение |
%= | Делит значение переменной на заданное значение, а затем присваивает переменной остаток (модуль). |
++ | Увеличивает значение переменной, присваиваемого свойства или элемента массива на 1. |
— | Уменьшает значение переменной, присваиваемого свойства или элемента массива на 1. |
Операторы сравнения
Тип | Оператор | Сравнительный тест |
Равенство | -eq | равно |
-ne | не равно | |
-gt | больше, чем | |
-ge | больше или равно | |
-lt | меньше чем | |
-le | меньше чем или равно | |
Соответствие | -like | строка соответствует шаблону подстановки |
-notlike | строка не соответствует шаблону | |
-match | строка соответствует regex-шаблону | |
-notmatch | строка не соответствует regex-шаблону | |
Замена | -replace | заменяет строки, соответствующие шаблону regex |
Сдерживание | -contains | коллекция содержит значение |
-notcontains | коллекция не содержит значения | |
-in | значение находится в коллекции | |
-notin | значение отсутствует в коллекции | |
Тип | -is | оба объекта имеют одинаковый тип |
-isnot | объекты разного типа |
Логические операторы
Оператор | Описание | Пример |
-and | Логическое И. TRUE, когда оба утверждения истинны. | (1 -eq 1) -and (1 -eq 2)
FALSE |
-or | Логическое ИЛИ. TRUE, когда любое из утверждений TRUE. | (1 -eq 1) -or (1 -eq 2)
TRUE |
-xor | Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ. ИСТИНА, когда только одно утверждение является ИСТИНОЙ. | (1 -eq 1) -xor (2 -eq 2)
FALSE |
-not | Логическое не. Отрицает утверждение, которое следует за ним. | -not (1 -eq 1)
FLASE |
! | То же, что и -нет | !(1 -eq 1)
FALSE |
Оператор перенаправления
Оператор | Описание | Синтаксис |
> | Отправить указанный поток в файл | n> |
>> | Добавить указанный поток в файл | n>> |
>&1 | Перенаправляет указанный поток на поток Success | n>&1 |
Операторы типа
Оператор | Описание | Пример |
-isNot | Возвращает TRUE, если входные данные не являются экземпляром указанного.NET типа. | (get-date) -isNot [DateTime]
FALSE |
-as | Преобразует входные данные в указанный тип .NET. | «5/7/07» -as [DateTime]
Monday, May 7, 2007 00:00:00 |
Другие операторы
Оператор | Описание |
() Оператор группировки | Позволяет переопределить старшинство операторов в выражениях |
&() Оператор подвыражения | Выдает результат одного или нескольких утверждений |
@( ) Оператор подвыражения массива | Возвращает результаты одного или нескольких операторов в виде массивов. |
& Фоновый оператор | Конвейер перед & выполняется этой командой в задании Powershell. |
[] Cast оператор | Преобразует объекты к определенному типу. |
Регулярные выражения
Регулярное выражение — это шаблон, который используется для сопоставления текста, включающего литеральные символы, операторы и другие конструкции. Регулярные выражения PowerShell по умолчанию не чувствительны к регистру.
Метод | Чувствительность к случаю |
Select-String | use -CaseSensitive switch |
switch statement | use the -casesensitive option |
operators | prefix with ‘c’ (-cmatch, -csplit, or -creplace) |
Литералы символов
Регулярное выражение может быть литеральным символом или строкой.
Группы символов
Они позволяют сопоставить любое количество символов за один раз, в то время как [^character group] сопоставляет только символы, не входящие в группу.
Диапазон символов
Шаблон также может быть диапазоном символов. Символы могут быть алфавитными [A-Z], цифровыми [0-9] или даже [ -~] (все печатаемые символы) в формате ASCII.
Числа
Класс символов \d будет соответствовать любой десятичной цифре. И наоборот, \D будет соответствовать любой недесятичной цифре.
Словесный символ
Класс символов \w будет соответствовать любому символу слова [a-zA-Z_0-9]. Чтобы подобрать любой несловосочетаемый символ, используйте \W.
Подстановочный знак
Точка (.) является символом подстановки в регулярных выражениях. Он будет соответствовать любому символу, кроме новой строки (\n).
Пробел
Пробельные символы сопоставляются с помощью класса символов \s. Любой не пробельный символ сопоставляется с помощью \S. Буквальные символы пробела ‘ ‘ также могут быть использованы.
Экранирование символов
Обратная косая черта (\) используется для экранирования символов, чтобы механизм регулярных выражений не разбирал их.
Следующие символы зарезервированы: []().\^$|?*+{}.
Подстановка в регулярном выражении.
Регулярные выражения с оператором -replace позволяют динамически заменять текст с помощью захваченного текста.
<input> -replace <original>, <substitute>
Управление потоком
ForEach-Object
ForEach-Object — это командлет, который позволяет выполнять итерации по элементам в конвейере, например, с помощью однострочных команд PowerShell. ForEach-Object будет передавать объекты по конвейеру.
Хотя параметр Module команды Get-Command принимает несколько значений, которые являются строками, он будет принимать их только через конвейерный ввод с помощью имени свойства или ввода параметра.
Если вы хотите передать две строки по значению в Get-Command для использования с параметром Module, используйте команду ForEach-Object:
$ComputerName = 'DC01', 'WEB01' foreach ($Computer in $ComputerName) { Get-ADComputer -Identity $Computer }
For
Цикл «for» выполняет итерации, пока заданное условие истинно.
Например:
for ($i = 1; $i -lt 5; $i++) { Write-Output "Sleeping for $i seconds" Start-Sleep -Seconds $i }
Do
В PowerShell существует два различных цикла «do». Do Until выполняется, пока заданное условие ложно.
Пример 1:
$number = Get-Random -Minimum 1 -Maximum 10 do { $guess = Read-Host -Prompt "What's your guess?" if ($guess -lt $number) { Write-Output 'Too low!' } elseif ($guess -gt $number) { Write-Output 'Too high!' } } until ($guess -eq $number)
Пример 2:
$number = Get-Random -Minimum 1 -Maximum 10 do { $guess = Read-Host -Prompt "What's your guess?" if ($guess -lt $number) { Write-Output 'Too low!' } elseif ($guess -gt $number) { Write-Output 'Too high!' } } while ($guess -ne $number)
While
Подобно циклу Do While, цикл While выполняется до тех пор, пока заданное условие истинно. Однако разница заключается в том, что цикл While оценивает условие в верхней части цикла перед выполнением любого кода. Таким образом, он не выполняется, если условие оценивается как ложное.
Например:
$date = Get-Date -Date 'November 22' while ($date.DayOfWeek -ne 'Thursday') { $date = $date.AddDays(1) } Write-Output $date
Переменные
PowerShell позволяет хранить все типы значений. Например, он может хранить результаты команд и элементы командных выражений, такие как имена, пути и параметры. Вот некоторые из различных переменных PowerShell.
Переменные, созданные пользователем: Они создаются и поддерживаются пользователем. Переменные, которые вы создаете в командной строке PowerShell, будут существовать только до тех пор, пока открыто окно PowerShell. Когда вы закрываете окно PowerShell, эти переменные удаляются. Если вы хотите сохранить переменную, вам необходимо добавить ее в свой профиль PowerShell. Вы можете создавать переменные и объявлять их с тремя различными диапазонами: глобальным, скриптовым или локальным.
Автоматические переменные: Эти переменные хранят состояние PowerShell и создаются PowerShell. Только PowerShell может изменять их значения по мере необходимости для поддержания точности. Пользователи не могут изменять значение этих переменных. Например, переменная $PSHOME будет хранить путь к директории установки PowerShell.
Переменные предпочтений: Эти переменные хранят предпочтения пользователя для PowerShell и создаются PowerShell. Эти переменные заполнены значениями по умолчанию и могут быть изменены пользователями. Например, переменная $MaximumHistoryCount задает максимальное количество записей в истории сеансов.
Чтобы создать новую переменную, необходимо использовать оператор присваивания и присвоить переменной значение. Объявлять переменную перед ее использованием не нужно. Значение по умолчанию для всех переменных — $null.
Например:
$MyVariable = 1, 2, 3 $MyVariable
Функция
Именование функции
Для именования функции используйте имя регистра Паскаля с утвержденным глаголом и существительным в единственном числе. Список утвержденных глаголов можно получить, выполнив Get-Verb:
Get-Verb | Sort-Object -Property Verb
Создание простой функции
Для создания простой функции используйте ключевое слово function, за которым следует имя функции. Затем используйте открытую и закрывающую фигурные скобки. Функция будет выполнять код, содержащийся в этих фигурных скобках.
Например:
function Get-Version { $PSVersionTable.PSVersion }
Работа с модулями
Модуль — это пакет, содержащий объекты PowerShell, такие как команды, провайдеры, функции, рабочие процессы, значения переменных и псевдонимы. Элементы пакета можно реализовать в сценарии PowerShell, скомпилированной библиотеке DLL или и в том, и в другом. PowerShell автоматически импортирует модули при первом запуске любой команды в установленном модуле. Вы можете использовать команды в модуле без настройки или конфигурации профиля.
Как использовать модуль
Чтобы использовать любой модуль, его необходимо сначала установить. Затем найдите команду, которая поставляется вместе с модулем, и используйте ее.
Установка модуля
Если вы получили модуль в виде папки, установите его перед использованием в командной строке PowerShell. Некоторые модули являются предустановленными. Вы можете использовать следующую команду для создания каталога Modules для текущего пользователя:
New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules
Скопируйте всю папку модуля в каталог Modules. Для копирования папки можно использовать любой метод, включая проводник Windows, Cmd.exe и PowerShell.
Поиск установленных модулей
Выполните следующие действия, чтобы найти модули, установленные в местоположении модулей по умолчанию (не импортированные).
Get-Module -ListAvailable
Поиск команд в модуле
Выполните следующую команду, чтобы найти команды модуля:
Get-Command -Module <module-name> Get-Command -Module Microsoft.PowerShell.Archive
Импортирование модуля
Выполните следующую команду с нужным именем модуля:
Import-Module <module-name>
Удаление имени модуля
Вы можете выполнить следующую команду с нужным именем модуля:
Remove-Module <module-name>
Просмотр расположения модулей по умолчанию
Используйте следующую команду для просмотра расположения модулей по умолчанию:
$Env:PSModulePath
Добавление местоположения модуля по умолчанию
Вы можете использовать следующий формат команды:
$Env:PSModulePath = $Env:PSModulePath + ";<path>"
Добавление местоположения модуля по умолчанию в Linux или macOS
Используйте следующее, чтобы выполнить ту же команду, что и выше, только в Linux или macOS:
$Env:PSModulePath += ":<path>"
Хеш-таблицы
Хеш-таблица — это сложная структура данных для хранения данных в виде пар ключ-значение. Мы также называем хэш-таблицу словарем или ассоциативным массивом. Чтобы понять, что такое хэш-таблица, рассмотрим серию IP-адресов и соответствующие имена компьютеров. В хэш-таблице эти данные хранятся в виде пар ключ-значение, где IP-адреса обозначают ключи, а имена компьютеров — соответствующие им значения.
Синтаксис хэш-таблицы выглядит следующим образом:
@{ <name> = <value>; [<name> = <value> ] ...}
Синтаксис упорядоченного словаря выглядит следующим образом:
[ordered]@{ <name> = <value>; [<name> = <value> ] ...}
Создание хэш-таблиц
Если вы хотите создать хэш-таблицу, выполните следующие действия:
- Начните хэш-таблицу со знака at (@) и заключите ее в фигурные скобки ({}).
- Хэш-таблица должна содержать хотя бы одну пару ключ-значение, поэтому вводите данные после создания хэш-таблицы.
- Отделите ключ от его значения с помощью знака равенства (=).
- Разделяйте пары ключ/значение в хэш-таблице точкой с запятой (;).
- Заключите пробел между ключами в кавычки. Значения должны быть допустимыми выражениями PowerShell. Также заключайте строки в кавычки, даже если между ними нет пробелов.
- Сохраните хэш-таблицу как переменную, чтобы эффективно управлять ею.
- При назначении упорядоченной хэш-таблицы переменной поместите атрибут [ordered] перед символом @. Если поместить его перед именем переменной, команда не выполнится.
Например:
$hash = @{} $hash = @{ Number = 1; Shape = "Square"; Color = "Blue"} [hashtable]$hash = [ordered]@{ Number = 1; Shape = "Square"; Color = "Blue"} $hash
Добавление и удаление ключей и значений
Чтобы добавить ключи и значения в хэш-таблицу, используйте следующий формат команды:
$hash[«<key>»] = «<value>»
Например, вы можете добавить ключ «Time» со значением «Now» в хэш-таблицу с помощью следующего формата оператора:
$hash["Time"] = "Now"
или
$hash.Add("Time", "Now")
Или вы можете удалить ключ с помощью этого выражения:
$hash.Remove("Time")
Асинхронная обработка событий
Эти команды позволяют регистрировать и отменять подписки на события и выводить список существующих подписок. Вы также можете перечислить ожидающие события и обработать или удалить их по желанию.
Команды PowerShell для обработки событий
Имя командлета обработки событий | Описание |
Register-ObjectEvent | Этот командлет регистрирует подписку на события для событий, генерируемых объектами .NET |
Register-WmiEvent | Регистрирует подписку на события для событий, генерируемых объектами WMI |
Register-EngineEvent | Регистрирует подписку на события для событий, генерируемых самим PowerShell |
Get-EventSubscriber | Получает список зарегистрированных подписок на события в сессии |
Unregister-Event | Удаляет одну или несколько зарегистрированных подписок на события |
Wait-Event | Ожидает наступления события. Эта команда может ждать определенного события или любого события. Она также позволяет указать тайм-аут, ограничивающий время ожидания события. По умолчанию ожидание длится вечно. |
Get-Event | Получает ожидающие необработанные события из очереди событий |
Remove-Event | Удаляет ожидающее событие из очереди событий |
New-Event | Эта команда вызывается в сценарии, чтобы позволить сценарию добавлять свои собственные события в очередь событий |
Шпаргалка по PowerShell: заключение
В итоге? Шпаргалка по PowerShell — это универсальный справочник по синтаксису и командам PowerShell. В этой шпаргалке по командам Windows PowerShell мы рассмотрели все основы, чтобы помочь даже новичкам сориентироваться в PowerShell.
Как и в любом другом языке программирования, вы можете использовать переменные и операторы, создавать псевдонимы и функции и даже поддерживать управление потоком.
Если вы готовитесь к предстоящему собеседованию, держите эту шпаргалку по PowerShell 5.0 под рукой для быстрого ознакомления с простыми примерами.
Хотите расширить свои знания о командной строке Windows?
Часто задаваемые вопросы
1. Как получить список команд PowerShell?
Вы можете использовать команду get-command.
2. Сколько существует команд PowerShell?
В PowerShell существует более 200 команд.
3. Как изучить PowerShell для начинающих?
Вы можете воспользоваться вводным руководством Microsoft по PowerShell. Оно содержит простой язык и простые примеры для лучшего понимания.
4. Является ли Windows PowerShell тем же самым, что и командная строка?
В следующей таблице приведены основные различия между PowerShell и командной строкой:
PowerShell | Командная строка |
Введен в 2006 году | Введен в 1981 году |
Работает как с пакетными командами, так и с командами PowerShell | Работает только с пакетными командами |
Позволяет создавать псевдонимы для команд или сценариев | Не поддерживает создание псевдонимов команд |
Позволяет передавать вывод команды другим командам. | не позволяет передавать вывод команды другим командам. |
Вывод осуществляется в виде объекта | Вывод — просто текст |
Можно выполнять последовательность команд в рамках сценария | Требуется, чтобы одна команда завершилась раньше другой |
Имеет библиотеки для программирования, так как построен на .net framework. | Отсутствие библиотек программирования |
Бесшовная интеграция с WMI | Требуется внешний плагин для взаимодействия с WMI |
Поддерживает системы Linux | Не поддерживает системы Linux |
Выполняет все типы программ | Запускает только программы консольного типа |
5. Как сделать командную строку по умолчанию вместо PowerShell?
Откройте Настройки > Персонализация > Панель задач. Теперь установите опцию «Заменить Command Prompt на Windows PowerShell» в меню, когда я нажимаю правой кнопкой мыши на кнопку «Пуск» или нажимаю клавиши Windows + X» в положение «Выкл».
Возможно вам так же будет интересно: