Перейти к основному содержимому

Простые приложения на PowerShell

Разработчику Архитектору

Простые приложения на PowerShell

PowerShell — оболочка и язык с объектным конвейером (не только текст). Удобен для администрирования Windows, Azure, Active Directory, а также кроссплатформенных задач в pwsh 7+.

Как запускать примеры из главы

  1. Сохраните код в имя.ps1.
  2. Windows: powershell -File имя.ps1 или .\имя.ps1 (при разрешённом ExecutionPolicy).
  3. Кроссплатформенно: pwsh имя.ps1 (PowerShell 7+).

Проверка: pwsh -Version или $PSVersionTable.


Резервное копирование

Как запустить

  • Файл: backup.ps1
  • Команда: pwsh -File backup.ps1 -Source .\notes.txt
  • Результат: OK: backups\...
param(
[Parameter(Mandatory)][string]$Source,
[string]$BackupDir = 'backups'
)

New-Item -ItemType Directory -Force -Path $BackupDir | Out-Null
$stamp = Get-Date -Format 'yyyyMMdd-HHmmss'
$name = Join-Path $BackupDir "$stamp\_$(Split-Path $Source -Leaf)"
Copy-Item -Path $Source -Destination $name
Write-Host "OK: $name"

Сортировка строк файла

Как запустить

  • Файл: sort.ps1
  • Подготовка: input.txt
  • Команда: pwsh -File sort.ps1
  • Результат: sorted.txt
$lines = Get-Content -Path 'input.txt' -Encoding UTF8 |
ForEach-Object { $_.Trim() } |
Where-Object { $_ }
$lines | Sort-Object | Set-Content -Path 'sorted.txt' -Encoding UTF8

Проверка URL (Invoke-WebRequest)

Как запустить

  • Файл: check_url.ps1
  • Команда: pwsh -File check_url.ps1
  • Результат: объект с полями Url, Status, Ok
function Test-Endpoint {
param([string]$Url)
try {
$r = Invoke-WebRequest -Uri $Url -Method Head -TimeoutSec 5
[pscustomobject]@{ Url = $Url; Status = $r.StatusCode; Ok = $true }
} catch {
[pscustomobject]@{ Url = $Url; Status = $null; Ok = $false; Error = $_.Exception.Message }
}
}

Test-Endpoint 'https://example.com'

JSON-трекер

Как запустить

  • Файл: tasks.ps1
  • Команда: pwsh -File tasks.ps1
  • Результат: tasks.json в текущем каталоге
$path = 'tasks.json'
$tasks = if (Test-Path $path) { Get-Content $path -Raw | ConvertFrom-Json } else { @() }
$tasks += [pscustomobject]@{ id = [guid]::NewGuid(); title = 'Изучить PowerShell'; done = $false }
$tasks | ConvertTo-Json -Depth 5 | Set-Content $path -Encoding UTF8

Список процессов

Как запустить

  • Файл: processes.ps1
  • Команда: pwsh -File processes.ps1
  • Результат: таблица процессов pwsh в консоли
Get-Process | Where-Object { $_.ProcessName -like 'pwsh*' } |
Select-Object ProcessName, Id, CPU |
Format-Table -AutoSize

Характерный пример — объектный конвейер

Как запустить

  • Файл: extensions.ps1
  • Команда: pwsh -File extensions.ps1 из каталога с файлами
  • Результат: топ-10 расширений по количеству файлов
Get-ChildItem -Recurse -File |
Group-Object Extension |
Sort-Object Count -Descending |
Select-Object -First 10 Name, Count

Каждый этап передаёт объекты, а не строки — отличие от классического bash-пайпа.


См. также: Bash · раздел автоматизации Windows

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).