У меня есть несколько серверов, и я хочу проверить, могу ли я подключиться к ним с помощью RDP. У меня 2000 серверов, поэтому я хотел автоматизировать их.
Я не очень знаком с PowerShell, вот что у меня есть:
list.txt:
ip1
ip2
ip3
...
ipn
Вот мой код. Я зацикливаюсь на каждом ips, соединяюсь, проверяю, было ли соединение успешным, и пытаюсь закрыть его.
Get-Content C:\Users\MyUser\Documents\computers2.txt |
ForEach-Object{
cmdkey /generic:TERMSRV/$_ /user:MyUser /pass:MyPassWord
mstsc /v:$_
Start-Sleep 90
$app = Get-Process -processname "$_*"
if (Get-winevent -comp $_ -FilterHashtable @{Logname='security'; ID=4624; starttime=(get-date).addMinutes(-10)} | where {$_.properties[8].value -eq 10 -and $_.properties[5].value -eq 'MyUser'}) {
"$_" >> C:\Users\MyUser\Documents\valid.txt
}
$app.Kill()
}
Remote Desktop Connection открывается и подключается. Операторы if тоже работают. Но мне не удается убить мое новое подключение к удаленному рабочему столу с именем «- подключение к удаленному рабочему столу» Кажется, $app
пусто.
Я пробовал также:
Stop-Process -processname "$_*"
EDIT
Я не хочу проверять, включен ли RDP на удаленном компьютере (проверьте порт с помощью Test-NetConnection -Port 53 -ComputerName $_
), но имеет ли конкретный пользователь доступ к удаленному серверу.
Обход
Get-Content C:\Users\MyUser\Documents\computers2.txt |
ForEach-Object{
cmdkey /generic:TERMSRV/$_ /user:MyUser /pass:MyPassWord
mstsc /v:$_
Write-Host "Sleeping for 90 sec"
Start-Sleep 90
if (Get-winevent -comp $_ -FilterHashtable @{Logname='security'; ID=4624; starttime=(get-date).addMinutes(-10)} | where {$_.properties[8].value -eq 10 -and $_.properties[5].value -eq 'MyUser'}) {
"$_" >> C:\Users\MyUser\Documents\result.txt
}
Get-Process | Where-Object { $_.Name -eq "mstsc" } | Select-Object -First 1 | Stop-Process
}
Это работает, если вы уверены, что на компьютере, на котором вы работаете, есть только одно RDP-соединение. Для меня я подключен в RDP к этой машине ... Так что будет запущен процесс 2 mstsc
. На данный момент это никогда не убивало мою сессию, только новые. Но если кто-то еще пойдет в RDP на машине, это может сломать все.