我经常发现自己使用远程桌面连接到工作站或服务器来执行需要重新启动的任务。在这些情况下,我通常需要在主机重新上线后重新连接,以确保一切按计划进行或继续我的工作。在这些情况下,我通常会在命令提示符中启动“ping -t”以让我知道何时可以重新连接。
但是,在等待主机恢复在线时,我偶尔会因为其他事情而分心,然后忘记返回主机。如果主机恢复在线时能收到提醒并允许我重新连接(最好只需单击一下)那就太好了。
有人知道一个简单的方法来实现这一点吗?我想一定有一个免费的实用程序可用,或者也许可以使用 PowerShell 脚本来完成。
答案1
<#
.Synopsis
Checks for and connects to RDP on a given server.
.Description
This script tests for an open port 3389 (standard Windows RDP), and if it finds it, passes the IP to mstsc.exe. Otherwise it retries indefinitely. Ctrl+C will halt the script.
.Parameter ip
IP or FQDN of a Windows machine to test. Only takes one argument.
.Parameter wait
Will assume that the machine is still up, wait until it stops responding (even once), and then try to connect. Good for machines that are about to reboot.
.Parameter Verbose
Will print a line each time it tries unsuccessfully.
.Example
rdpupyet.ps1 ITG-SRV-INF01 -Verbose
#>
[CmdletBinding()]
param($ip, [switch]$wait)
function Get-DownYet ($ip) {
Write-Verbose "Waiting for $IP to shut down."
do {
try {$up = New-Object System.Net.Sockets.TCPClient -ArgumentList $ip,3389}
catch {$up = $false}
}
until ($up -eq $false)
Write-Verbose "$IP no longer responding."
}
Write-Verbose "Testing RDP Connection... Ctrl+C to quit."
if ($wait) {Get-DownYet $ip}
do {
try {$success = New-Object System.Net.Sockets.TCPClient -ArgumentList $ip,3389}
catch {Write-Verbose "RDP not active. Retrying."}
}
while (!$success)
mstsc.exe /v:$ip /admin
恐怕不会超时。但可以轻松添加,并在成功响应时发出快速哔声。
我更满意的一点(取自互联网上目前不记得的来源)是,当服务器响应 ping 时,它不会尝试连接 - 相反,只有当标准 RDP 端口可访问时才会尝试连接。
答案2
在便签上写上“不要忘记 $ServerName”,并将其贴到您的显示器上。
答案3
答案4
我的每台服务器上都有一个简单的脚本,当服务器重新启动时,它会给我发送电子邮件。这是一个批处理文件,在 Windows 上使用 blat,在 Mac 和 Linux 上使用 perl 脚本。它们通过适合操作系统的任何方式触发。例如,在 Windows 上使用机器启动脚本。