Перейти к содержимому

Как посмотреть кто залогинен на серверах в сети powershell

задача проверить кто активен на серверах в сети

# Список серверов
$servers = (Get-AdComputer  -properties lastLogonDate -Filter  {enabled -eq "true" -and OperatingSystem -Like '*Windows Server*' }).name
# Результаты
$loggedInUsers = @()

foreach ($server in $servers) {
    # Проверяем доступность сервера
    $ping = Test-Connection -ComputerName $server -Count 1 -Quiet
    
    if ($ping) {
        try {
            # Выполняем команду qwinsta на удаленном сервере
            $output = qwinsta /server:$server

            if ($null -eq $output) {
                Write-Host "Не удалось получить данные с сервера: $server"
                continue
            }

            # Получаем названия колонок и их позиции из заголовка
            $columns = [regex]::Matches($output[0],'(?<=\s)\w+')

            # Обрабатываем каждую строку, пропуская заголовок
            $output | Select-Object -Skip 1 | ForEach-Object {
                [string]$line = $_

                $session = [ordered]@{}
                for ($i=0; $i -lt $columns.Count; $i++) {
                    $currentColumn = $columns[$i]
                    $columnName = $currentColumn.Value

                    if ($i -eq $columns.Count-1) {
                        # Последняя колонка, получаем оставшуюся часть строки
                        $columnValue = $line.Substring($currentColumn.Index).Trim()
                    } else {
                        $lengthToNextColumn = $columns[$i+1].Index - $currentColumn.Index
                        $columnValue = $line.Substring($currentColumn.Index, $lengthToNextColumn).Trim()
                    }

                    $session.$columnName = $columnValue.Trim()
                }

                # Добавляем информацию в список, используя фиксированные поля
                $loggedInUsers += [pscustomobject]@{
                    Server      = $server
                    SessionName = if ($session.SessionName -eq "") { "na" } else { $session.SessionName }
                    UserName    = if ($session.UserName -eq "") { "Нет активного пользователя" } else { $session.UserName }
                    ID          = $session.ID
                    State       = $session.State
                    Type        = if ($session.Type -eq "") { "N/A" } else { $session.Type }
                    Device      = if ($session.Device.Trim() -eq "") { "N/A" } else { $session.Device }
                }
            }
        } catch {
            Write-Host "Ошибка подключения к серверу: $server. Сообщение об ошибке: $_"
        }
    } else {
        Write-Host "Сервер недоступен: $server"
    }
}

# Выводим результат
$loggedInUsers | Format-Table -AutoSize
$loggedInUsers | Export-Csv -Path "C:\login.csv" -NoTypeInformation -Encoding UTF8

 

Similar Posts:

Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика