使用“restart-computer”Cmdlet对使用SSH的远程计算机

使用“restart-computer”Cmdlet对使用SSH的远程计算机

我想使用 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
}

相关内容