Windows и PowerShell

8.1 Пакетные файлы (.bat)

Пакетные файлы (.bat) — это простой способ автоматизации задач в Windows через командную строку.

Создание пакетного файла

Пример простого .bat файла


@echo off
echo Привет, мир!
pause
                        

Основные команды

# Комментарии
                        REM Это комментарий
                        
                        # Вывод текста
                        echo Текст для вывода
                        
                        # Пауза
                        pause
                        
                        # Переход в папку
                        cd C:\Users
                        
                        # Запуск программы
                        start notepad.exe
                    

Переменные и параметры

Использование переменных


@echo off
set MY_VAR=Привет
echo %MY_VAR%

REM Параметры командной строки
echo Первый параметр: %1
echo Второй параметр: %2
pause
                        

8.2 PowerShell скрипты

PowerShell скрипты (.ps1) предоставляют мощные возможности для автоматизации задач в Windows.

Создание скрипта

Пример PowerShell скрипта


# Скрипт для создания резервной копии
param(
    [string]$SourcePath = "C:\Users\Иван\Documents",
    [string]$BackupPath = "C:\Backup"
)

# Создание папки для бэкапа
if (!(Test-Path $BackupPath)) {
    New-Item -ItemType Directory -Path $BackupPath -Force
}

# Копирование файлов
Copy-Item -Path $SourcePath -Destination $BackupPath -Recurse -Force

Write-Host "Резервная копия создана в: $BackupPath"
                        

Выполнение скриптов

# Выполнение скрипта
                        .\MyScript.ps1
                        
                        # Выполнение с параметрами
                        .\MyScript.ps1 -SourcePath "C:\Data" -BackupPath "D:\Backup"
                        
                        # Выполнение с обходом политики выполнения
                        PowerShell -ExecutionPolicy Bypass -File ".\MyScript.ps1"
                    

Функции и модули

Создание функции


function Get-SystemInfo {
    param([string]$ComputerName = "localhost")
    
    $info = Get-ComputerInfo -Property TotalPhysicalMemory, WindowsProductName, WindowsVersion
    return $info
}

# Использование функции
$systemInfo = Get-SystemInfo
Write-Host "Память: $($systemInfo.TotalPhysicalMemory / 1GB) GB"
                        

8.3 Планировщик задач

Планировщик задач Windows позволяет автоматически запускать программы и скрипты по расписанию.

Создание задачи через PowerShell

# Создание простой задачи
                        $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\MyScript.ps1"
                        $trigger = New-ScheduledTaskTrigger -Daily -At "09:00"
                        $settings = New-ScheduledTaskSettingsSet
                        
                        Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "МояЗадача" -Settings $settings
                    

Управление задачами

# Просмотр всех задач
Get-ScheduledTask
                        
                        # Запуск задачи
                        Start-ScheduledTask -TaskName "МояЗадача"
                        
                        # Остановка задачи
                        Stop-ScheduledTask -TaskName "МояЗадача"
                        
                        # Удаление задачи
                        Unregister-ScheduledTask -TaskName "МояЗадача" -Confirm:$false
                    

Создание задачи через GUI

Планировщик задач: Откройте "Планировщик задач" через меню "Пуск" или выполните команду taskschd.msc для графического интерфейса.

8.4 Продвинутая автоматизация

Продвинутые техники автоматизации включают работу с WMI, COM-объектами и удаленным выполнением.

Работа с WMI

# Получение информации о системе
Get-WmiObject -Class Win32_ComputerSystem
                        
                        # Мониторинг процессов
Get-WmiObject -Class Win32_Process | Where-Object {$_.Name -like "*notepad*"}
                        
                        # Управление службами через WMI
                        $service = Get-WmiObject -Class Win32_Service -Filter "Name='Spooler'"
                        $service.StartService()
                    

COM-объекты

# Работа с Excel через COM
                        $excel = New-Object -ComObject Excel.Application
                        $excel.Visible = $true
                        $workbook = $excel.Workbooks.Add()
                        $worksheet = $workbook.Worksheets.Item(1)
                        $worksheet.Cells.Item(1,1) = "Привет, Excel!"
                        $excel.Quit()
                    

Удаленное выполнение

# Выполнение команды на удаленном компьютере
                        Invoke-Command -ComputerName "RemotePC" -ScriptBlock {Get-Process}
                        
                        # Создание постоянного сеанса
                        $session = New-PSSession -ComputerName "RemotePC"
                        Invoke-Command -Session $session -ScriptBlock {Get-Service}
                        Remove-PSSession $session