[玩转系统] 关于远程工作
作者:精品下载站 日期:2024-12-14 02:19:13 浏览:12 分类:玩电脑
关于远程工作
简短描述
描述如何在远程计算机上运行后台作业。
详细说明
PowerShell 通过作业同时运行命令和脚本。 PowerShell 提供了三种作业类型来支持并发。
RemoteJob
- 命令和脚本在远程会话中运行。BackgroundJob
- 命令和脚本在本地计算机上的单独进程中运行。有关更多信息,请参阅 about_Jobs。PSTaskJob
或ThreadJob
- 命令和脚本在本地计算机上同一进程内的单独线程中运行。有关详细信息,请参阅 about_Thread_Jobs。
在单独的计算机或单独的进程中远程运行脚本可以提供很好的隔离。远程作业中发生的任何错误都不会影响其他正在运行的作业或启动该作业的父会话。然而,远程处理层增加了开销,包括对象序列化。所有对象在父会话和远程(作业)会话之间传递时都会被序列化和反序列化。大型复杂数据对象的序列化可能会消耗大量计算和内存资源,并通过网络传输大量数据。
这很重要
创建作业的父会话还会监视作业状态并收集管道数据。一旦作业达到完成状态,作业子进程就会被父进程终止。如果父会话终止,所有正在运行的子作业及其子进程都会终止。
有两种方法可以解决这种情况:
- 使用
Invoke-Command
创建在断开连接的会话中运行的作业。请参阅本文的分离进程部分。 - 使用
Start-Process
创建新进程而不是作业。有关详细信息,请参阅启动进程。
远程工作
您可以使用三种不同的方法在远程计算机上运行作业。
在远程计算机上启动交互式会话。然后在交互式会话中启动作业。尽管所有操作都是在远程计算机上执行,但这些过程与运行本地作业相同。
在远程计算机上运行作业,将其结果返回到本地计算机。当您想要收集作业结果并将其维护在本地计算机上的中央位置时,请使用此方法。
在远程计算机上运行作业,并在远程计算机上维护其结果。当作业数据在原始计算机上得到更安全的维护时,请使用此方法。
在交互式会话中启动作业
您可以启动与远程计算机的交互式会话,然后在交互式会话期间启动作业。有关交互式会话的更多信息,请参阅 about_Remote 和 Enter-PSSession
。
在交互式会话中启动作业的过程与在本地计算机上启动后台作业的过程几乎相同。但是,所有操作都发生在远程计算机上,而不是本地计算机上。
使用
Enter-PSSession
cmdlet 启动与远程计算机的交互式会话。您可以使用Enter-PSSession
的 ComputerName 参数为交互式会话建立临时连接。或者,您可以使用 Session 参数在 PowerShell 会话 (PSSession) 中运行交互式会话。以下命令在 Server01 计算机上启动交互式会话。
C:\PS> Enter-PSSession -computername Server01
命令提示符发生更改,显示您现在已连接到 Server01 计算机。
Server01\C:>
-
要在会话中启动远程作业,请使用
Start-Job
cmdlet。以下命令运行一个远程作业,该作业获取 Server01 计算机上 Windows PowerShell 事件日志中的事件。Start-Job
cmdlet 返回一个表示作业的对象。此命令将作业对象保存在
$job
变量中。Server01\C:> $job = Start-Job -scriptblock { Get-Eventlog "Windows PowerShell" }
当作业运行时,您可以使用交互式会话来运行其他命令,包括其他作业。但是,您必须保持交互式会话打开,直到作业完成。如果结束会话,作业就会中断,结果也会丢失。
要查明作业是否已完成,请显示
$job
变量的值,或使用Get-Job
cmdlet 获取作业。以下命令使用Get-Job
cmdlet 来显示作业。Server01\C:> Get-Job $job SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Complete True localhost Get-Eventlog "Windows...
Get-Job
输出显示作业正在“localhost”计算机上运行,因为该作业是在同一台计算机(在本例中为 Server01)上启动并运行的。要获取作业的结果,请使用 Receive-Job cmdlet。您可以在交互式会话中显示结果或将它们保存到远程计算机上的文件中。以下命令获取 $job 变量中的作业结果。该命令使用重定向运算符 (
>
) 将作业结果保存在 Server01 计算机上的 PsLog.txt 文件中。Server01\C:> Receive-Job $job > c:\logs\PsLog.txt
要结束交互式会话,请使用
Exit-PSSession
cmdlet。命令提示符发生更改,显示您已返回本地计算机上的原始会话。Server01\C:> Exit-PSSession C:\PS>
要随时查看 Server01 计算机上的
PsLog.txt
文件的内容,请启动另一个交互式会话,或运行远程命令。如果您想要使用多个命令来调查和管理PsLog.txt
文件中的数据,这种类型的命令最好在 PSSession(持久连接)中运行。有关 PSSession 的更多信息,请参阅 about_PSSessions。以下命令使用
New-PSSession
cmdlet 创建连接到 Server01 计算机的 PSSession,并使用Invoke-Command
cmdlet在 PSSession 中运行Get-Content
命令来查看文件的内容。$s = New-PSSession -computername Server01 Invoke-Command -session $s -scriptblock { Get-Content c:\logs\pslog.txt}
启动将结果返回到本地计算机的远程作业 (AsJob)
要在远程计算机上启动作业并将命令结果返回到本地计算机,请使用 cmdlet(例如 Invoke-Command
cmdlet)的 AsJob 参数。
当您使用AsJob参数时,即使作业在远程计算机上运行,作业对象实际上也是在本地计算机上创建的。作业完成后,结果将返回到本地计算机。
您可以使用包含作业名词的 cmdlet(作业 cmdlet)来管理任何 cmdlet 创建的任何作业。许多具有 AsJob 参数的 cmdlet 不使用 PowerShell 远程处理,因此您甚至可以在未配置远程处理且不满足远程处理要求的计算机上使用它们。
以下命令使用
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
要获取作业的结果,请使用 Receive-Job cmdlet。由于作业结果会自动返回到作业对象所在的计算机,因此您可以使用本地 Receive-Job 命令获取结果。
以下命令使用 Receive-Job cmdlet 来获取作业的结果。它使用会话 ID 来识别作业。此命令将作业结果保存在 $results 变量中。您还可以将结果重定向到文件。
$results = Receive-Job -id 1
启动远程作业,将结果保留在远程计算机上
要在远程计算机上启动作业并将命令结果保留在远程计算机上,请使用 Invoke-Command
cmdlet 在远程计算机上运行 Start-Job
命令。您可以使用此方法在多台计算机上运行作业。
当您远程运行 Start-Job
命令时,将在远程计算机上创建作业对象,并在远程计算机上维护作业结果。从工作的角度来看,所有操作都是本地的。您只需远程运行命令来管理远程计算机上的本地作业。
使用
Invoke-Command
cmdlet 在远程计算机上运行Start-Job
命令。此命令需要 PSSession(持久连接)。如果使用
Invoke-Command
的ComputerName 参数建立临时连接,则在返回作业对象时,Invoke-Command
命令被认为已完成。结果,临时连接被关闭,作业被取消。以下命令使用
New-PSSession
cmdlet 创建连接到 Server01 计算机的 PSSession。该命令将 PSSession 保存在$s
变量中。$s = New-PSSession -computername Server01
下一个命令使用
Invoke-Command
cmdlet 在 PSSession 中运行Start-Job
命令。Start-Job
命令和Get-Eventlog
命令用大括号括起来。Invoke-Command -session $s -scriptblock { Start-Job -scriptblock {Get-Eventlog system}}
结果类似于以下示例输出。
Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 Job2 Running True Localhost Get-Eventlog system
当您远程运行
Start-Job
命令时,Invoke-Command
返回的作业对象类型与Start-Job
返回的作业对象类型相同。您可以将作业对象保存在变量中,也可以使用 Get-Job 命令来获取作业。请注意,Location 属性的值显示该作业在本地计算机(称为“LocalHost”)上运行,即使该作业在 Server01 计算机上运行也是如此。由于作业对象是在 Server01 计算机上创建的,并且该作业在同一台计算机上运行,因此它被视为本地后台作业。
要管理远程作业,请使用Job cmdlet。由于作业对象位于远程计算机上,因此您需要运行远程命令来获取、停止、等待或检索作业结果。
要查看作业是否已完成,请使用
Invoke-Command
命令在连接到 Server01 计算机的 PSSession 中运行Get-Job
命令。Invoke-Command -session $s -scriptblock {Get-Job}
该命令返回一个作业对象。作业对象的 State 属性显示命令已成功完成。
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 2 Job2 Completed True LocalHost Get-Eventlog system
要获取作业的结果,请使用
Invoke-Command
cmdlet 在连接到 Server01 计算机的 PSSession 中运行Receive-Job
命令。以下命令使用 Receive-Job cmdlet 来获取作业的结果。它使用会话 ID 来识别作业。此命令将作业结果保存在
$results
变量中。它使用 Receive-Job 的 Keep 参数将结果保存在远程计算机上的作业缓存中。$results = Invoke-Command -session $s -scriptblock { Receive-Job -SessionId 2 -Keep }
您还可以将结果重定向到本地或远程计算机上的文件。以下命令使用重定向运算符将结果保存在 Server01 计算机上的文件中。
Invoke-Command -session $s -command { Receive-Job -SessionId 2 > c:\logs\pslog.txt }
如何作为独立进程运行
如前所述,当父会话终止时,所有正在运行的子作业及其子进程都将终止。您可以在本地计算机上使用远程处理来运行未附加到当前 PowerShell 会话的作业。
在本地计算机上创建新的 PowerShell 会话。使用 Invoke-Command
在此会话中启动作业。 Invoke-Command
允许您断开远程会话并终止父会话。稍后,您可以启动新的 PowerShell 会话并连接到之前断开连接的会话以恢复监视作业。但是,当会话终止时,返回到原始 PowerShell 会话的任何数据都会丢失。重新连接时,仅返回断开连接后生成的新数据对象。
# Create remote session on local machine
PS> $session = New-PSSession -cn localhost
# Start remote job
PS> $job = Invoke-Command -Session $session -ScriptBlock { 1..60 | % { sleep 1; "Output $_" } } -AsJob
PS> $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Running True localhost 1..60 | % { sleep 1; ...
# Disconnect the job session
PS> Disconnect-PSSession $session
Id Name Transport ComputerName ComputerType State ConfigurationName Availability
-- ---- --------- ------------ ------------ ----- ----------------- ------------
1 Runspace1 WSMan localhost RemoteMachine Disconnected Microsoft.PowerShell None
PS> $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Disconnected True localhost 1..60 | % { sleep 1;
# Reconnect the session to a new job object
PS> $jobNew = Receive-PSSession -Session $session -OutTarget Job
PS> $job | Wait-Job | Receive-Job
Output 9
Output 10
Output 11
...
对于本示例,作业仍附加到父 PowerShell 会话。但是,父会话不是运行 Invoke-Command
的原始 PowerShell 会话。
参见
- 关于乔布斯
- 关于职位详情
- about_Remote
- about_Remote_Variables
- Invoke-Command
- Get-Job
- Remove-Job
- Start-Job
- Stop-Job
- Wait-Job
- 输入-PSSession
- 退出-PSSession
- 新 PS 会话
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag