我想使用 PowerShell 远程重启多台计算机,然后等到重启完成后再继续执行脚本。我偶然发现了“restart-computer”命令及其“wait”开关参数。遗憾的是,它似乎只能与 WinRM 一起使用作为远程协议,而不能与 SSH 一起使用。我们希望以后只使用 SSH 与 PowerShell 进行远程连接,并完全停止使用 WinRM。
我是否可以实现相同的功能,但使用 SSH 作为协议?
答案1
最简单的答案是 powershell 可以像其他 shell 一样调用内置功能ssh.exe
:
# restart remote server over SSH:
ssh.exe user@hostname shutdown -r -t 0
更长的答案是,powershell 6+ 可以使用 SSH 协议建立远程 powershell 会话,它比普通 SSH 具有更多功能。请参阅通过 SSH 进行 PowerShell 远程控制了解详细信息,但基本内容是:
- 本地和远程系统上都必须安装 Powershell 6+
- 在远程服务器上,应该运行 powershell 的 SSH 子系统
- 使用 PS Remoting 的命令(例如)可以通过指定而不是 来
Invoke-Command
直接使用它。-HostName
-ComputerName
- Linux 和 Windows 客户端/服务器的要求相同(如果您在 Linux 上运行 powershell)
正确配置后,您可以使用 SSH 重新启动远程服务器,例如:
Invoke-Command -HostName MyServer -UserName MyUser -ScriptBlock {Restart-Computer}
并手动检查远程服务器是否重新启动,例如:
Sleep 30 ## wait before checking
$SSH=$null
While(-not $SSH){
Try {$SSH = New-PSSession -HostName 'MyServer' -ea Stop}
Catch{Write-Host 'Waiting for reboot...'}
sleep 10
}