主题
  about_Job_Details

简短说明
  提供有关本地和远程计算机上的后台作业的详细信息。
    
详细说明
   本主题说明后台作业的概念,并提供有关后台作业如何在 Windows PowerShell 中工作的技术信息。

   本主题是对 about_Jobs 和 about_Remote_Jobs 主题的补充。

   重要说明:通过使用 Start-Job 或使用 Invoke-Command 的 AsJob 参数启动的后台作业依赖于 
   	     Windows PowerShell 远程处理基础结构。若要使用这些功能,即使后台作业只在本地
	     计算机上运行,也必须为 Windows PowerShell 配置远程处理。有关详细信息,请参阅 
   	     about_Remote_Requirements。


 关于后台作业
    后台作业异步运行命令或表达式。它可运行 cmdlet、函数、脚本或任何其他基于命令的任务。它用于运
    行需要较长时间的命令,不过,您可以使用它在后台运行任何命令。

    在运行同步命令时,在命令完成之前,都禁止显示 Windows PowerShell 命令提示符。但后台作业不禁
    止显示 Windows PowerShell 提示符。用于启动后台作业的命令会返回一个作业对象。提示符会立即返
    回,这样,在后台作业运行时可以处理其他任务。
  
    但是,启动后台作业后,即使该作业运行速度很快,也不会立即获得结果。返回的作业对象包含作业的
    有用信息,但不包含作业结果。必须运行一个单独的命令才能获得作业结果。此外,还可以运行用于
    停止作业、等待作业完成以及删除作业的命令。

    若要使后台作业的计时独立于其他命令,每个后台作业都应在自己的 Windows PowerShell 环境("会
    话")中运行。不过,这可以是只为运行作业然后销毁作业而创建的临时连接,也可以是可用于运行多个相
    关作业或命令的持续会话 (PSSession)。


 使用作业 Cmdlet
    使用 Start-Job 命令可以在本地计算机上启动后台作业。Start-Job 返回作业对象。通过使用 Get-
    Job cmdlet,还可以获取表示在本地计算机上启动的作业的对象。

    若要获取作业结果,请使用 Receive-Job 命令。如果作业未完成,则 Receive-Job 返回部分结果。
    此外,还可以使用 Wait-Job cmdlet 禁止显示命令提示符,直到在会话中启动的一个或全部作业完成。

    若要停止后台作业,请使用 Stop-Job cmdlet。若要删除作业,请使用 Remove-Job cmdlet。

    有关这些 cmdlet 如何工作的详细信息,请参阅每个 cmdlet 的帮助主题和 about_Jobs。

 
 在远程计算机上启动后台作业
    可以在本地或远程计算机上创建和管理后台作业。若要远程运行后台作业,请使用 cmdlet(如 Invoke-
    Command)的 AsJob 参数,或使用 Invoke-Command cmdlet 远程运行 Start-Job 命令。此外,
    还可以在交互式会话中启动后台作业。

    有关远程后台作业的详细信息,请参阅 about_Remote_Jobs。


 子作业
    每个后台作业由一个父作业和一个或多个子作业组成。在通过使用 Start-Job 或 Invoke-Command 
    的 AsJob 参数启动的作业中,父作业是管理性作业。它不运行任何命令,也不返回任何结果。命令实际
    上是由子作业运行的。(通过其他 cmdlet 启动的作业的工作方式可能有所不同。)

    子作业存储在父作业对象的 ChildJobs 属性中。ChildJobs 属性可包含一个或多个子作业对象。子作
    业对象的名称、ID 和实例 ID 不同于父作业,因此,可以分别管理父作业和子作业,也可以将它们作为一
    个整体进行管理。

    若要查看作业中的父作业和子作业,请使用 Get-Job cmdlet 获取父作业,然后通过管道将父作业传递
    给用于显示对象的 Name 和 ChildJobs 属性的 Format-List 命令,如以下命令所示。

        C:\PS> get-job | format-list -property Name, ChildJobs

        Name          : Job1
        ChildJobs     : {Job2}


    也可以对子作业使用 Get-Job 命令,如以下命令所示:

        C:\PS> get-job job2

        Id    Name   State      HasMoreData   Location    Command
        --    ----   -----      -----------   --------    -------
        2     Job2   Completed  True          localhost   get-process

    子作业的配置取决于启动该作业时所用的命令。

       -- 使用 Start-Job 在本地计算机上启动作业时,该作业由管理性父作业和运行命令的
          子作业组成。

       -- 如果使用 Invoke-Command 的 AsJob 参数在一台或多台计算机上启动作业,则作业由管理性
          父作业和子作业(每台计算机上运行的每个作业对应于一个子作业)组成。

       -- 如果使用 Invoke-Command 在一台或多台远程计算机上运行 Start-Job 命令,则结果与在每
          台远程计算机上运行本地命令的结果相同。该命令为每台计算机返回一个作业对象。作业对象由管理
          性父作业和一个运行命令的子作业组成。
    
    父作业表示所有子作业。在管理父作业时,同时也在管理关联的子作业。例如,如果停止父作业,
    则会停止所有子作业。如果获取父作业的结果,则会获取所有子作业的结果。

    不过,也可以单独管理子作业。如果希望调查作业问题,或者只获取通过 Invoke-Command 的 AsJob 
    参数启动的诸多子作业中的一个子作业的结果,这非常有用。(倒引号 [`] 是继续符。)

    以下命令使用 Invoke-Command 的 AsJob 参数在本地计算机和两台远程计算机上启动后台作业。此命
    令将作业保存在 $j 变量中。

        C:\PS> $j = invoke-command -computername localhost, Server01, Server02 `
               -command {get-date} -AsJob

    在显示 $j 中的作业的 Name 和 ChildJob 属性时,结果显示该命令返回了一个作业对象,其中有三个
    子作业(每台计算机一个子作业)。

        C:\PS> $j | format-list name, childjobs

        Name      : Job3
        ChildJobs : {Job4, Job5, Job6}


    在显示父作业时,结果显示该作业失败。

        C:\PS> $j

        Id   Name    State   HasMoreData     Location             Command
        --   ----    -----   -----------     --------             -------
        1    Job3    Failed  True            localhost,server... get-date


    但是,对每个子作业运行 Get-Job 命令时,结果显示只有一个子作业失败。

        PS C:\ps-test> get-job job4, job5, job6

        Id   Name   State      HasMoreData     Location           Command
        --   ----   -----      -----------     --------           -------
        4    Job4   Completed  True            localhost          get-date
        5    Job5   Failed     False           Server01           get-date
        6    Job6   Completed  True            Server02           get-date


    
    若要获取所有子作业的结果,请使用 Receive-Job cmdlet 获取父作业的结果。不过,也可以获取特定
    子作业的结果,如以下命令所示。

        C:\PS> receive-job -job6 -keep | format-table ComputerName, DateTime -auto

        ComputerName DateTime
        ------------ --------
        Server02     Thursday, March 13, 2008 4:16:03 PM

    使用 Windows PowerShell 后台作业的子作业功能,可以在更大程度上控制运行的作业。


另请参阅
    about_Jobs
    about_Remote_Jobs
    about_Remote
    Invoke-Command
    Start-Job
    Get-Job
    Wait-Job
    Stop-Job
    Remove-Job
    New-PSSession
    Enter-PSSession
    Exit-PSSession




目录