И тех, кто там безнадёжно заплутал.
Доводилось ли Вам сталкиваться с ситуацией, когда кто-то забывал разрывать теневое rdp-соединение с удалённых хостом и из-за этого Вы не могли подключиться к хосту? Мне доводилось неоднократно. Избавлением от этой напасти послужил этот скрипт:
[System.Console]::Title = "Обрубить все соединения удаленного рабочего стола"
$sleep = 10
$hostname = Read-Host "Имя компьютера"
Clear
Write-Host "На хосте $hostname будут закрыты все RDP соединения!" -ForegroundColor Red
Write-Host "Для отмены закройте это окно или нажмите Ctrl+C!" -ForegroundColor Red
Write-Host
Sleep($sleep)
if (Test-Connection -ComputerName $hostname -Count 1 -Quiet)
{
Clear
Write-Host "Отправляется команда закрытия соединений на $hostname..." -ForegroundColor Green
Invoke-Command -ComputerName $hostname -ScriptBlock { Stop-Process -Name mstsc -ErrorAction Stop -Force }
}
else
{
Write-Host "Хост $hostname недоступен!" -ForegroundColor Red
}
Write-Host
Write-Host "Это окно закроется автоматически!" -ForegroundColor Green
Sleep($sleep)
Следуя классическим правилам, скрипт интересуется именем компьютера, на котором активен сеанс теневого подключения, даёт на раздумья 10 секунд и останавливает процесс mstsc на указанном компьютере. Для верности прикрутил условие с пинговалкой. Время ожидания действия указано в переменной $sleep и его можно изменить на своё усмотрение.
Для полноценной работы скрипта требуются права администратора.
Программа для обеспечения теневого доступа к удалённому рабочему столу лежит где-то здесь.
Скрипт можно скомпилировать в исполняемый файл, используя модуль PS2EXE.