您的位置:首页 > 运维架构 > Shell

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

2015-05-05 15:51 141 查看
· 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 aRemote 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 Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- Job1 ·BackgroundJob ·Running ·True ·localhost ·Get-··Process To get object that represent the background jobs that were started in the current 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 ID 1 and saves it in the $job variable. $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. Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 103 4 11328 9692 56 1176 audiodg 804 14 12228 14108 100 101.74 1740 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 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 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 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 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} Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 1 Job1 BackgroundJob Failed False localhost New-Item -Path HKLM:\S... The following command uses the Reason property to find the error that caused the job to fail. $job.ChildJobs[0].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 实例八: Waiting JOB 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  powershell job