Проблема при смене пароля на серверах остались отключенные сессии . Из-за этого блокируется учётная запись. Надо сессию завершить на всех серверах . но так как серверов больше 500 в ручную делать это негуманно к себе.
вот скрипт . Запускается от пользователя которого надо завершить
param ( #get current logged on username [string]$UserName = $env:USERNAME ) # Импортировать модуль Active Directory для Get-ADComputer CmdLet Import-Module ActiveDirectory # Запрос Active Directory для включенных учетных записей компьютеров серверов Windows и сортировка по имени $Servers = Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True")} | Sort Name # Инициирующие переменные $SessionList = $NULL $queryResults = $NULL $SError = $null $SDown = $null $z = 0 # Получить общее количество серверов $count = $Servers.count # Начать цикл по каждому серверу одновременно ForEach ($Server in $Servers) { # инициировать счетчик для отображения прогресса $z = $z + 1 $ServerName = $Server.Name # Начните писать прогресс Write-Progress -Activity "Processing Server: $z out of $count servers." -Status " Progress" -PercentComplete ($z/$Servers.count*100) # проверить, доступен ли сервер для пинга, перед запуском запроса на сервере if (Test-Connection $Server.Name -Count 1 -Quiet) { Write-Host "`n`n$ServerName is online!" -BackgroundColor Green -ForegroundColor Black Write-Host ("`nQuerying Server: `"$ServerName`" for disconnected sessions under UserName: `"" + $UserName.ToUpper() + "`"...") -BackgroundColor Gray -ForegroundColor Black # Сохранять результаты в массиве [array]$queryResults += ( # Запросить сервер для определенного имени пользователя query user $UserName /server:$ServerName | foreach { # Ищите строки со строкой диска, чтобы отфильтровать активные сеансы if ($_ -match "Disc") { # форматировать вывод в CSV, заменяя запятую более двух пробелов write-output ("`n$ServerName," + (($_.trim() -replace ' {2,}', ','))) } } ) } # Если сервер не пингуется, показать сообщение об ошибке else { # Составьте список серверов, которые не работают. [array]$SDown += ($ServerName) Write-Host "`nError: Unable to connect to $ServerName!" -BackgroundColor red -ForegroundColor white Write-Host "Either the $ServerName is down or check for firewall settings on server $ServerName!" -BackgroundColor Yellow -ForegroundColor black } } # Если есть какой-нибудь не пингующий сервер, то отобразите список if ($SDown -ne $null -and $SDown) { Write-Host "`nScript was unable to connect to the following server:" -ForegroundColor White -BackgroundColor Red $SDown } # Проверьте, хранятся ли какие-либо отключенные сеансы в массиве if ($queryResults -ne $null -and $queryResults) { # Преобразовать формат CSV в табличный формат с заголовками $QueryResultsCSV = $queryResults | ConvertFrom-Csv -Delimiter "," -Header "ServerName","UserName","SessionID","CurrentState","IdealTime","LogonTime" # Показать результаты на консоли $QueryResultsCSV |ft -AutoSize # Пройдите каждый сеанс Disconnected, хранящийся в массиве $QueryResultsCSV | foreach { # Grabb идентификатор сессии и имя_сервера $Sessionl = $_.SessionID $Serverl = $_.ServerName # Показать сообщение на консоли Write-Host "`nLogging off"$_.username"from $serverl..." -ForegroundColor black -BackgroundColor Gray sleep 2 # Выйти из системы, используя идентификатор сессии logoff $Sessionl /server:$Serverl /v } } else { # если массив пуст, показать сообщение о том, что сессия не найдена Write-Host `n`n`n`n("*" * $LineSize) Write-Host "You are all good! No ghost sessions found!" -BackgroundColor Green -ForegroundColor Black Write-Host ("*" * $LineSize) } # Пауза в конце, чтобы вы могли захватить вывод $null = Read-Host "`n`nScript execution finished, press enter to exit!"
Similar Posts:
- Как делегировать права управления терминальных сессий не давая полные права на сервер в windows 2012/16
- Как сбросить терминальные сессии на терминальной ферме RDS windows 2012-2016 без прав администратора
- Как отключить (отмонтировать) диск User Profile Disks в RDS Windows Server
- Как искать внутри GPO групповых политик.
- Как сбросить все зависшие или в состоянии disconnect сессии в rpd rds ferma со всех хостов разом.