задача проверить кто активен на серверах в сети
# Список серверов $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:
- Как делегировать права управления терминальных сессий не давая полные права на сервер в windows 2012/16
- Как сбросить терминальные сессии на терминальной ферме RDS windows 2012-2016 без прав администратора
- Как завершить сессию на всех серверах в локальной сети.
- Как разлогинеть (logoff) всех пользователей со статусом disconnect со всех серверов windows в domain.
- Как обновить сертификат ssl hp ilo через PowerShell и Windows CA