Написание сценариев PowerShell
Введение
PowerShell — это мощный язык скриптов командной строки. Он не только позволяет выполнять команды в интерактивном режиме, но и объединять команды в файлы скриптов для выполнения сложных задач автоматизации.
В этой статье мы шаг за шагом познакомим вас с базовыми навыками разработки скриптов PowerShell, включая:
- Как создавать и запускать
.ps1scripts - Как определять и использовать функции
- Как выполнять модульную разработку и повторно использовать логику вашего скрипта
1. Начало работы со скриптами PowerShell
Создание файлов скриптов (.ps1)
Файлы скриптов PowerShell — это простые текстовые файлы с.ps1расширением, содержащие набор команд PowerShell для выполнения.
Пример: hello.ps1
# hello.ps1 Write-Output "Hello from PowerShell script!"
Вы можете использовать любой текстовый редактор (рекомендуется VS Code), чтобы создавать.ps1файлы.
Политика выполнения
Из соображений безопасности Windows по умолчаниюне разрешает выполнение сценариев, поэтому необходимо настроить политику выполнения.
Просмотр текущей политики:
Get-ExecutionPolicy
Временно разрешить выполнение локальных сценариев:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
RemoteSigned: локальные сценарии могут выполняться без подписи, но скачанные сценарии должны быть подписаны доверенным издателем.
Запуск сценариев
Запуск из командной строки:
.\hello.ps1
Укажите исполнитель PowerShell для запуска:
powershell.exe -File .\hello.ps1 pwsh.exe -File .\hello.ps1 # PowerShell 7+
Щёлкните правой кнопкой мыши "Run with PowerShell" (требуются настройки политики)
Передача и обработка параметров
Вы можете определить способы приёма внешних параметров в сценарии:
Пример: сценарий с параметрами greet.ps1
param (
[string]$name,
[int]$age
)
Write-Output "你好,$name,你的年龄是 $age 岁。"
Передача параметров при запуске:
.\greet.ps1 -name "小明" -age 18
Также поддерживаются значения по умолчанию и проверка параметров:
param (
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$City = "北京"
)
2. Использование функций
Определение и вызов функции
function Say-Hello {
Write-Output "Hello from function"
}
Say-Hello
Объявление и проверка параметров
Функции также могут иметь параметры, определяемые с помощьюparamблока:
function Add-Numbers {
param (
[int]$a,
[int]$b
)
return $a + $b
}
Add-Numbers -a 3 -b 5 # 输出 8
Также можно использовать позиционные параметры:
function Add {
param ($x, $y)
$x + $y
}
Add 10 20
Обработка возвращаемого значения
Функции PowerShell по умолчанию возвращают весь вывод (включаяWrite-Output)。
Рекомендуется использоватьreturnчтобы явно вернуть:
function Get-Square {
param ([int]$num)
return $num * $num
}
$result = Get-Square -num 6
Write-Output $result
Область видимости функции
Переменные, определённые внутри функции, по умолчанию являются локальными переменными:
function Demo-Scope {
$message = "Hello"
}
Demo-Scope
Write-Output $message # 无法访问
Чтобы получить доступ к переменным извне, можно использовать префиксы области видимости:
$global:x = 5
3. Модульная разработка
Что такое модуль PowerShell
Модуль — это совокупность нескольких функций, скриптов и ресурсов, используемая для организации кода и облегчения повторного использования.
Распространённые типы модулей:
- Модули скриптов (
.psm1) - Модули манифестов (
.psd1) - Двоичные модули (.dll)
Импорт и использование модулей
ИспользуйтеImport-Moduleчтобы импортировать модуль:
Import-Module MyModule.psm1
Просмотр загруженных модулей:
Get-Module
Вызов функций в модуле:
Say-Hello
Введение в PowerShell Gallery
PowerShell GalleryЭто официальный репозиторий модулей для PowerShell, где можно скачать и установить тысячи модулей.
Пример установки модуля:
Install-Module -Name PSReadLine
Обновление модуля:
Update-Module PSReadLine
Создание простого пользовательского модуля
Создайте новый файл MyModule.psm1 и добавьте функции:
# MyModule.psm1
function Greet-User {
param ([string]$name)
Write-Output "欢迎你,$name"
}
Импортируйте и вызовите его в скрипте:
Import-Module .\MyModule.psm1 Greet-User -name "小红"
Совет: Вы можете помещать файлы модулей в пути в
$env:PSModulePathтак что система автоматически распознает их.
4. Итоги
| Содержание | Описание |
|---|---|
.ps1Файл |
Расширение сценария PowerShell, хранящее команды |
param |
Используется для определения параметров скрипта/функции |
Set-ExecutionPolicy |
Управляет тем, разрешено ли запускать скрипты |
| Функция | Инкапсулирует повторно используемый код, улучшая структурную ясность |
Модуль (.psm1) |
Организует несколько функций, обеспечивая переносимость |
| Коллекция PowerShell | Официальный репозиторий модулей, где можно скачать сторонние модули |