Практическое применение PowerShell

PowerShell — это не просто инструмент терминала; это одна из самых комплексных платформ автоматизации в среде Windows.

В этом разделе будут использоватьсятри основные категории практических сценариев применениячтобы продемонстрировать мощные возможности PowerShell в повседневном управлении, удалённых операциях и кросс-технологической интеграции:

  • Автоматизация задач повседневного управления
  • Удалённое управление
  • Интеграция с другими технологиями

1. Автоматизация задач повседневного управления

1.1 Пакетное переименование файлов

Требование:

Все файлы в каталоге.txtпереименовываются в формат единого префикса плюс порядковый номер, например:log_001.txt、log_002.txtи т. д.

Пример кода:

$files = Get-ChildItem -Path "D:\Logs" -Filter "*.txt"
$count = 1
foreach ($file in $files) {
    $newName = "log_{0:D3}.txt" -f $count
    Rename-Item -Path $file.FullName -NewName $newName
    $count++
}

Запланированная очистка временных файлов

Пример: удаление временных файлов старше 7 дней

$targetPath = "C:\Windows\Temp"
Get-ChildItem -Path $targetPath -Recurse |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
    Remove-Item -Force -Recurse

Рекомендуется сохранить скрипт как.ps1файл, а затем использовать Планировщик заданий для его периодического запуска.

Скрипт сбора сведений о системе

$info = [PSCustomObject]@{
    ComputerName = $env:COMPUTERNAME
    OSVersion    = (Get-CimInstance Win32_OperatingSystem).Caption
    Uptime       = ((Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime).ToString()
    CPU          = (Get-CimInstance Win32_Processor).Name
    RAM_GB       = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 2)
}
$info | Format-List

Анализ журналов и создание отчётов

$logPath = "C:\inetpub\logs\LogFiles\W3SVC1\*.log"
$lines = Get-Content $logPath | Where-Object { $_ -match "500" }

$lines.Count
$lines | Out-File "C:\Reports\error_500_report.txt"

2. Удалённое управление

Основы PowerShell Remoting

PowerShell Remoting — это механизм удалённого выполнения команд через WinRM.

Включите удаленную функциональность (запуск от имени администратора):

Enable-PSRemoting -Force

ИспользованиеInvoke-CommandВыполнение удаленных команд

Invoke-Command -ComputerName "Server01" -ScriptBlock {
    Get-Service -Name "W32Time"
}

Поддерживает пакетное выполнение на нескольких хостах:

$servers = @("Server01", "Server02")
Invoke-Command -ComputerName $servers -ScriptBlock {
    Get-Process | Where-Object { $_.CPU -gt 100 }
}

Управление удаленными сеансами

Создайте сеанс:

$session = New-PSSession -ComputerName "Server01"

Войдите в сеанс:

Enter-PSSession $session

Выполните команды:

Invoke-Command -Session $session -ScriptBlock { Get-Date }

Закройте сеанс:

Remove-PSSession $session

Вопросы безопасности

  • Используйте HTTPS вместо HTTP (настройте сертификаты)
  • Избегайте использования паролей в виде открытого текста; рекомендуется использовать объекты учетных данных:
$cred = Get-Credential
Invoke-Command -ComputerName "Server01" -Credential $cred -ScriptBlock { hostname }

3. Интеграция с другими технологиями

PowerShell и .NET Framework

PowerShell имеет встроенный доступ к библиотекам классов .NET и может вызывать почти все API .NET.

Пример: Получить значение MD5 файла

function Get-FileHashMD5 {
    param ([string]$path)
    $md5 = [System.Security.Cryptography.MD5]::Create()
    $bytes = [System.IO.File]::ReadAllBytes($path)
    $hash = $md5.ComputeHash($bytes)
    return ([BitConverter]::ToString($hash)).Replace("-", "")
}

Get-FileHashMD5 "D:\file.zip"

Вызов REST API

Пример: Вызов JSON API для получения информации о погоде

$response = Invoke-RestMethod -Uri "https://api.weatherapi.com/v1/current.json?key=APIKEY&q=Beijing"
$response.location.name
$response.current.temp_c

Основы подключения к базе данных (Пример: SQL Server)

$connectionString = "Server=localhost;Database=TestDB;Integrated Security=True"
$query = "SELECT TOP 10 * FROM Users"

$connection = New-Object System.Data.SqlClient.SqlConnection $connectionString
$command = $connection.CreateCommand()
$command.CommandText = $query

$connection.Open()
$reader = $command.ExecuteReader()
while ($reader.Read()) {
    Write-Output $reader["UserName"]
}
$connection.Close()

Взаимодействие с приложениями Office

Пример: Использование COM-объекта Excel для записи данных

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$workbook = $excel.Workbooks.Add()
$sheet = $workbook.Worksheets.Item(1)

$sheet.Cells.Item(1, 1) = "Name"
$sheet.Cells.Item(1, 2) = "Score"
$sheet.Cells.Item(2, 1) = "Alice"
$sheet.Cells.Item(2, 2) = 95

4. Итоги

Тип приложения Практическое применение Технические моменты
Локальная автоматизация Пакетное переименование, очистка файлов, системная информация Файловая система, таймеры, объекты
Анализ журналов Проверка журналов ошибок и создание отчётов Обработка текста, фильтрация, экспорт
Удалённые операции Пакетные операции на нескольких хостах, удалённые сеансы Invoke-Command, PSSession
Техническая интеграция Интеграция с REST API, базами данных и Excel Invoke-RestMethod, COM, ADO.NET
Поддержка .NET Вызов нижележащих API для реализации расширенной функциональности Использование библиотек классов .NET
Другие расширения