hotnet 发表于 2018-9-2 12:09:06

18. PowerShell -- Start-Job, Get-Job, Remove-Job 等

  ·         PowerShell Job Overview
  This topic explains how to run background jobs in Windows PowerShell on a
  local computer. For information about running background jobs on remote
  computers, see about_Remote_Jobs.
  When you start a background job, the command prompt returns immediately,
  even if the job takes an extended time to complete. You can continue to
  work in the session without interruption while the job runs.
  ·      PowerShell Job CMDLETS
  Start-Job:
  Starts a background job on a local computer.
  Get-Job:
  Gets the background jobs that were started in the current session.
  Receive-Job:
  Gets the results of background jobs.
  Stop-Job:
  Stops a background job.
  Wait-Job:
  Suppresses the command prompt until one or all jobs are                  complete.
  Remove-Job:
  Deletes a background job.
  Invoke-Command:
  The AsJob parameter runs any command as a background job on a
  Remote computer. You can also use Invoke-Command to run
  Any job command remotely, including a Start-Job command.

[*]  PowerShell Job 实例
  o    实例一:Start-Job -ScriptBlock {Get-Process}
  $job = Start-Job -ScriptBlock {Get-Process}
  The above command starts a background job that runs a Get-Process    command on the local computer.
  o    实例二:   PS C:\>Get-Job

  >  ------------------- -----      -------------------   -------
  Job1·BackgroundJob ·Running    ·True   ·localhost·Get-··Process
  To get object that represent the background jobs that were started in thecurrent session, use the Get-Job cmdlet. Without parameters, Get-Job returns all of the jobs that were started in the current session.

  The following command gets the job with>  $job = Get-Job -Id 1
  The job object contains the state of the job, which indicates whether the
  job has finished. A finished job has a state of "Complete" or "Failed". A
  job might also be blocked or running.
  o    实例三:   Receive-Job -Job $job
  1. The Receive-Job cmdlet returns the results of the job.

  HandlesNPM(K)    PM(K)      WS(K) VM(M)   CPU(s)   >  -------------    -----      ----- -----   ------    -- -----------
  103       4    11328       9692    56         1176 audiodg
  804      14    12228      14108   100   101.741740 CcmExec
  668       7   2672       6168   104    32.26   488 csrss
  ...
  2. Save the results of a job in a variable.

[*]  $results = Receive-Job -Job $job
  3. Save the results of the job in a file by using the redirection   operator (>) or the Out-File cmdlet.

[*]  Receive-Job -Job $job > results.txt
  4. When Receive-Job returns results, by default, it deletes those results from   the cache where job results are stored.
  C:\PS> Receive-Job -Job $job

  HandlesNPM(K)    PM(K)      WS(K) VM(M)   CPU(s)    >  -------------    -----      ----- -----   ------   -- -----------
  103       4    11328       9692    56            1176 audiodg
  804      14    12228      14108   100   101.74   1740 CcmExec
  5. To prevent Receive-Job from deleting the job results that it has returned, use the Keep parameter.
  C:\PS> Receive-Job -Job $job -Keep

  HandlesNPM(K)    PM(K)      WS(K) VM(M)   CPU(s)    >  -------------    -----      ----- -----   ------   -- -----------
  103       4    11328       9692    56            1176 audiodg
  804      14    12228      14108   100   101.74   1740 CcmExec
  o    实例四:   Wait-Job -ID 10
  The above command uses the Wait-Job cmdlet to wait for a job with
  ID 10.
  As a result, the Windows PowerShell prompt is suppressed until the job
  is completed.
  You can also wait for a predetermined period of time. This command uses
  the Timeout parameter to limit the wait to 120 seconds. When the time
  expires, the command prompt returns, but the job continues to run in the
  background.
  Wait-Job -ID 10 -Timeout 120
  o    实例五:      STOPPING A JOB
  $job = Start-Job -ScriptBlock {Get-EventLog -Log System}
  $job | Stop-Job
  To stop a background job, use the Stop-Job cmdlet. The above command
  starts a job to get every entry in the System event log. It saves the job
  object in the $job variable.
  The above command stops the job. It uses a pipeline operator (|) to
  send the job in the $job variable to Stop-Job.
  o    实例六:   DELETING A JOB
  To delete a background job, use the Remove-Job cmdlet. The following
  command deletes the job in the $job variable.
  Remove-Job -Job $job
  o    实例七:   INVESTIGATING A FAILED JOB
  To find out why a job failed, use the Reason subproperty of the job object.
  The following command starts a job without the required credentials. It
  saves the job object in the $job variable.
  $job = Start-Job -ScriptBlock
  {New-Item -Path HKLM:\Software\MyCompany}

  >  --   ----------------- -----    -------------------   -------
  1    Job1BackgroundJob Failed   False      localhostNew-Item -Path HKLM:\S...
  The following command uses the Reason property to find the error that
  caused the job to fail.
  $job.ChildJobs.JobStateInfo.Reason
  In this case, the job failed because the remote computer required explicit
  credentials to run the command. The value of the Reason property is:
  Connecting to remote server failed with the following error
  message : Access is denied.
  o    实例八:   WaitingJOB
  Write-Host "Waiting job..."
  Get-Job|Wait-Job|Remove-Job
  SEE ALSO
  about_Remote_Jobs
  about_Job_Details
  about_Remote
  about_PSSessions
  Start-Job
  Get-Job
  Receive-Job
  Stop-Job
  Wait-Job
  Remove-Job
  Invoke-Command
  参考:
  https://technet.microsoft.com/zh-cn/library/hh847783(v=wps.620).aspx#
  https://technet.microsoft.com/en-us/library/dd347692.aspx

页: [1]
查看完整版本: 18. PowerShell -- Start-Job, Get-Job, Remove-Job 等