Установка Invoke-WebRequest
Чтобы использовать Invoke-WebRequest, вам понадобится PowerShell. Итак, давайте узнаем, как установить PowerShell и получить доступ к командлету Invoke-WebRequest!
Windows
Во-первых, вы должны понять, что Windows PowerShell и PowerShell — это две разных программы. Windows PowerShell — это версия PowerShell, поставляемая вместе с Windows, и ее последняя версия — 5.1. Windows PowerShell содержит командлет Invoke-WebRequest. Это означает, что если вы используете современную версию Windows, вы готовы сразу же приступить к делу! При наличии более старых версий следуйте указаниям в официальном руководстве по установке PowerShell.
В то же время некоторые функции Invoke-WebRequest доступны только в версии PowerShell 7.x и более поздних версиях. Дополнительные сведения о том, как установить PowerShell 7.x, приводятся в официальном руководстве по миграции с Windows PowerShell 5.1 на PowerShell 7. Обратите внимание, что PowerShell 7.x устанавливается в новый каталог и работает параллельно с Windows PowerShell 5.1.
Вы можете узнать, какая версия PowerShell установлена на вашем компьютере под управлением ОС Windows, с помощью следующей команды:
$PSVersionTable
В PowerShell 7.x нужно ввести что-то вроде этого:
PSVersion 7.4.1
PSEdition Core
GitCommitId 7.4.1
OS Microsoft Windows 10.0.22631
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
macOS и Linux
Какое расширение имеют файлы скриптов PowerShell
PowerShell-скрипты имеют расширение *.ps1*, и для их выполнения часто требуется предварительная настройка политики выполнения скриптов (Execution Policy), чтобы разрешить запуск скрипта через PowerShell в системе.
Переменные
Для сохранения данных и обращения к ним в будущем в PowerShell используются переменные. Перед названием переменной ставится символ доллара $
, и переменные могут содержать латинские буквы (как заглавные, так и строчные), цифры и символ нижнего подчеркивания.
Переменные в могут хранить данные различных типов, и значения в них можно изменять (перезаписывать).

Создадим переменную со строкой 2023
и преобразуем её в число. Для того чтобы узнать тип данных, воспользуемся методом .GetType()
:
$stringValue = "2023" $intValue = [int]$stringValue $intValue.GetType()

Для удаления переменной используется метод .Clear()
.
Переменные можно вставлять в строки, если строки оформлены двойными кавычками. В случае одинарных кавычек, PowerShell воспринимает символы в строке буквально. Давайте сравним два примера:
$number = 42 Write-Host "The number is $number" # Вывод: The number is 42 Write-Host 'The number is $number' # Вывод: The number is $number
В первом случае, используя двойные кавычки, значение переменной $number
подставляется в строку. Во втором случае, с использованием одинарных кавычек, строка остается буквальной, и $number
не интерпретируется как переменная.
Кроме пользовательских переменных, существуют и системные переменные. Например, $PSVersionTable
содержит информацию о версии PowerShell.

Фоновое выполнение команд
Определенные задачи могут требовать значительного времени на выполнение. Примеры таких задач включают установку и обновление программного обеспечения или поиск файлов в обширной директории. Важно помнить, что во время выполнения одной команды в PowerShell нельзя вводить другие команды.
Рассмотрим пример: предположим, нужно найти файл powershell.exe
на всем диске C. Для этой цели воспользуемся командлетом Get-ChildItem
с параметром -Recurse
. Это позволит ему искать файл не только в текущем каталоге, но и во всех его подкаталогах.
Следует учитывать, что PowerShell может столкнуться с папками, к которым у него нет доступа. Чтобы обойти возможные ошибки, добавим параметр -ErrorAction SilentlyContinue
. Это означает, что в случае ошибки команда не будет генерировать уведомления, а просто продолжит выполнение.
Таким образом, данная ситуация выглядит следующим образом:
Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue

Очевидно, что во время выполнения задачи, командная строка становится недоступной. Для принудительного прерывания выполнения задачи можно воспользоваться сочетанием клавиш Ctrl + C. Важно убедиться, что при этом ничего не выделено, чтобы избежать возможного восприятия компьютером как команды «Копировать».
Start-Job {Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue}

Параллельно возможно выполнение любого числа фоновых задач. В дополнение к командлету Start-Job
, предназначенному для управления фоновыми задачами, существуют и другие командлеты:
Get-Job
предоставляет отчет о состоянии фоновых задач.Wait-Job
блокирует консоль до завершения фоновой задачи.Stop-Job
прекращает выполнение фоновой задачи.Receive-Job
выводит результаты выполнения фоновой задачи и очищает их из памяти. Для сохранения результатов в памяти используйте параметр-Keep
.
Опции Wait-Job
, Stop-Job
и Receive-Job
требуют указания имени Name
или идентификатора Id
конкретной задачи или задач (в случае нескольких). Это можно сделать непосредственно или в связке с командлетом Get-Job
.
Get-Job Job1

