[玩转系统] Start-Job (Microsoft.PowerShell.Core)
作者:精品下载站 日期:2024-12-14 02:14:08 浏览:13 分类:玩电脑
Start-Job (Microsoft.PowerShell.Core)
Start-Job
模块 :Microsoft.PowerShell.Core启动 PowerShell 后台作业。
句法
Start-Job
[-Name <String>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-DefinitionName] <String>
[[-DefinitionPath] <String>]
[[-Type] <String>]
[-WorkingDirectory <String>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
[-FilePath] <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
-LiteralPath <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
描述
Start-Job
cmdlet 在本地计算机上启动 PowerShell 后台作业。
PowerShell 后台作业运行命令而不与当前会话交互。当您启动后台作业时,作业对象会立即返回,即使该作业需要较长时间才能完成。当作业运行时,您可以继续在会话中工作而不会中断。
作业对象包含有关作业的有用信息,但不包含作业结果。作业完成后,使用 Receive-Job cmdlet 获取作业结果。有关后台作业的更多信息,请参阅 about_Jobs。
要在远程计算机上运行后台作业,请使用许多 cmdlet 上提供的 AsJob 参数,或使用 Invoke-Command
cmdlet 运行 Start-远程计算机上的作业命令。有关详细信息,请参阅 about_Remote_Jobs。
从 PowerShell 3.0 开始,Start-Job
可以启动自定义作业类型的实例,例如计划作业。有关如何使用 Start-Job
启动自定义类型的作业的信息,请参阅作业类型功能的帮助文档。
从 PowerShell 6.0 开始,您可以使用与号 (&
) 后台运算符启动作业。后台算子的功能与Start-Job
类似。启动作业的两种方法都会创建一个 PSRemotingJob 作业对象。有关使用与号 (&
) 的更多信息,请参阅 about_Operators。
PowerShell 7 引入了 WorkingDirectory 参数,用于指定后台作业的初始工作目录。如果未指定该参数,Start-Job
默认为启动作业的调用者的当前工作目录。
笔记
如果 PowerShell 托管在其他应用程序(例如 PowerShell Azure Functions)中,则不支持使用 Start-Job
创建进程外后台作业。
这是设计使然,因为 Start-Job
依赖于 $PSHOME
下可用的 pwsh
可执行文件来启动进程外后台作业,但是当应用程序托管 PowerShell 时,它会直接使用 PowerShell NuGet SDK 包,并且不会附带 pwsh
。
该场景中的替代品是模块 ThreadJob 中的 Start-ThreadJob
。
示例
示例 1:启动后台作业
此示例启动在本地计算机上运行的后台作业。
Start-Job -ScriptBlock { Get-Process -Name pwsh }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name pwsh
Start-Job
使用 ScriptBlock 参数将 Get-Process
作为后台作业运行。 Name 参数指定查找 PowerShell 进程 pwsh
。当作业在后台运行时,将显示作业信息并且 PowerShell 返回提示。
要查看作业的输出,请使用 Receive-Job cmdlet。例如,接收作业 -Id 1
。
示例2:使用后台操作符启动后台作业
此示例使用与号 (&
) 后台运算符在本地计算机上启动后台作业。该作业获得与示例 1 中的 Start-Job
相同的结果。
Get-Process -Name pwsh &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 Job5 BackgroundJob Running True localhost Microsoft.PowerShell.Man...
Get-Process
使用 Name 参数指定 PowerShell 进程 pwsh
。与号 (&
) 将命令作为后台作业运行。当作业在后台运行时,将显示作业信息并且 PowerShell 返回提示。
要查看作业的输出,请使用 Receive-Job cmdlet。例如,Receive-Job -Id 5
。
示例 3:使用 Invoke-Command 启动作业
此示例在多台计算机上运行作业。该作业存储在变量中,并通过在 PowerShell 命令行上使用变量名称来执行。
$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob
创建使用 Invoke-Command
的作业并将其存储在 $jobWRM
变量中。 Invoke-Command
使用ComputerName 参数指定运行作业的计算机。 Get-Content
从 C:\Servers.txt
文件获取服务器名称。
ScriptBlock 参数指定Get-Service
获取WinRM 服务的命令。 JobName 参数指定作业的友好名称,WinRM。 ThrottleLimit 参数将并发命令的数量限制为 16。AsJob 参数启动在服务器上运行命令的后台作业。
示例4:获取职位信息
此示例获取有关作业的信息并显示在本地计算机上运行的已完成作业的结果。
$j = Start-Job -ScriptBlock { Get-WinEvent -Log System } -Credential Domain01\User01
$j | Select-Object -Property *
State : Completed
HasMoreData : True
StatusMessage :
Location : localhost
Command : Get-WinEvent -Log System
JobStateInfo : Completed
Finished : System.Threading.ManualResetEvent
InstanceId : 27ce3fd9-40ed-488a-99e5-679cd91b9dd3
Id : 18
Name : Job18
ChildJobs : {Job19}
PSBeginTime : 8/8/2019 14:41:57
PSEndTime : 8/8/2019 14:42:07
PSJobTypeName : BackgroundJob
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
Information : {}
Start-Job
使用 ScriptBlock 参数运行指定 Get-WinEvent
的命令来获取 System 日志。 Credential 参数指定有权在计算机上运行作业的域用户帐户。作业对象存储在 $j
变量中。
$j
变量中的对象沿着管道发送到 Select-Object
。 Property 参数指定星号 (*
) 以显示作业对象的所有属性。
示例 5:将脚本作为后台作业运行
在此示例中,本地计算机上的脚本作为后台作业运行。
Start-Job -FilePath C:\Scripts\Sample.ps1
Start-Job
使用FilePath 参数指定存储在本地计算机上的脚本文件。
示例 6:使用后台作业获取进程
此示例使用后台作业按名称获取指定进程。
Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }
Start-Job
使用Name 参数指定友好的作业名称PShellJob。 ScriptBlock 参数指定 Get-Process
以获取名为 PowerShell 的进程。
示例 7:使用后台作业收集和保存数据
此示例启动一个收集大量地图数据的作业,然后将其保存在 .tif
文件中。
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module -Name MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif }
Start-Job
使用Name 参数指定友好的作业名称GetMappingFiles。 InitializationScript 参数运行导入 MapFunctions 模块的脚本块。 ScriptBlock 参数运行 Get-Map
和 Set-Content
将数据保存在 Path 参数指定的位置。
示例 8:将输入传递给后台作业
此示例使用 $input
自动变量来处理输入对象。使用 Receive-Job 查看作业的输出。
Start-Job -ScriptBlock { Get-Content -Path $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep
Server01
Server02
Server03
Server04
Start-Job
使用 ScriptBlock 参数通过 $input
自动变量运行 Get-Content
。 $input
变量从 InputObject 参数获取对象。 Receive-Job
使用Name 参数指定作业并输出结果。 Keep 参数保存作业输出,以便在 PowerShell 会话期间再次查看。
示例 9:设置后台作业的工作目录
WorkingDirectory 允许您为作业指定一个备用目录,您可以从中运行脚本或打开文件。在此示例中,后台作业指定与当前目录位置不同的工作目录。
PS C:\Test> Start-Job -WorkingDirectory C:\Test\Scripts { $PWD } | Receive-Job -AutoRemoveJob -Wait
Path
----
C:\Test\Scripts
此示例的当前工作目录是C:\Test
。 Start-Job
使用WorkingDirectory 参数指定作业的工作目录。 ScriptBlock 参数使用 $PWD
显示作业的工作目录。 Receive-Job
显示后台作业的输出。 AutoRemoveJob 删除作业,Wait 抑制命令提示符,直到收到所有结果。
示例 10:使用 ArgumentList 参数指定数组
此示例使用 ArgumentList 参数来指定参数数组。该数组是以逗号分隔的进程名称列表。
Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name $args
Start-Job
cmdlet 使用ScriptBlock 参数来运行命令。 Get-Process
使用Name 参数指定自动变量$args
。 ArgumentList 参数将进程名称数组传递给 $args
。进程名称 powershell、pwsh 和 notepad 是在本地计算机上运行的进程。
要查看作业的输出,请使用 Receive-Job cmdlet。例如,接收作业 -Id 1
。
示例 11:在 Windows PowerShell 5.1 中运行作业
此示例使用值为 5.1 的 PSVersion 参数在 Windows PowerShell 5.1 会话中运行作业。
$PSVersionTable.PSVersion
Major Minor Patch PreReleaseLabel BuildLabel
----- ----- ----- --------------- ----------
7 0 0 rc.1
$job = Start-Job -ScriptBlock { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job -Job $job
Major Minor Build Revision
----- ----- ----- --------
5 1 14393 3383
参数
-ArgumentList
为 FilePath 参数指定的脚本或使用 ScriptBlock 参数指定的命令指定参数或参数值的数组。
参数必须作为一维数组参数传递到ArgumentList。例如,以逗号分隔的列表。有关 ArgumentList 行为的更多信息,请参阅 about_Splatting。
类型 :Object[]
别名:Args
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-Authentication
指定用于验证用户凭据的机制。
该参数可接受的值如下:
- 默认
- 基本的
- 信用证
- 消化
- 克伯罗斯
- 谈判
- 使用隐式凭证进行协商
默认值为默认。
CredSSP 身份验证仅在 Windows Vista、Windows Server 2008 和更高版本的 Windows 操作系统中可用。
有关此参数值的更多信息,请参阅 AuthenticationMechanism。
警告
凭据安全支持提供程序 (CredSSP) 身份验证将用户的凭据传递到远程计算机进行身份验证,专为需要对多个资源进行身份验证的命令(例如访问远程网络共享)而设计。这种机制增加了远程操作的安全风险。如果远程计算机受到威胁,则传递给它的凭据可用于控制网络会话。
类型 :AuthenticationMechanism
接受的值:默认、基本、协商、NegotiateWithImplicitCredential、Credssp、摘要、Kerberos
位置:命名
默认值:默认
必需的:False
接受管道输入:False
接受通配符:False
-Credential
指定有权执行此操作的用户帐户。如果未指定Credential 参数,该命令将使用当前用户的凭据。
输入用户名,例如 User01 或 Domain01\User01,或输入由 Get-Credential cmdlet。如果您键入用户名,系统会提示您输入密码。
凭证存储在 PSCredential 对象中,密码存储为 SecureString。
笔记
有关 SecureString 数据保护的更多信息,请参阅 SecureString 的安全性如何?。
类型 :PS凭证
位置:命名
默认值:当前用户
必需的:False
接受管道输入:False
接受通配符:False
-DefinitionName
指定此 cmdlet 启动的作业的定义名称。使用此参数启动具有定义名称的自定义作业类型,例如计划作业。
当您使用 Start-Job
启动计划作业的实例时,该作业会立即启动,无论作业触发器或作业选项如何。生成的作业实例是计划作业,但它不会像触发的计划作业那样保存到磁盘。您无法使用 Start-Job
的 ArgumentList 参数为计划作业中运行的脚本的参数提供值。
此参数是在 PowerShell 3.0 中引入的。
类型 :String
位置:0
默认值:None
必需的:True
接受管道输入:False
接受通配符:False
-DefinitionPath
指定此 cmdlet 启动的作业的定义路径。输入定义路径。 DefinitionPath 和 DefinitionName 参数值的串联是作业定义的完全限定路径。使用此参数启动具有定义路径的自定义作业类型,例如计划作业。
对于计划作业,DefinitionPath 参数的值为 $HOME\AppData\Local\Windows\PowerShell\ScheduledJob
。
此参数是在 PowerShell 3.0 中引入的。
类型 :String
位置:1
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-FilePath
指定 Start-Job
作为后台作业运行的本地脚本。输入脚本的路径和文件名,或使用管道将脚本路径发送到 Start-Job
。该脚本必须位于本地计算机上或本地计算机可以访问的文件夹中。
使用此参数时,PowerShell 会将指定脚本文件的内容转换为脚本块,并将该脚本块作为后台作业运行。
类型 :String
位置:0
默认值:None
必需的:True
接受管道输入:False
接受通配符:False
-InitializationScript
指定作业开始之前运行的命令。要创建脚本块,请将命令括在大括号 ({}
) 中。
使用此参数准备运行作业的会话。例如,您可以使用它向会话添加函数、管理单元和模块。
类型 :ScriptBlock
位置:1
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-InputObject
指定命令的输入。输入包含对象的变量,或键入生成对象的命令或表达式。
在 ScriptBlock 参数的值中,使用 $input
自动变量来表示输入对象。
PS对象
位置:命名
默认值:None
必需的:False
接受管道输入:True
接受通配符:False
-LiteralPath
指定此 cmdlet 作为后台作业运行的本地脚本。输入本地计算机上脚本的路径。
Start-Job
使用与键入的 LiteralPath 参数完全相同的值。没有字符被解释为通配符。如果路径包含转义字符,请将其用单引号引起来。单引号告诉 PowerShell 不要将任何字符解释为转义序列。
String
别名:PSPath, LP
位置:命名
默认值:None
必需的:True
接受管道输入:False
接受通配符:False
-Name
为新作业指定一个友好名称。您可以使用该名称来向其他作业 cmdlet(例如 Stop-Job
cmdlet)标识该作业。
默认友好名称为 Job#
,其中 #
是针对每个作业递增的序号。
String
位置:命名
默认值:None
必需的:False
接受管道输入:True
接受通配符:False
-PSVersion
指定用于运行作业的 PowerShell 版本。当PSVersion 的值为5.1 时,作业在Windows PowerShell 5.1 会话中运行。对于任何其他值,作业将使用当前版本的 PowerShell 运行。
此参数是在 PowerShell 7 中添加的,仅适用于 Windows。
类型 :版本
位置:命名
默认值:None
必需的:False
接受管道输入:False
接受通配符:False
-RunAs32
从 PowerShell 7 开始,RunAs32 参数在 64 位 PowerShell (pwsh
) 上不起作用。如果在 64 位 PowerShell 中指定了 RunAs32,则 Start-Job 会引发终止异常错误。要使用 RunAs32 启动 32 位 PowerShell (pwsh
) 进程,您需要安装 32 位 PowerShell。
在 32 位 PowerShell 中,RunAs32 强制作业在 32 位进程中运行,即使在 64 位操作系统上也是如此。
在 64 位版本的 Windows 7 和 Windows Server 2008 R2 上,当 Start-Job
命令包含 RunAs32 参数时,您无法使用凭据
猜你还喜欢
- 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