#Requires -Version 5.1
#Requires -RunAsAdministrator # Удалить если права администратора не нужны
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
#region === Пути и переменные ===
$Root = if ($PSScriptRoot) { $PSScriptRoot } else { Split-Path $MyInvocation.MyCommand.Path }
$CSVIn = Join-Path $Root 'data_in.csv'
$CSVOut = Join-Path $Root 'data_out.csv'
$HTMLOut = Join-Path $Root 'report.html'
$Results = [System.Collections.Generic.List[PSCustomObject]]::new()
#endregion
#region === Загрузка вспомогательных функций из файла 'helpers.ps1' ===
# . (Join-Path $Root 'helpers.ps1') # Раскомментировать если нужен внешний файл функций
#endregion
#region === Источник данных (оставить один нужный блок) ===
# --- Вариант А: встроенный массив строк ---
# $Data = @'
# строка1
# строка2
# строка3
# '@ -split "`r?`n" | Where-Object { $_.Trim() } | ForEach-Object { $_.Trim() }
# --- Вариант Б: CSV-файл ---
# if (-not (Test-Path $CSVIn)) { Write-Warning "Файл не найден: $CSVIn"; exit 1 }
# $Data = Import-Csv -Path $CSVIn -Encoding UTF8 -Delimiter ';' |
# Where-Object { $_.PSObject.Properties.Value -ne '' } |
# Sort-Object fio
# --- Вариант В: конфиг из .psd1 ---
# $Cfg = Import-PowerShellDataFile -Path (Join-Path $Root 'config.psd1')
# Пример config.psd1:
# @{
# StatePath = 'C:\scripts\state.txt'
# Smtp = @{ Server = 'mx.company.ru'; Port = 25; UseSsl = $false
# From = 'bot@company.ru'; To = 'admin@company.ru' }
# }
# --- Вариант Г: жёсткий список объектов ---
# $Data = @(
# [PSCustomObject]@{ Name = 'Анна'; Age = 30 }
# [PSCustomObject]@{ Name = 'Олег'; Age = 25 }
# [PSCustomObject]@{ Name = 'Ирина'; Age = 55 }
# )
#endregion
#region === Обработка ===
foreach ($Item in $Data) {
try {
Write-Verbose "Обработка: $Item"
# --- логика здесь ---
$Results.Add([PSCustomObject]@{
Timestamp = Get-Date -Format 'HH:mm:ss'
Value = $Item
User = $env:USERNAME
})
}
catch {
Write-Warning "Ошибка [$Item]: $_"
}
}
#endregion
#region === Вывод результатов ===
if ($Results.Count -eq 0) { Write-Warning 'Нет данных для экспорта.'; exit 0 }
# Консоль
$Results | Format-Table -AutoSize
# CSV
$Results | Export-Csv -Path $CSVOut -NoTypeInformation -Encoding UTF8 -Delimiter ';'
# HTML
$Results | ConvertTo-Html `
-Title "Отчёт $(Get-Date -Format 'dd.MM.yyyy')" `
-Head '<style>body{font-family:Arial}table{border-collapse:collapse}td,th{border:1px solid #ccc;padding:5px}</style>' `
-PreContent "<h2>Результаты</h2><p>Дата: $(Get-Date)</p>" |
Out-File $HTMLOut -Encoding UTF8
Write-Host "Готово → $CSVOut" -ForegroundColor Green
# Invoke-Item $CSVOut # Открыть CSV после завершения
# Invoke-Item $HTMLOut # Открыть HTML после завершения
#endregion
#region === Отправка почты ===
# $MailParams = @{
# From = 'bot@company.ru'
# To = 'admin@company.ru'
# Subject = "Отчёт $(Get-Date -Format 'dd.MM.yyyy')"
# Body = 'Скрипт завершён. Результаты во вложении.'
# SmtpServer = 'smtp.company.local'
# Port = 25
# Attachments = @($CSVOut, $HTMLOut)
# # UseSSL = $true
# # Credential = Get-Credential
# }
# Send-MailMessage @MailParams
#endregion