Полезные сценарии для Windows
1. Скрипт выключения Windows (или перезагрузки):
Простейшая операция выключения компьютера. Откройте блокнот и введите:
shutdown -s -t 0
Сохраните файл с расширением *.cmd* (например, *shutdown.cmd*). При запуске этого файла компьютер выключится. Замените «-s» на «-r» для перезагрузки. Параметр «-t» устанавливает таймер; в данном случае, он равен 0 секунд, но можно установить, например, на 60 для выключения через 60 секунд.
2. Удаление ненужных приложений:
С помощью следующего скрипта можно удалить предустановленные приложения:
Замените *APPNAME* на название ненужного приложения. Хотя удаление можно выполнить стандартным способом или через программы, этот скрипт делает процесс более удобным.
3. Управление процессами:
Воспользуйтесь PowerShell для борьбы с медленными процессами. Выведите все службы:
Или получите информацию о конкретной службе с кодовым именем *NAME*:
Создайте файл, который закрывает процессы с повышенным потреблением ресурсов:
Stop-Service -Name *ANTIVIRUS*
Stop-Service -Name *BROWSER*
Замените *ANTIVIRUS* и *BROWSER* на соответствующие названия.
4. Переименование группы файлов:
Решите проблему однотипных файлов с помощью скрипта группового переименования:
$path = «$comp\desktop\journey\russia»
$filter = ‘*.jpg’
Укажите путь, расширение и выполните замены в строке.
5. Поиск файлов:
Используйте PowerShell для поиска файлов в директории:
Для более сложного поиска в подпапках:
Get-ChildItem C:\Windows\* -Include *.log -Recurse -Force
6. Справка:
Пользуйтесь командой *Get-Help* для получения информации:
Для более подробной справки по конкретной команде:
Get-Help —Name *CMDLET*
7. Получение информации о системе:
Используйте PowerShell для получения данных о системе, например, уровне заряда аккумулятора:
Add-Type -AssemblyName System.Windows.Forms
Информация об архитектуре процессора удаленного компьютера:
Проверка прав администратора текущего пользователя:
Эти простые и полезные сценарии помогут вам эффективнее управлять вашей системой Windows.
Bat-скрипты Windows
Bat-скрипты, или файлы пакетных команд (Batch-файлы), представляют собой текстовые файлы, содержащие команды и инструкции для выполнения в командной строке Windows. Основаны на языке пакетных команд (Batch scripting language). Расширение файла: *.bat* (например, *myscript.bat*).
Пример простого bat-скрипта:
Как запустить скрипт через PowerShell с параметрами?
Запуск осуществляется аналогично запуску обычной программы или bat-файла с параметрами. Например, чтобы запустить скрипт с параметрами из командной строки, используйте следующую команду:
PowerShell -executionpolicy RemoteSigned -file <имя_скрипта> param1 param2 «еще один текстовый параметр«
В самом скрипте параметры могут быть получены так:
param ($var1, $var2, $var3)
В интегрированной среде PowerShell ISE скрипт с параметрами можно запустить аналогично, используя область команд.

Как использовать прокси HTTPS и SOCKS в PowerShell
Если вам требуется использовать прокси-сервер HTTPS или SOCKS, необходимо обновить PowerShell до версии 7.x и выше. В противном случае Invoke-WebRequest завершится ошибкой:
Invoke-WebRequest: ServicePointManager не поддерживает прокси-серверы со схемой https.
Или в случае прокси-сервера SOCKS:
Invoke-WebRequest: ServicePointManager не поддерживает прокси-серверы со схемой socks.
При работе с прокси-серверами HTTPS или SOCKS в PowerShell 7.x структура команд Invoke-WebRequest остается прежней:
Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>
Отличия заключаются в том, что
Если вы попытаетесь вызвать запрос через прокси-сервер, использующий протокол, отличный от указанного выше, вы получите следующую ошибку:
Invoke-WebRequest: Only the 'http', 'https', 'socks4', 'socks4a' and 'socks5' schemes are allowed for proxies.
Таким образом, полный пример прокси-запроса Invoke-WebRequest SOCKS выглядит так:
Invoke-WebRequest -Proxy "socks5://94.14.109.54:3567" "http://httpbin.org/ip"
As you can expect, the result will be:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "94.14.109.54"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 31
Content-Type: application/json
Date: Thu, 01 Feb 2024 12:47:56 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [Content-Length, 31]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 31
Логические операторы
В PowerShell вы также можете выполнять арифметические операции над объектами и строками, сравнивать их друг с другом, используя логические операторы.
+
— сложение;-
— вычитание;*
— умножение;/
— деление;%
— деление по модулю;(
и)
— скобки для группировки операций.
Операторы сравнения оформляются так же, как параметры командлетов, и их названия произошли от английских выражений, указанных в скобках:
-eq
— равно (от «equal»);-ne
— не равно (от «not equal»);-gt
— больше (от «greater than»);-ge
— больше либо равно (от «greater than or equal»);-lt
— меньше (от «less than»);-le
— меньше либо равно (от «less than or equal»).
Команды (командлеты) PowerShell
В языке программы PowerShell команды носят название командлеты (от английского «cmdlet»). Все они формируются с использованием шаблона «Глагол-Существительное», или «Действие-Объект». Например, Get-Services
и Start-Process
. Благодаря такой структуре, можно легко понять предназначение команды, даже если вы с ней ещё не работали ранее.
Синтаксис командлетов
После имени самого командлета следует указание параметров и их значений. Между всеми частями команды следует проставлять пробелы. Вот пример синтаксиса командлета, который позволяет перейти в директорию C:\
:
Set-Location -LiteralPath C:\ -PassThru
Разберем его на составные части:
Set-Location
— буквально «вызвать команду». Этот командлет позволяет выполнять указанный блок сценария.-LiteralPath C:\
— здесь передаем блок сценария, в котором используется командаSet-Location
для перехода в каталогC:\
.-PassThru
— по умолчанию командлетInvoke-Command
не возвращает результат выполнения. Этот параметр указывает на необходимость вывода информации о местоположении, в которое был выполнен переход с помощью командыSet-Location
.

