Руководство по PowerShell (.ps1)

Скопировано:

Нажмите на команду или скрипт, чтобы скопировать его.


Что такое .ps1 файл?

Файл с расширением .ps1 - это скрипт PowerShell, мощной оболочки Windows для автоматизации задач, администрирования системы и работы с объектами. В отличие от .bat, PowerShell работает с объектами, а не только с текстом - это делает его гибче и безопаснее.

Как создать и запустить .ps1

Перед запуском проверьте политику выполнения:

Get-ExecutionPolicy

Если стоит Restricted, разрешите выполнение локальных скриптов:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Базовые команды (cmdlets)

Работа с объектами (фильтрация, сортировка, выбор)

Форматирование вывода

Работа с сетью

Работа с JSON и файлами

# Чтение JSON
$config = Get-Content "config.json" | ConvertFrom-Json
echo $config.database.host

# Запись JSON
$data = @{ name = "Иван"; age = 30 } | ConvertTo-Json
$data | Set-Content "user.json"

Модули и расширяемость

Пример: Автоматизация резервного копирования с логированием

$source = "$env:USERPROFILE\Documents"
$dest = "D:\Backup\Docs_$(Get-Date -Format 'yyyyMMdd')"
$log = "$PSScriptRoot\backup.log"

Add-Content $log "[$(Get-Date)] Запуск резервного копирования..."

if (Test-Path $source) {
    Copy-Item $source $dest -Recurse -Force
    Add-Content $log "Успешно: $dest"
} else {
    Add-Content $log "ОШИБКА: Папка $source не найдена!"
}

Add-Content $log "[$(Get-Date)] Завершено."

Пример: Проверка обновлений Windows

# Требует модуль PSWindowsUpdate
Install-Module -Name PSWindowsUpdate -Force
Get-WindowsUpdate
Install-WindowsUpdate -AcceptAll -AutoReboot

Полезные переменные окружения

Советы по стилю и безопасности

Переменные

Условия (if / else)

if ($env:OS -eq "Windows_NT") {
    Write-Host "Это Windows"
} else {
    Write-Host "Неизвестная ОС"
}

Операторы сравнения:

Циклы

Цикл по числам:

for ($i = 1; $i -le 5; $i++) {
    Write-Host "Итерация $i"
}

Перебор файлов:

Get-ChildItem *.txt | ForEach-Object {
    Write-Host "Найден файл: $($_.Name)"
}

While-цикл:

$count = 0
while ($count -lt 3) {
    Write-Host "Счётчик: $count"
    $count++
}

Работа с файлами

Функции

function Say-Hello {
    param([string]$name = "Гость")
    Write-Host "Привет, $name!"
}

# Вызов функции
Say-Hello "Алексей"

Пример: Резервное копирование

# Создаёт резервную копию папки Documents
$source = "$env:USERPROFILE\Documents"
$dest = "D:\Backup\Docs_$(Get-Date -Format 'yyyyMMdd')"

if (Test-Path $source) {
    Copy-Item $source $dest -Recurse -Force
    Write-Host "Резервное копирование завершено."
} else {
    Write-Warning "Папка $source не найдена."
}

Пример: Мониторинг диска

$drive = Get-PSDrive C
if ($drive.Free / 1GB -lt 10) {
    Write-Host "⚠️ На диске C: меньше 10 ГБ свободного места!" -ForegroundColor Red
} else {
    Write-Host "✅ Диск в норме: $($drive.Free / 1GB:N2) ГБ свободно." -ForegroundColor Green
}

Работа с реестром

Безопасность и советы


Совет: PowerShell - это основа современного администрирования Windows. Изучите Get-Member и Select-Object - они помогут работать с объектами эффективнее.