Загрузка данных
# Скрипт для вывода информации о запущенных процессах
# Get-ProcessInfo.ps1
# Функция для получения пользователя процесса
function Get-ProcessOwner {
param([int]$ProcessId)
try {
$process = Get-WmiObject -Class Win32_Process -Filter "ProcessId = $ProcessId" -ErrorAction Stop
if ($process) {
$owner = $process.GetOwner()
if ($owner.ReturnValue -eq 0) {
return "$($owner.Domain)\$($owner.User)"
} else {
return "Не доступно"
}
}
} catch {
return "Ошибка доступа"
}
return "Не найден"
}
# Функция для получения пути к исполняемому файлу
function Get-ProcessPath {
param([int]$ProcessId)
try {
$process = Get-Process -Id $ProcessId -ErrorAction Stop
if ($process.Path) {
return $process.Path
} else {
return "Не доступно"
}
} catch {
return "Не доступно"
}
}
# Функция для получения CPU в процентах
function Get-CpuUsage {
param([int]$ProcessId)
try {
# Получаем процесс и его время процессора
$process = Get-Process -Id $ProcessId -ErrorAction Stop
$totalCpuTime = $process.TotalProcessorTime.TotalSeconds
# Получаем время работы процесса
$startTime = $process.StartTime
if ($startTime) {
$uptime = (Get-Date) - $startTime
if ($uptime.TotalSeconds -gt 0) {
# Расчет использования CPU в процентах (приблизительный)
$cpuPercent = [math]::Round(($totalCpuTime / $uptime.TotalSeconds) * 100 / [Environment]::ProcessorCount, 2)
return $cpuPercent
} else {
return 0
}
}
} catch {
return 0
}
return 0
}
# Основная часть скрипта
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host " ИНФОРМАЦИЯ О ЗАПУЩЕННЫХ ПРОЦЕССАХ" -ForegroundColor Yellow
Write-Host "========================================`n" -ForegroundColor Cyan
# Получаем все запущенные процессы
$processes = Get-Process
# Создаем массив для хранения результатов
$results = @()
# Текущее время получения данных
$currentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
foreach ($process in $processes) {
try {
$pid = $process.Id
$processName = $process.ProcessName
$processPath = Get-ProcessPath -ProcessId $pid
$processOwner = Get-ProcessOwner -ProcessId $pid
$cpuUsage = Get-CpuUsage -ProcessId $pid
$memoryUsage = [math]::Round($process.WorkingSet64 / 1MB, 2) # В мегабайтах
# Создаем объект с информацией о процессе
$result = [PSCustomObject]@{
'PID' = $pid
'Имя процесса' = $processName
'Путь к файлу' = $processPath
'Пользователь' = $processOwner
'CPU %' = $cpuUsage
'Память (MB)' = $memoryUsage
'Время получения' = $currentTime
}
$results += $result
} catch {
# Пропускаем процессы, к которым нет доступа
Write-Warning "Не удалось получить информацию о процессе $($process.ProcessName) (PID: $($process.Id))"
}
}
# Выводим результаты в виде таблицы
$results | Format-Table -AutoSize -Wrap
# Выводим сводную информацию
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "СВОДНАЯ ИНФОРМАЦИЯ:" -ForegroundColor Yellow
Write-Host "Всего процессов: $($results.Count)" -ForegroundColor Green
Write-Host "Время получения данных: $currentTime" -ForegroundColor Green
Write-Host "========================================`n" -ForegroundColor Cyan
# Экспорт в CSV файл (опционально)
$exportPath = "$env:TEMP\ProcessInfo_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
$results | Export-Csv -Path $exportPath -Encoding UTF8 -NoTypeInformation
Write-Host "Информация также сохранена в файл: $exportPath" -ForegroundColor Yellow