Написание сценариев 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 Официальный репозиторий модулей, где можно скачать сторонние модули
Другие расширения