以其他方式启动三种类型的作业(即本地、远程和通用信息模型 (CIM)/Windows Management Instrumentation (WMI))中的每一种。 以下各节介绍了调用每个作业类型的特定方法。

1、本地作业

通过运行 Start-Job 启动本地作业。 提供 –ScriptBlock 参数以指定单个命令行或提供少量命令。 提供 –FilePath 参数以在后台线程上运行整个脚本

默认情况下,作业接收顺序作业标识 (ID) 编号和默认作业名称。 虽然无法更改分配的作业 ID 号,但可以使用 –Name 参数指定自定义作业名称。 通过自定义名称,可以更轻松地检索作业并在作业列表中标识该作业。

 备注

起初,作业 ID 编号似乎不是顺序的。 但是,你将在本模块的后面部分了解相关原因。

可以指定 –Credential 参数以在不同的用户帐户下运行作业。 通过其他参数,可以在特定 Windows PowerShell 版本、32 位会话和其他会话中运行命令。

下面是如何启动本地作业的示例:

PowerShell复制

Start-Job -ScriptBlock { Dir C:\ -Recurse } -Name LocalDirectory

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
2      LocalDirectory  BackgroundJob   Running       True            localhost


PS C:\> Start-Job -FilePath C:\test.ps1 -Name TestScript

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
4      TestScript      BackgroundJob   Running       True            localhost

" style="box-sizing: inherit; outline-color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; border: 0px; padding: 0px; line-height: 1.3571; display: block; position: relative;">PS C:\> Start-Job -ScriptBlock { Dir C:\ -Recurse } -Name LocalDirectory

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
2      LocalDirectory  BackgroundJob   Running       True            localhost


PS C:\> Start-Job -FilePath C:\test.ps1 -Name TestScript

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
4      TestScript      BackgroundJob   Running       True            localhost

2、远程作业

通过运行 Invoke-Command 启动 Windows PowerShell 远程作业。 这是将命令发送到远程计算机的同一命令。 添加 –AsJob 参数,以在后台运行命令。 使用 –JobName 参数指定自定义作业名称。 Invoke-Command 的所有其他参数都以相同的方式使用。 下面是一个示例:

PowerShell复制

Invoke-Command -ScriptBlock { Get-EventLog -LogName System -Newest 10 }
-ComputerName LON-DC1,LON-CL1,LON-SVR1 -AsJob -JobName RemoteLogs

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
6      RemoteLogs      RemoteJob       Running       True            LON-DC1...

" style="box-sizing: inherit; outline-color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; border: 0px; padding: 0px; line-height: 1.3571; display: block; position: relative;">PS C:\> Invoke-Command -ScriptBlock { Get-EventLog -LogName System -Newest 10 }
-ComputerName LON-DC1,LON-CL1,LON-SVR1 -AsJob -JobName RemoteLogs

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
6      RemoteLogs      RemoteJob       Running       True            LON-DC1...

 备注

–ComputerName 参数是 Invoke-Command 的参数,而不是 Get-EventLog 的参数。 该参数让本地计算机协调与指定的三台计算机的 Windows PowerShell 远程连接。 每台计算机仅接收 Get-EventLog 命令,并在本地运行,返回结果

运行 Invoke-Command 的计算机可创建和管理远程作业。 可以将该计算机称为初始计算机。 作业中的命令将传输到远程计算机,然后远程计算机运行这些命令并将结果返回到初始计算机。 初始计算机将作业的结果存储在其内存中。

3、CIM 和 WMI 作业

若要在作业中使用 CIM 命令,必须使用 Start-Job 启动作业。 下面是一个示例:

PowerShell复制

Start-Job  -ScriptBlock {Get-CimInstance -ClassName Win32_ComputerSystem}

Id     Name  PSJobTypeName  State   HasMoreData  Location   Command                  
--     ----  -------------  -----   -----------  --------   -------                  
3      Job3  BackgroundJob  Running True         localhost  Get-CimInstance -Class..

" style="box-sizing: inherit; outline-color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; border: 0px; padding: 0px; line-height: 1.3571; display: block; position: relative;">PS C:\> Start-Job  -ScriptBlock {Get-CimInstance -ClassName Win32_ComputerSystem}

Id     Name  PSJobTypeName  State   HasMoreData  Location   Command                  
--     ----  -------------  -----   -----------  --------   -------                  
3      Job3  BackgroundJob  Running True         localhost  Get-CimInstance -Class..

还可以使用 Start-Job 运行其他使用 CIM 作为作业的命令。 例如 Invoke-CimMethod。 CIM 命令没有 –AsJob 参数并不重要。 当想要将 CIM 命令作为作业运行时,只需记住使用作业命令。

通过运行 Get-WmiObject 启动 WMI 作业。 这是用于查询 WMI 实例的相同命令。 添加 –AsJob 参数以在后台线程上运行命令。 没有提供自定义作业名称的选项。 Get-WmiObject 的 Get-Help 信息针对 –AsJob 参数指出以下内容

若要将此参数用于远程计算机,必须为本地和远程计算机配置 Windows PowerShell 远程处理。 此外,在 Windows 7 和更高版本的 Windows 中,必须使用“以管理员身份运行”选项启动 Windows PowerShell

WMI 作业不要求在初始计算机或远程计算机上启用 Windows PowerShell 远程处理。 但是,它们确实要求可以在远程计算机上访问 WMI。

下面是一个示例:

PowerShell复制

Get-WmiObject -Class Win32_NTEventLogFile -ComputerName localhost,LON-DC1 -AsJob

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
10     Job10           WmiJob          Running       True            localho...

" style="box-sizing: inherit; outline-color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; border: 0px; padding: 0px; line-height: 1.3571; display: block; position: relative;">PS C:\> Get-WmiObject -Class Win32_NTEventLogFile -ComputerName localhost,LON-DC1 -AsJob

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
10     Job10           WmiJob          Running       True            localho...

4、作业对象

请注意,上述每个示例都会生成作业对象。 它表示正在运行的作业,你可以使用它监视和管理作业。