Важно отметить, что регистр букв в командах PowerShell не имеет значения. Таким образом, данную команду можно записать в виде заглавных букв, строчных букв или даже смешанного регистра, и она все равно будет выполняться:
sEt-loCATion -PATH c:\ -passthru
Когда в одной строке объединены несколько команд, они разделяются точкой с запятой
.;
Иногда команда может быть слишком длинной. Для разделения на несколько строк можно использовать символ обратного апострофа `
в месте переноса. Новую строку можно создать, нажав Shift + Enter (для переноса строки ниже текущей) или Ctrl + Enter (для переноса строки выше текущей).
Разделим предыдущую команду:
Set-Location ` -LiteralPath C:\ ` -PassThru

Алиасы
В процессе работы с терминалом иногда может быть неудобно постоянно вводить полные названия командлетов. Именно поэтому у наиболее часто используемых командлетов существуют псевдонимы (алиасы) — их сокращенные варианты.
Чтобы получить список доступных алиасов, вы можете воспользоваться командой Get-Alias
. Кроме того, данной команде также доступен псевдоним gal
.

Чтобы получить список алиасов для конкретного командлета, вы можете использовать параметр -Definition
. Пример:
Get-Alias -Definition Set-Location

Если вам нужно узнать полное название командлета по его алиасу, используйте параметр -Name
. Этот параметр необязателен, так как он является аргументом по умолчанию.
# Оба следующих варианта эквивалентны: Get-Alias -Name clear Get-Alias clear

Особенности обработки путей к каталогам
Для многих командлетов необходимо предоставить путь к файлу или каталогу. Это делается с использованием строки, например: C:\Windows\System32
.
Однако, если в пути встречается пробел или другой специальный символ, PowerShell будет рассматривать его как разделитель. Например:
# Следующая команда не будет выполнена корректно Set-Location C:\Program Files

PowerShell «воспринимает» пробел и интерпретирует его так, будто путь к папке закончился на слове Program
, а files
— это уже значение другого параметра.
Чтобы избежать подобных ситуаций, существует два метода:
- Экранировать символы с помощью обратного апострофа
`
:C:\Program` Files
. Однако это может быть неудобным, если путь длинный. - Поместить весь путь в одинарные или двойные кавычки:
'C:\Program Files'
или"C:\Program Files"
(желательнее использовать одинарные кавычки).
Кроме того, в PowerShell существуют сокращения для быстрого доступа к ближайшим директориям:
- Точка
.
указывает на текущий каталог. Например,Get-ChildItem .
позволяет просмотреть содержимое текущего местоположения. - Две точки
..
указывают на родительский каталог. Например,Set-Location ..
позволяет перейти к родительскому каталогу. Это может быть полезно, если вы находитесь в глубоко вложенной директории.
Большинство командлетов имеют параметры -Path
и -LiteralPath
, позволяющие указать путь к файлу или папке. Разница между ними заключается в том, что в -Path
можно включать переменные, в то время как —LiteralPath
интерпретирует символы буквально, даже если они содержат имя переменной.
Get-Help: как изучать новые командлеты
Для получения подробной информации о конкретном командлете воспользуйтесь командой Get-Help Название-Командлета
. Пример:
Get-Help Get-Childitem

У команды Get-Help
имеется несколько полезных параметров:
-Detailed
предоставляет более подробную справку по командлету.-Full
предоставляет полную справку.-Examples
демонстрирует примеры использования командлета.-Online
перенаправляет пользователя на веб-страницу с соответствующей документацией.
Выполняемые скрипты Windows
Это скрипты, которые могут быть выполнены в среде операционной системы Windows и обычно предназначены для автоматизации различных задач. Включают в себя bat-скрипты (командные файлы), PowerShell-скрипты, а также другие типы скриптов, которые можно выполнять в Windows. Общее отличие между bat-скриптами и PowerShell-скриптами заключается в языке программирования, используемом для написания команд и инструкций. Bat-скрипты используют язык пакетных команд, который является устаревшим и имеет ограниченные возможности по сравнению с PowerShell, который представляет более современный и мощный язык с разнообразными функциональными возможностями для автоматизации задач в Windows.
Циклы
В PowerShell существует несколько видов циклов:
- Цикл с предусловием
while
:
$counter = 0 while ($counter -lt 5) { Write-Host "Counter is $($counter)" $counter++ }
- Цикл с постусловием истинным
do while
:
$counter = 0 do { Write-Host "Counter is $($counter)" $counter++ } while ($counter -lt 5)
- Цикл с постусловием ложным
do until
:
$counter = 0 do { Write-Host "Counter is $($counter)" $counter++ } until ($counter -ge 5)
- Цикл с известным числом итераций
for
:
for ($i = 0; $i -lt 5; $i++) { Write-Host "Iteration is $i" }
- Цикл с перебором элементов коллекции
foreach
:
$numbers = 1..5 foreach ($num in $numbers) { Write-Host "Number is $num" }
Во всех случаях синтаксис похож на синтаксис условных операторов: в круглых скобках указывается условие или параметры, а в фигурных скобках — код, который выполняется внутри цикла.
Работа с файлами
PowerShell предоставляет удобные средства для работы с файлами. Вот некоторые ключевые методы:
Для создания файла используйте командлет New-Item
с указанием пути к файлу:
New-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -ItemType File
Чтобы записать данные в файл, используйте Out-File
или Set-Content
:
"Содержимое файла" | Out-File -FilePath "C:\путь\к\файлу\новыйфайл.txt" Set-Content -Path "C:\путь\к\файлу\новыйфайл.txt" -Value "Новое содержимое файла"
Для чтения содержимого файла в массив используйте Get-Content
:
$содержимое = Get-Content -Path "C:\путь\к\файлу\новыйфайл.txt"
Для получения информации о файле (размер, дата создания и др.) используйте Get-Item
:
$информацияОФайле = Get-Item -Path "C:\путь\к\файлу\новыйфайл.txt"
Для копирования файла в другое место используйте Copy-Item
:
Copy-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -Destination "C:\путь\к\копия\новыйфайл.txt"
Для удаления файла воспользуйтесь командлетом Remove-Item
:
Remove-Item -Path "C:\путь\к\файлу\новыйфайл.txt" -Force
Помните, что операции удаления файлов необратимы, поэтому будьте осторожны при их использовании.
Какой прокси-сервер PowerShell следует использовать?
Ответ на этот вопрос меняется в зависимости от того, чего вы хотите достичь с помощью запроса Invoke-WebRequest. Чтобы найти подходящий прокси-сервер PowerShell для ваших нужд, ознакомьтесь с различными типами доступных прокси-серверов:
- Прокси-серверы центров обработки данных: они быстрые и дешевые, но сайты могут легко обнаружить и заблокировать их из-за их идентифицируемых диапазонов IP-адресов.
- Резидентные прокси-серверы: они предлагают ротацию подлинных IP-адресов с реальных устройств в определенных местах. Это означает, что они могут гарантировать высокий уровень анонимности. Резидентные прокси-серверы идеально подходят для доступа к сайтам, использующим географические ограничения, или для обхода мер по борьбе с ботами.
- Прокси-серверы интернет-провайдеров (ISP): они безопасны, быстры и очень надежны, поскольку предоставляют статические IP-адреса устройств, зарегистрированных у интернет-провайдеров. Прокси-серверы ISP также называют резидентными статическими прокси-серверами, и они являются идеальным решением для мониторинга оптимизации поисковых систем (SEO) и исследования рынка.
- Мобильные прокси-серверы: они предоставляют IP-адреса с реальных мобильных устройств для обеспечения высокого уровня анонимности. Они полезны для доступа к приложениям, сайтам или контенту, специально разработанному для мобильных устройств.
Работа со строками в PowerShell
PowerShell — мощный инструмент для автоматизации задач на платформе Windows. Работа со строками играет важную роль при обработке текстовых данных. Вот некоторые ключевые аспекты:
- Объединение строк: Чтобы объединить строки, используйте оператор
+
или метод.Concat()
. Пример:
$firstString = "Привет, " $secondString = "мир!" $combinedString = $firstString + $secondString
- Форматирование строк: Используйте оператор
-f
или метод.Format()
для вставки значений в строку. Пример:
$name = "Alice" $age = 30 $formattedString = "Привет, меня зовут {0} и мне {1} лет." -f $name, $age
- Интерполяция строк: С помощью символа
$
и фигурных скобок{}
можно вставлять значения переменных в строки. Пример:
$city = "Москва" $interpolatedString = "Я живу в городе $($city)."
- Разделение строк: Метод
.Split()
используется для разделения строки на подстроки. Пример:
$text = "яблоко,груша,банан" $fruits = $text.Split(",")
- Замена подстрок: С помощью метода
.Replace()
можно заменить подстроку в строке. Пример:
$text = "Привет, мир!" $modifiedText = $text.Replace("мир", "вселенная")
- Обрезка строк: Методы
.Trim()
,.TrimStart()
и.TrimEnd()
удаляют пробелы и другие символы в начале и конце строки.
Примеры использования методов для обрезки строк в PowerShell:
# Обрезка пробелов в начале и конце строки $rawString = " Пример строки с пробелами " $trimmedString = $rawString.Trim() Write-Host "Исходная строка: '$rawString'" Write-Host "Обрезанная строка: '$trimmedString'" # Обрезка только в начале строки $leftTrimmedString = $rawString.TrimStart() Write-Host "Строка после обрезки в начале: '$leftTrimmedString'" # Обрезка только в конце строки $rightTrimmedString = $rawString.TrimEnd() Write-Host "Строка после обрезки в конце: '$rightTrimmedString'"
При выполнении этого кода в консоли PowerShell вы увидите следующий вывод:
Исходная строка: ' Пример строки с пробелами '
Обрезанная строка: 'Пример строки с пробелами'
Строка после обрезки в начале: 'Пример строки с пробелами '
Строка после обрезки в конце: ' Пример строки с пробелами'
В данном примере видно, как методы .Trim()
, .TrimStart()
и .TrimEnd()
удаляют пробелы в начале и конце строки, соответственно.
Массивы, хеш-таблицы, функции и классы
В PowerShell есть множество возможностей для создания сложных структур данных и алгоритмов. Вот краткое описание некоторых из них:
- Массивы (Arrays): позволяют хранить набор элементов одного типа. Элементы могут быть доступны по индексам. Создаются массивы с использованием квадратных скобок
[ ]
.
$fruits = "Apple", "Banana", "Orange" $fruits[0] # Доступ к элементу массива по индексу
- Хеш-таблицы (Hash Tables): представляют собой пары ключ-значение, где ключи уникальны. Они полезны для хранения и быстрого доступа к данным по ключу.
$person = @{ Name = "John" Age = 30 City = "New York" } $person["Name"] # Доступ к значению по ключу
- Пользовательские функции: Вы можете определить собственные функции для группировки кода и повторного использования. Их определение происходит с использованием ключевого слова
function
.
function Get-Sum { param($a, $b) return $a + $b } $result = Get-Sum 5 3
- Пользовательские классы: PowerShell также поддерживает создание пользовательских классов, что позволяет создавать более сложные объекты с различными свойствами и методами.
class Person { [string] $Name [int] $Age Person([string] $name, [int] $age) { $this.Name = $name $this.Age = $age } [string] GetInfo() { return "$($this.Name), $($this.Age) years old" } } $person = [Person]::new("Alice", 25) $info = $person.GetInfo()
Как сделать и запустить скрипт PowerShell
Создать скрипт PowerShell довольно просто. Вот шаги, которые вы можете выполнить, чтобы создать свой первый скрипт:
1. Откройте редактор PowerShell ISE:
PowerShell ISE (Integrated Scripting Environment) предоставляет удобную среду для написания и отладки скриптов. Вы можете его найти в меню «Пуск» (Start) под разделом «Стандартные» (Standard) или выполнить команду `PowerShell_ise` в командной строке.
2. Напишите свой скрипт:
В окне редактора PowerShell ISE напишите свой скрипт. Ниже приведен пример простого скрипта, который выводит «Hello, World!» в консоль:
Write-Host «Hello, World!»
3. Сохраните скрипт:
- Нажмите `Ctrl + S` или выберите «Файл» (File) -> «Сохранить» (Save).
- Укажите имя файла и добавьте расширение `.ps1` (например, `MyScript.ps1`).
4. Запустите скрипт:
- Выберите весь текст скрипта.
- Нажмите `F5` или выберите «Запустить сценарий» (Run Script) в PowerShell ISE.
Примеры более сложных скриптов:
#Скрипт, создающий новую папку:
$folderPath = «C:\Path\To\NewFolder»
New-Item -ItemType Directory -Path $folderPath
#Скрипт, удаляющий все файлы старше 7 дней в папке:
$folderPath = «C:\Path\To\Folder»
$limitDate = (Get-Date).AddDays(-7)
#Скрипт, проверяющий статус службы:
Write-Host «The status of service $serviceName is: $($serviceStatus.Status)»
Ваши скрипты могут включать более сложные команды, использовать условия, циклы и вызывать функции. Как только вы освоите основы, вы сможете создавать более мощные и гибкие скрипты PowerShell.

Скрипты для Windows — не просто строки кода, а волшебные ключи, открывающие дверь в мир автоматизации. В руках умелого пользователя они становятся инструментом, способным не только сэкономить время, но и превратить рутинные задачи в захватывающее путешествие по потокам байтов и командам.
Как открыть PowerShell в Windows
Как правило, PowerShell уже установлен на вашем компьютере по умолчанию. Однако, если по какой-то причине его нет, вы можете воспользоваться инструкциями, предоставленными Microsoft. В дополнение, в официальной документации имеются подробные руководства по установке на macOS и Linux.
PowerShell является независимым от версии операционной системы инструментом и работает одинаково стабильно как на Windows 10, так и на Windows Server.
Существует два основных метода для запуска PowerShell или PowerShell ISE в системе Windows: через меню «Пуск» и с помощью приложения «Выполнить».
- Для того чтобы открыть PowerShell через меню «Пуск», пройдите к папке Windows PowerShell, откройте её и выберите необходимое приложение. В этой директории доступны как 32-разрядные версии (отмечены как x86 в скобках), так и 64-разрядные версии терминала и ISE.

- Чтобы запустить PowerShell через приложение «Выполнить», используйте комбинацию клавиш Win + R. Когда появится окно, введите
powershell
илиpowershell ise
(в зависимости от того, какое приложение вам нужно) и нажмите кнопку ОК.

Как запустить скрипт PowerShell в фоновом режиме?
Для этого используйте параметр -WindowStyle, который может принимать значения: Normal, Minimized, Maximized и Hidden. Чтобы запустить неподписанный скрипт в фоновом режиме, выполните команду:
PowerShell -executionpolicy RemoteSigned -WindowStyle Hidden -file <имя_скрипта>
Также при желании вы можете добавить -NonInteractive, чтобы скрипт не задавал никаких вопросов. Таким образом, скрипт выполнится незаметно для пользователя. Однако будьте внимательны, используя этот способ.

Как указать прокси-сервер HTTP в Invoke-WebRequest
Прежде чем начать, запустите следующую команду в PowerShell:
Invoke-WebRequest "https://httpbin.org/ip"
That should print something like:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "194.34.233.12"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 32
Content-Type: application/json
Date: Thu, 01 Feb 2024 10:46:14 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [Content-Length, 32]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 32
Если вы хотите получить доступ только к полю «Контент», вы можете сделать это следующим образом:
$response = Invoke-WebRequest "https://httpbin.org/ip"
$response.Content
This would print:
{
"origin": "194.34.233.12"
}
Использование параметра командной строки
Invoke-WebRequest предлагает флаг -Proxy для указания URL-адреса прокси-сервера для запроса.
Итак, синтаксис использования Invoke-WebRequest на прокси-сервере выглядит следующим образом:
Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>
Если теперь вы выполните эту команду PowerShell:
Invoke-WebRequest -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"
Invoke-WebRequest -Uri "http://httpbin.org/ip" -Proxy "http://brd.superproxy.io:22225" -ProxyCredential (New-Object System.Management.Automation.PSCredential("brd-customer-CUSTOMER_ID-zone-ZONE’S_NAME", ("ZONE’S_PASSWORD" | ConvertTo-SecureString -AsPlainText -Force)))
The result should be:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "190.6.23.219"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 31
Content-Type: application/json
Date: Thu, 01 Feb 2024 12:36:56 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [Content-Length, 31]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 31
Примечание: не забывайте, что бесплатные прокси-серверы недолговечны! К тому времени, когда вы прочитаете это руководство, маловероятно, что вышеуказанный сервер все еще будет работать. В случае ошибки замените его новым прокси-сервером.
Использование переменных окружения
Начиная с версии PowerShell 7.0, Invoke-WebRequest поддерживает конфигурацию прокси-сервера с помощью переменных окружения.
Таким образом, другой способ использования прокси-сервера PowerShell в Invoke-WebRequest заключается в установке следующих двух окружений:
- HTTP_PROXY — это URL-адрес прокси-сервера, используемый для HTTP-запросов;
- HTTPS_PROXY — это URL-адрес прокси-сервера, используемый для HTTPS-запросов.
В Windows можно задать две переменные окружения, используя следующий синтаксис PowerShell:
$env:HTTP_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
$env:HTTPS_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
В нашем примере команды будут выглядеть следующим образом:
$env:HTTP_PROXY = "http://190.6.23.219:999"
$env:HTTPS_PROXY = "http://190.6.23.219:999"
В macOS и Linux вам необходимо использовать следующий синтаксис:
export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
Итак, две команды будут следующими:
export http_proxy="http://190.6.23.219:999"
export https_proxy="http://190.6.23.219:999"
Отныне каждый запрос Invoke-WebRequest будет проходить через указанные прокси-серверы без необходимости добавлять опцию -Proxy. После настройки envs запустите следующую команду:
Invoke-WebRequest "https://httpbin.org/ip"
You will get the same result as before:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "190.6.23.219"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 31
Content-Type: application/json
Date: Thu, 01 Feb 2024 12:36:56 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [Content-Length, 31]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 31
Чтобы отключить прокси-серверы Invoke-WebRequest, отключите переменные окружения с помощью:
$env:HTTP_PROXY = ""
$env:HTTPS_PROXY = ""
Or on macOS and Linux:
unset HTTP_PROXY
unset HTTPS_PROXY
Как разрешить выполнение неподписанного скрипта PowerShell?
- В оболочке PowerShell перед запуском скрипта выполните следующую команду для разрешения выполнения неподписанных скриптов в текущем сеансе оболочки:
Set-ExecutionPolicy RemoteSigned -Scope Process
- При запуске из стандартного командного интерфейса используйте параметр -executionpolicy, например:
PowerShell -executionpolicy RemoteSigned -file <имя_скрипта>
Оба способа устанавливают политику только для текущего сеанса, при этом политика безопасности выполнения скриптов PowerShell, установленная в реестре, остается неизменной. Если вы хотите изменить политику безопасности выполнения скриптов «навсегда», используйте следующий способ:
- Разрешить выполнение навсегда: запустите оболочку PowerShell от имени «Администратора» и выполните команду:
Однако рекомендуется избегать этого способа, чтобы не подвергать ваш компьютер возможным угрозам, поскольку это разрешает выполнение всех скриптов всегда.
Примечание: Если скрипт был загружен из интернета, чтобы избежать запроса на подтверждение выполнения, используйте параметр Bypass вместо RemoteSigned — это полное отключение любых запросов и предупреждений.

Скрипты PowerShell для администратора
PowerShell — мощный инструмент для сисадминов Windows, предоставляя широкий набор команд и сценариев для автоматизации и управления системой. Ниже приведены несколько примеров PowerShell-скриптов, которые могут быть полезны администраторам:
1. Создание резервной копии файлов:
$sourcePath = «C:\Path\To\Source»
$destinationPath = «D:\Backup»
$timestamp = Get-Date -Format «yyyyMMddHHmmss»
$backupFolder = «$destinationPath\Backup_$timestamp»
Copy-Item -Path $sourcePath -Destination $backupFolder -Recurse
2. Мониторинг дискового пространства:
$threshold = 80
$diskLetter = $disk.DeviceID
Write-Host «Warning: Disk $diskLetter is running low on free space ($freeSpacePercentage%)»
# Можно добавить уведомление администратора
3. Создание нового пользователя:
$password = ConvertTo-SecureString «SecurePassword123» -AsPlainText -Force
4. Мониторинг событий в журнале событий:
$logName = «System»
$events = Get-WinEvent -LogName $logName -MaxEvents 10
Write-Host «Event ID $($event.Id): $($event.Message)»
5. Обновление всех установленных модулей PowerShell:
Update-Module -Name $_.Name -Force
6. Удаление временных файлов в системной директории:
Remove-Item «$tempPath\*» -Force
7. Создание отчета о состоянии служб:
8. Настройка правил брандмауэра:
New-NetFirewallRule -DisplayName «Allow-SSH» -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow
9. Удаление неиспользуемых профилей пользователей:
$inactiveDays = 90
$lastUseDate = $profile.LastUseTime
$difference = (Get-Date) — $lastUseDate
Remove-WmiObject -InputObject $profile -Confirm:$false
Эти примеры предоставляют общее представление о том, как PowerShell может использоваться администраторами для автоматизации различных задач в Windows-среде. Помните, что некоторые команды могут потребовать выполнения от имени администратора.
Для вызова скриптов PowerShell, вы можете использовать команду `Invoke-Expression` или просто указать путь к файлу скрипта. Предположим, у вас есть следующие скрипты: `ClearDisk.ps1`, `InstallPrograms.ps1`, `BackupScript.ps1`, и `UpdateSystem.ps1`.
1. Скрипт очистки диска (ClearDisk.ps1):
# Ваш код для очистки диска
# Пример: удаление временных файлов
Remove-Item -Path «$env:TEMP\*» -Recurse -Force
# Используйте Invoke-Expression
Invoke-Expression -Command «.\ClearDisk.ps1»
# Или просто указывайте путь к файлу скрипта
2. Скрипт автоматической установки программ (InstallPrograms.ps1):
# Ваш код для автоматической установки программ
# Пример: установка программы Chocolatey и установка пакетов
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))
choco install packageName -y
# Используйте Invoke-Expression
Invoke-Expression -Command «.\InstallPrograms.ps1»
# Или просто указывайте путь к файлу скрипта
3. Скрипт резервного копирования (BackupScript.ps1):
# Ваш код для создания резервной копии
# Пример: копирование файлов в другую директорию
$sourcePath = «C:\Path\To\Source»
$destinationPath = «D:\Backup»
Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse
# Используйте Invoke-Expression
Invoke-Expression -Command «.\BackupScript.ps1»
# Или просто указывайте путь к файлу скрипта
4. Скрипт автоматического обновления системы (UpdateSystem.ps1):
# Ваш код для автоматического обновления системы
# Пример: обновление всех установленных модулей PowerShell
Update-Module -Name $_.Name -Force
# Используйте Invoke-Expression
Invoke-Expression -Command «.\UpdateSystem.ps1»
# Или просто указывайте путь к файлу скрипта
Убедитесь, что вы находитесь в той же директории, что и ваши скрипты, или укажите полный путь к файлу скрипта.
В этой статье мы коснулись всех аспектов создания, запуска и использования скриптов в Windows. Надеемся, что эти советы и примеры помогут вам освоить этот увлекательный мир автоматизации и сделают вашу работу более эффективной и приятной.
Для чего нужен PowerShell
PowerShell — это мощный инструмент для автоматизации задач, управления операционной системой и взаимодействия с различными приложениями и сервисами. Он широко используется администраторами систем, разработчиками, а также специалистами в области IT для решения разнообразных задач. Вот некоторые из основных применений PowerShell:
- Автоматизация задач: PowerShell позволяет создавать сценарии (скрипты) для автоматизации повторяющихся и рутинных задач, таких как установка программ, настройка системных параметров, копирование файлов и многие другие операции.
- Управление системой: PowerShell предоставляет доступ к широкому спектру системных функций, позволяя администраторам управлять пользователями, группами, службами, процессами, реестром и другими системными ресурсами.
- Конфигурация и развертывание: С помощью PowerShell можно создавать и применять конфигурации для развертывания и управления серверами и компьютерами, что делает процесс управления парком устройств более эффективным.
- Мониторинг и анализ: PowerShell позволяет анализировать системные данные, собирать статистику, мониторить производительность и события, что помогает администраторам быстро реагировать на проблемы.
- Взаимодействие с внешними приложениями и службами: PowerShell может взаимодействовать с другими приложениями и службами, используя API, веб-службы, REST API и другие протоколы, что позволяет автоматизировать процессы, связанные с сторонними приложениями.
- Разработка и тестирование: Разработчики используют PowerShell для создания сценариев тестирования, сборки проектов, управления версиями и других задач, связанных с разработкой ПО.
- Обработка данных: PowerShell предоставляет мощные инструменты для обработки и анализа данных, таких как текстовые файлы, CSV, XML и другие форматы данных.
- Безопасность: PowerShell может использоваться для управления политиками безопасности, мониторинга событий безопасности, а также для проведения аудитов безопасности системы.
Работа в PowerShell ISE
Командная оболочка PowerShell представляет собой удобный инструмент для выполнения малых, кратких однострочных задач. Однако для создания и сохранения более сложных сценариев существует интегрированная среда разработки скриптов PowerShell ISE.
PowerShell ISE представляет собой инструмент, состоящий из трех основных панелей:
- Область скриптов в верхней части экрана, предназначенная для написания сценариев.
- Консольная область в нижней части экрана, которая функционирует как обычный терминал, позволяя вводить команды в интерактивном режиме.
- Панель команд в правой части экрана, предоставляющая полное руководство по командам PowerShell. В ней также есть конструктор, который помогает задать значения нужных параметров.
Комментарии в коде
Вот пример PowerShell скрипта с комментариями:
# Это комментарий в одну строку, начинается с символа '#' и продолжается до конца строки. # Пример переменной $имя = "John" $возраст = 30 # Вывод информации Write-Host "Привет, $имя! Тебе $возраст лет." # Это многострочный комментарий, который начинается с '<#' и заканчивается '#>'. <# Этот блок комментария может быть многострочным и располагаться на нескольких строках, чтобы объяснить более сложные участки кода. #> # Функция для сложения двух чисел function Сложить-Числа { param( [int]$число1, [int]$число2 ) $результат = $число1 + $число2 return $результат } # Вызов функции и вывод результата $результатСложения = Сложить-Числа -число1 5 -число2 7 Write-Host "Результат сложения: $результатСложения"
Хорошая практика — комментировать код таким образом, чтобы другие разработчики (или вы в будущем) могли легко понять, как работает код и какие цели преследовались при его написании.
Советы по написанию хорошего кода:
- Применяйте нотацию PascalCase для названий командлетов, функций, параметров, свойств, методов, переменных и классов. Разработчики Powershell выпустили для этого гайд. Не рекомендуется:
get-service
,Get-service
,GET-SERVICE
. Рекомендуется:Get-Service
. - Используйте полные названия командлетов. Алиасы удобны для интерактивного режима, но в скриптах они могут затруднить понимание. Не рекомендуется:
dir
,gci
,ls
. Рекомендуется:Get-ChildItem
. - Применяйте стиль One True Brace для форматирования вложенных блоков кода. Если вы используете фигурные скобки, внутренний код отделяется табуляцией (четыре пробела), а фигурные скобки размещаются следующим образом:
if ($var1 -eq $var2) { # Код внутри условия } else { # Код внутри else # Еще код внутри else }
Исключение: когда код внутри фигурных скобок небольшой, его можно записать в одну строку:
Get-ChildItem | Where-Object { $_.Length -gt 10mb }
Запуск скриптов
В PowerShell ISE имеется возможность выполнять код как целиком, так и частично, а также предоставляются инструменты для отладки. Скрипты сохраняются в файлах с расширением .ps1
. Однако запустить скрипт, просто дважды щелкнув по нему, не получится. Вместо этого вы можете нажать правую кнопку мыши и выбрать опцию Выполнить с помощью PowerShell
.
Также существует возможность запуска скрипта из оболочки. Например, предположим, у вас есть файл скрипта test_script.ps1 в каталоге C:\Scripts
. Вы можете выполнить его двумя способами:
- Используя команду
PowerShell -File C:\Scripts\test_script.ps1
из любого места. Это позволяет запустить скрипт, указав полный путь к файлу. - Используя команду
.\test_script.ps1
, если вы находитесь в каталогеC:\Scripts
. Это запустит скрипт, находясь в том же каталоге, что и файл скрипта.
Такие методы позволяют управлять выполнением PowerShell скриптов из разных мест и с разных уровней оболочки.
Политика выполнения. Как разрешить выполнения скриптов
По умолчанию запрещено выполнение файлов с PowerShell-скриптами, и это сделано с целью обеспечения безопасности. Вы можете узнать текущую политику выполнения с помощью командлета Get-ExecutionPolicy
. Вот какие варианты политики выполнения могут быть доступны:
- Restricted (Установлена по умолчанию) — запрещено выполнение любых скриптов. Это означает, что нельзя будет запустить ни один скрипт.
- AllSigned — разрешено выполнение только тех скриптов, которые были подписаны доверенным разработчиком. Это обеспечивает повышенный уровень безопасности, так как только подписанные и проверенные скрипты могут быть выполнены.
- RemoteSigned — разрешено выполнение подписанных доверенным разработчиком скриптов, а также собственных скриптов. Это предоставляет баланс между безопасностью и удобством, позволяя запускать свои скрипты.
- Unrestricted — разрешено выполнение любых скриптов без каких-либо ограничений. Это предоставляет наивысший уровень гибкости, но может повысить риск безопасности.
Чтобы ваши файлы с расширением .ps1 запускались, вам следует изменить политику выполнения на RemoteSigned. Для этого выполните следующие шаги:
- Откройте PowerShell от имени администратора. Для этого щелкните правой кнопкой мыши по значку PowerShell на панели задач или в меню «Пуск» и выберите «Запуск от имени администратора».
- В открывшемся окне PowerShell введите следующую команду и нажмите Enter:
Set-ExecutionPolicy RemoteSigned
- Подтвердите изменение политики выполнения, нажав клавишу
Y
(Yes).
Теперь вы сможете запускать свои файлы .ps1 без ограничений. Однако, имейте в виду, что изменение политики выполнения может повлиять на безопасность системы, поэтому будьте осторожны и убедитесь, что вы запускаете только те скрипты, которые вы знаете и доверяете.
Выполнение скриптов в PowerShell
PowerShell представляет собой новую командную оболочку для операционной системы Windows, созданную Microsoft с целью полного замещения и улучшения cmd. Эта оболочка уже включена в состав операционных систем Windows 7 и выше. Если у вас старая версия операционной системы или вы хотите загрузить более новую версию PowerShell. Windows — операционная система, пользующаяся огромной популярностью среди миллионов пользователей по всему миру. В ее арсенале множество функций и возможностей, однако некоторые из них остаются недостаточно известными обычным пользователям. В данной статье мы расскажем о нескольких полезных сценариях, способных сделать вашу работу с Windows более эффективной и удобной.
Политика исполнения PowerShell-скриптов представляет собой механизм безопасности, управляющий условиями загрузки конфигурационных файлов и запуска сценариев в данной среде. Её основное предназначение — предотвращение выполнения потенциально вредоносных сценариев.

Командные скрипты Windows
Это общий термин, который включает в себя различные типы скриптов и командных файлов, используемых в операционной системе Windows для автоматизации задач. Включают в себя как скрипты на языке командной строки (например, скрипты CMD), так и на более современных языках, таких как PowerShell. Например, Bat-скрипты (*.bat), PowerShell-скрипты (*.ps1), а также другие сценарии, созданные для автоматизации определенных задач.
Как запустить скрипт PowerShell с помощью ярлыка?
Это можно сделать двумя способами:
- Создать файл bat/cmd, в котором прописать команду для запуска скрипта (с параметрами, как описано выше).
- Создать ярлык на PowerShell, который находится в папке c:\Windows\System32\WindowsPowerShell\v<версия>\. В свойствах ярлыка в поле «Объект» добавьте необходимые параметры.
Таким образом, например, чтобы запустить скрипт PowerShell при входе пользователя, просто создайте ярлык, как описано во втором пункте, и поместите его в автозагрузку. Также создание ярлыка с использованием одного из вышеописанных методов позволяет легко запускать скрипт от имени администратора или от имени любого другого пользователя, как обычную программу.
Скриптовый язык PowerShell — мощный инструмент для решения различных задач. Однако следует использовать его с осторожностью, поскольку он может быть использован не только для полезных, но и для вредоносных целей. Будьте внимательны при работе с ним.
