当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 夜班

作者:精品下载站 日期:2024-12-14 07:47:09 浏览:15 分类:玩电脑

PowerShell 夜班


几天前,我在 Twitter 上收到一个问题,询问如何将长时间运行的命令推送到后台,但在用户注销后仍能幸存。这是 Linux 世界中相当标准的做法。在 PowerShell 中,我们使用 Start-Job cmdlet 进行了类似的操作。使用 Start-Job,您可以在后台 PowerShell 进程中运行脚本块或脚本,并稍后获取结果。但是,如果您关闭 PowerShell 会话,您就会失去该工作,因此这里不提供此选项。

在这种情况下,最好的解决方案是利用断开连接的会话。此功能是在 PowerShell 3.0 中添加的,其中 Microsoft 将维护远程会话从客户端移至服务器。这意味着,如果您想要在远程服务器上运行一个长时间运行的命令,您可以使用 Invoke-Command 启动它。

Invoke-Command -scriptblock { <some long running series of commands> } -computername chi-foo -inDisconnectedSession

会话被远程创建并且命令启动。在客户端上,您可以注销、关闭、回家,甚至转到另一台计算机。只要使用相同的凭据,您就可以重新连接会话。但你不能做的一件事就是在交互会话进行到一半时决定断开连接。

事实证明,同样的想法在本地也适用。这是我如何开始它的方法

Invoke-Command -scriptblock { $l = get-eventlog system -newest 500 } -computername . -indisconnectedsession

[玩转系统] PowerShell 夜班

请记住这是在我的机器上。本质上,我已经为自己创建了一个远程会话。我现在可以关闭 PowerShell 会话。我什至可以注销并回家。但是,我无法关闭计算机。如果我这样做,那么我将失去远程会话。为了进行演示,我将注销、重新登录并打开一个新的 PowerShell 会话。

回来后我需要断开连接的会话。您可能会想简单地运行 Get-PSSession。

[玩转系统] PowerShell 夜班

但这只是试图显示连接的会话。由于断开连接的会话在技术上是远程的,因此我需要指定计算机名称。

[玩转系统] PowerShell 夜班

就在那里。为了使用它,我需要连接到它。

$s = get-pssession -computername . | connect-pssession

[玩转系统] PowerShell 夜班

查看忙碌状态?尽管我已连接到会话,但在它停止繁忙之前我无法从中获取任何内容。

[玩转系统] PowerShell 夜班

在我的测试过程中,我不知道这是否与基本上在环回中运行有关,但会话似乎永远不会停止忙碌,即使它只是运行我的命令,它也应该完成。但如果我以交互方式进入会话,这似乎足以给它带来冲击并让事情进展顺利。

[玩转系统] PowerShell 夜班

但我对此很擅长。我可以启动长时间运行的 PowerShell 任务、注销,并在下次登录时获取结果。只要会话处于打开状态,我就可以重复使用该会话。

[玩转系统] PowerShell 夜班

该会话将一直存在,直到我将其删除。或者我可以再次断开连接。

[玩转系统] PowerShell 夜班

如果您觉得这个小技巧有用,希望您告诉我。如果您想了解有关 PowerShell 远程处理的更多信息,请关注 Pluralsight 课程目录,因为我目前正在学习 PowerShell 远程处理基础课程。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