启动 Windows PowerShell 后台作业。

语法

Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

说明

Start-Job cmdlet 在本地计算机上启动 Windows PowerShell 后台作业。

Windows PowerShell 后台作业“在后台”运行命令,而不与当前会话进行交互。启动后台作业时,会立即返回一个作业对象,即使该作业需要较长时间才能完成。您可以在作业运行的同时继续在此会话中工作,而不会产生中断。

作业对象包含作业的有用信息,但不包含作业结果。作业完成时,请使用 Receive-Job cmdlet 获取作业的结果。有关后台作业的详细信息,请参阅 about_Jobs。

若要在远程计算机上运行后台作业,请使用 AsJob 参数(该参数可在很多 cmdlet 中使用),或者使用 Invoke-Command cmdlet 在远程计算机上运行 Start-Job 命令。有关详细信息,请参阅 about_Remote_Jobs。

参数

-ArgumentList <Object[]>

指定由 FilePath 参数指定的脚本的实际参数(形式参数的值)。

由于跟在 ArgumentList 参数名称之后的所有值都被解释为 ArgumentList 的值,因此 ArgumentList 参数应为命令中的最后一个参数。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Authentication <AuthenticationMechanism>

指定用于对用户的凭据进行身份验证的机制。有效值为 Default、Basic、Credssp、Digest、Kerberos、Negotiate 和 NegotiateWithImplicitCredential。默认值为 Default。

CredSSP 身份验证仅在 Windows Vista、Windows Server 2008 和更高版本的 Windows 中可用。

有关该参数的值的信息,请参阅 MSDN 中 System.Management.Automation.Runspaces.AuthenticationMechanism 枚举的说明。

注意:在凭据安全服务提供程序 (CredSSP) 身份验证中,用户凭据传递到远程计算机中以进行验证,这种验证用于要求对多个资源(例如访问远程网络共享)进行验证的命令。此机制增加了远程操作的安全风险。如果远程计算机的安全受到威胁,则传递给该计算机的凭据可用于控制网络会话。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

false

是否接受通配符?

false

-Credential <PSCredential>

指定有权执行此操作的用户帐户。默认值为当前用户。

键入用户名,如“User01”或“Domain01\User01”;或输入 PSCredential 对象,如 Get-Credential cmdlet 输入的一个 PSCredential 对象。

是否为必需?

false

位置?

named

默认值

Current user

是否接受管道输入?

false

是否接受通配符?

false

-FilePath <string>

将指定本地脚本作为后台作业运行。输入脚本的路径和文件名,或将脚本路径通过管道传递给 Start-Job。脚本必须位于本地计算机上或者本地计算机能够访问的目录中。

使用此参数时,Windows PowerShell 将指定脚本文件的内容转换为脚本块,并将该脚本块作为后台作业运行。

是否为必需?

false

位置?

1

默认值

是否接受管道输入?

false

是否接受通配符?

false

-InitializationScript <scriptblock>

指定在作业开始前运行的命令。用大括号 ({ }) 括起命令以形成脚本块。

使用此参数可以准备运行作业的会话。例如,可以使用它将函数、管理单元和模块添加到会话中。

是否为必需?

false

位置?

2

默认值

是否接受管道输入?

false

是否接受通配符?

false

-InputObject <psobject>

指定命令的输入。请输入包含对象的变量,或者键入可生成对象的命令或表达式。

在 ScriptBlock 参数的值中,使用 $input 自动变量可表示输入对象。

是否为必需?

false

位置?

named

默认值

是否接受管道输入?

true (ByValue)

是否接受通配符?

false

-Name <string>

为新作业指定一个友好名称。可以使用该名称向其他作业 cmdlet(如 Stop-Job)标识该作业。

默认友好名称为 Job#,其中“#”是针对每个作业递增的序号。

是否为必需?

false

位置?

named

默认值

Job<number>

是否接受管道输入?

true (ByPropertyName)

是否接受通配符?

false

-RunAs32

在 32 位进程中运行作业。

使用此参数可强制作业在 64 位操作系统上的 32 位进程中运行。

是否为必需?

false

位置?

named

默认值

False

是否接受管道输入?

false

是否接受通配符?

false

-ScriptBlock <scriptblock>

指定要在后台作业中运行的命令。用大括号 ({ }) 括起命令以形成脚本块。此参数是必需的。

