Windows powershell 屏幕等效

Windows powershell 屏幕等效

我正在使用 Windows 机器作为 ssh 服务器。我想远程运行一些需要几个小时才能完成的任务。有没有办法在 Powershell 中远程 ssh 会话断开后仍能保持进程持续?

答案1

经过一些实验,现在我已经用 PowerShell Remoting 替换了 ssh。

特别是,启动一个远程作业,将结果保存在远程计算机上关于远程工作非常有帮助。

基本上我目前的工作流程是

  1. 打开新的 PSSession
  2. Invoke-Command在远程服务器上以作业形式调用命令 ( ),使用Start-Job

然后我可以自由地断开会话连接,然后重新连接到会话并获取作业输出Receive-Job

答案2

通过 PSSession 使用 RunasJob 参数:

(摘自关于远程作业的帮助)

启动远程作业并将结果返回到本地计算机 (ASJOB)

要在远程计算机上启动将命令结果返回本地计算机的后台作业,请使用 cmdlet(例如 Invoke-Command cmdlet)的 AsJob 参数。

使用 AsJob 参数时,即使作业在远程计算机上运行,​​作业对象实际上也是在本地计算机上创建的。作业完成后,结果将返回到本地计算机。

您可以使用包含 Job 名词的 cmdlet(Job cmdlet)来管理由任何 cmdlet 创建的任何作业。许多具有 AsJob 参数的 cmdlet 不使用 Windows PowerShell 远程处理,因此即使在未配置 远程处理且不符合远程处理要求的
计算机上也可以使用它们。

步骤 1:调用命令 -ASJOB

以下命令使用 Invoke-Command 的 AsJob 参数在 Server01 计算机上启动后台作业。该作业运行 Get-Eventlog 命令,该命令获取系统日志中的事件。您可以使用 JobName 参数为该作业分配显示名称。

  invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob

该命令的结果类似于以下示例输出。

  SessionId   Name    State      HasMoreData     Location   Command
  ---------   ----    -----      -----------     --------   -------
  1           Job1    Running    True            Server01   get-eventlog system

使用 AsJob 参数时,Invoke-Command 返回的作业对象类型与 Start-Job 返回的作业对象类型相同。您可以将作业对象保存在变量中,也可以使用 Get-Job 命令获取作业。

请注意,Location 属性的值显示该作业在 Server01 计算机上运行。

第二步:找到工作

若要管理使用 Invoke-Command cmdlet 的 AsJob 参数启动的作业,请使用 Job cmdlet。由于代表远程作业的作业对象位于本地计算机上,因此您无需运行远程命令来管理作业。

要确定作业是否完成,请使用 Get-Job 命令。以下命令获取当前会话中启动的所有作业。

   get-job

由于远程作业是在当前会话中启动的,因此本地 Get-Job 命令获取该作业。作业对象的 State 属性显示该命令已成功完成。

  SessionId   Name   State      HasMoreData     Location   Command
  ---------   ----   -----      -----------     --------   -------
  1           Job1   Completed  True            Server01   get-eventlog system

步骤 3:接收工作

要获取作业的结果,请使用 Receive-Job cmdlet。由于作业结果会自动返回到作业对象所在的计算机,因此您可以使用本地 Receive-Job 命令获取结果。

以下命令使用 Receive-Job cmdlet 获取作业结果。它使用会话 ID 来标识作业。此命令将作业结果保存在 $results 变量中。您还可以将结果重定向到文件。

  $results = receive-job -id 1

答案3

您正在寻找的是 PSSessions。

来自 technet 上的 about_pssessions 页面(http://technet.microsoft.com/en-us/library/hh847839.aspx

但是,与自动启动的会话不同,您可以控制自己创建的 PSSession。您可以获取、创建、配置和删除它们,断开连接并重新连接它们,以及在同一个 PSSession 中运行多个命令。PSSession 一直可用,直到您将其删除或超时。

答案4

由于 OP 使用 ssh 从非 Windows 计算机连接到 Powershell,因此他无法使用 Powershell 会话。他会像连接到本地计算机一样运行它。Start-Job cmdlet 应该可以解决问题:

Start-Job -scriptblock {您希望作为作业运行的脚本或命令}

相关内容