Загрузка данных


# Скрипт для вывода информации о запущенных процессах
# 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