是否为必需?

true

位置?

1

默认值

是否接受管道输入?

false

是否接受通配符?

false

<CommonParameters>

此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.

输入和输出

输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。

输入

System.String

可以将文件路径通过管道传递给 Start-Job。

输出

System.Management.Automation.RemotingJob

Start-Job 返回一个表示它所启动的作业的对象。

说明

为了在后台运行,Start-Job 在当前会话中其自己的会话中运行。当您使用 Invoke-Command cmdlet 在远程计算机上的会话中运行 Start-Job 命令时,Start-Job 将在远程会话中的会话中运行。

示例 1

C:\PS>start-job -scriptblock {get-process}

C:\PS> start-job -command "get-process"

Id    Name  State    HasMoreData  Location   Command
---   ----  -----    -----------  --------   -------
1     Job1  Running  True         localhost  get-process

说明
-----------
此命令启动一个运行 Get-Process 命令的后台作业。此命令返回一个包含有关作业的信息的作业对象。命令提示符会立即返回,这样当作业在后台运行时,您可以在会话中工作。






示例 2

C:\PS>$jobWRM = invoke-command -computerName (get-content servers.txt) -scriptblock {get-service winrm} -jobname WinRM -throttlelimit 16 -AsJob

说明
-----------
此命令使用 Invoke-Command cmdlet 及其 AsJob 参数,启动一个在多台计算机上运行“get-service winrm”命令的后台作业。由于此命令在一台网络通信异常繁忙的服务器上运行,因此使用 Invoke-Command 的 ThrottleLimit 参数将并发命令的最多数量限制在 16。

此命令使用 ComputerName 参数来指定运行作业的计算机。ComputerName 参数的值是一个 Get-Content 命令,该命令获取 Servers.txt 文件(包含域中计算机名称的文件)中的文本。

该命令使用 ScriptBlock 参数来指定命令,并使用 JobName 参数来指定作业的友好名称。






示例 3

C:\PS>$j = start-job -scriptblock {get-eventlog -log system} -credential domain01\user01

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : get-eventlog -log system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $j.JobStateInfo.state
Completed

C:\PS> $results = receive-job -job $j

C:\PS> $results
Index Time          Type        Source                EventID Message
----- ----          ----        ------                ------- -------
84366 Feb 18 19:20  Information Service Control M...     7036 The description...
84365 Feb 18 19:16  Information Service Control M...     7036 The description...
84364 Feb 18 19:10  Information Service Control M...     7036 The description...
...

说明
-----------
这些命令管理从事件查看器的系统日志中获取所有事件的后台作业。该作业在本地计算机上运行。

第一个命令使用 Start-Job cmdlet 来启动作业。它使用 Credential 参数指定有权在计算机上运行作业的用户的用户帐户。然后,该命令将 Start-Job 返回的作业对象保存在 $j 变量中。

此时,您可以在作业完成时恢复其他工作。

第二个命令使用管道运算符 (|) 将 $j 中的作业对象传递到 Format-List cmdlet。Format-List 命令使用值为 *(全部)的 Property 参数在列表中显示作业对象的所有属性。

第三个命令显示 JobStateInfo 属性的值。该值包含作业的状态。

第四条命令使用 Receive-Job cmdlet 来获取作业的结果。它将结果存储在 $results 变量中。

最后一个命令显示 $results 变量的内容。






示例 4

C:\PS>start-job -filepath c:\scripts\sample.ps1

说明
-----------
此命令将 Sample.ps1 脚本作为后台作业运行。






示例 5

C:\PS>start-job -name WinRm -scriptblock {get-process winrm}

说明
-----------
此命令运行一个获取本地计算机上的 WinRM 进程的后台作业。该命令使用 ScriptBlock 参数来指定在后台作业中运行的命令。它使用 Name 参数为新作业指定一个友好名称。






示例 6

C:\PS>start-job -name GetMappingFiles -initializationScript {import-module MapFunctions} -scriptblock {Get-Map -name * | set-content D:\Maps.tif} -runAs32

说明
-----------
此命令启动一个作业来收集大量数据并将数据保存在 .tif 文件中。此命令使用 InitializationScript 参数运行导入所需模块的脚本块。它还将使用 RunAs32 参数在 32 位进程中运行作业,即使计算机使用 64 位操作系统也如此。






另请参阅




目录