PowerShell 1 절 돌리 기-[백 스테이지 퀘 스 트 처리]-기술&공유

9987 단어 powershell
개술
 여러분 들 이 백 스테이지 작업 처리 가 낯 설 지 않 을 것 이 라 고 믿 습 니 다.예 를 들 어 Net 의 백 스테이지 스 레 드 처리,자바 의 스 레 드 처리 등 입 니 다.
그리고 우리 가 PowerShell 이라는 강력 한 도 구 를 사용 할 때 배경 작업 을 어떻게 시작 하 는 지,그리고 이 작업 을 어떻게 처리 하 는 지,이 편 은 PowerShell 배경 작업 처 리 를 알려 줄 것 입 니 다.
목차
  • 1.백 스테이지 미 션 은 언제 사용 하나
  • 2.백 스테이지 미 션 은 주로 어떤 장면 에 사 용 됩 니까?
  • 3.PowerShell 에서 백 스테이지 퀘 스 트 를 어떻게 여 는 지
  • Start-Job
  • Invoke-Command -AsJob

  • 4.Job 처리
  • Wait-Job
  • Remove-Job

  • 5.Start-Job 참조
  • 6.인용&확장 읽 기

  • 1.백 스테이지 미 션 은 언제 사용 하나                                        
    로 컬 기계 가 하나의 동작 을 실행 해 야 할 때 이 동작 은 오 랜 시간 이 걸 리 고 기 계 는 이 시간 동안 기다 릴 수 밖 에 없 으 며 우 리 는 기계 가 기다 리 는 이 시간 안에 우 리 는 다른 일 을 할 수 있 기 를 바란다.
    이렇게 하면 우 리 는 백 스테이지 임무 로 위 에서 만난 문 제 를 해결 할 수 있다.
    2.백 스테이지 미 션 은 주로 어떤 장면 에 사 용 됩 니까?                                     
    (1)파일 을 여러 대의 원 격 기기 에 복사 하면 여러 작업 을 열 어 병렬 복사 할 수 있다.
    (2)여러 대의 원 격 기기 가 동시에 파일 을 설치 하면 여러 작업 을 시작 하여 병행 설치 할 수 있다.
    등등
    3.PowerShell 에서 백 스테이지 퀘 스 트 를 어떻게 여 는 지                   
    (1)Start-Job
    1 $StartJob = Start-Job -ScriptBlock {Get-Process}
    
    2 $StartJob 

    Id     Name     PSJobTypeName       State          HasMoreData     Location         Command       --     ----             -------------           -----             -----------         --------             -------       7      Job7         BackgroundJob      Running          True            localhost         Get-Process 
    우 리 는 위 에서 볼 수 있다.
    $StartJob 이름 은 Job 7 이 고,Job 의 유형 은 백 엔 드 Job 이 며,상 태 는 Running 이 며,Command 는 실행 명령 식 Get-Process 를 표시 합 니 다. 
    (2)Invoke-Command -AsJob
    1 $InvokeCommandJob  = Invoke-Command -ComputerName LocalHost -ScriptBlock {Get-Process} -AsJob
    
    2 $InvokeCommandJob

    Id     Name      PSJobTypeName   State         HasMoreData   Location        Command                  --     ----            -------------     -----         -----------       --------             -------                  15     Job15       RemoteJob        Running       True              LocalHost       Get-Process 
    우 리 는 위 에서 볼 수 있다.
    $Invoke CommandJob 의 유형 은 백 엔 드 RemoteJob 입 니 다.원 격 으로 실행 되 는 Job 을 표시 합 니 다.여기 서 제 가 사용 하 는 원 격 기 계 는 LocalHost 로 컬 기 계 를 테스트 기기 로 사용 합 니 다.
    여러분 은 이곳 의 Localhost 를 원 격 기기 이름 으로 교체 할 수 있 습 니 다.
    하나의 임 무 를 시작 한 후,우 리 는 그것 을 상관 하지 않 을 수 없 겠 지,지금 이 Job 들 을 어떻게 처리 하 는 지 말 해 보 자.
    4.Job 처리                                                          
    (1)Wait-Job
    1 #      1s     
    
    2 $WaitJob1  = Start-Job -ScriptBlock {Sleep -Seconds 10}
    
    3 #      5s     
    
    4 $WaitJob2  = Start-Job -ScriptBlock {Sleep -Seconds 15}
    
    5 #    Job  
    
    6 Wait-Job -Job $WaitJob1,$WaitJob2 -Timeout 2

    Id     Name       PSJobTypeName   State         HasMoreData     Location    Command                  
    --     ----            -------------       -----         -----------     --------             -------                  
    31     Job31      BackgroundJob   Completed     False           localhost       Sleep -Seconds 1         
    33     Job33     BackgroundJob     Running       True            localhost       Sleep -Seconds 5 
    위의 실행 결 과 를 보면$WaitJob 2 의 상 태 는 Running 입 니 다.기다 리 는 시간 이 길지 않 기 때문에 기다 리 는 시간 초과 시간 을 길 게 바 꾸 면 됩 니 다.코드 는 다음 과 같 습 니 다.
    1 Wait-Job -Job $WaitJob1,$WaitJob2 -Timeout 10

     Job 이 완료 되 기 를 기다 리 는 명령 도 있 습 니 다.
    1 Wait-Job -Id $WaitJob1.Id,$WaitJob2.Id -Timeout 10
    
    2 Wait-Job -Name $WaitJob1.Name,$WaitJob2.Name -Timeout 10
    
    3 Wait-Job -InstanceId $WaitJob1.InstanceId,$WaitJob2.InstanceId -Timeout 10
    
    4 Wait-Job -State Running -Timeout 10

    위의 예 를 통 해 저 희 는 Timeout 의 시간 을 설정 하여 Job 의 상 태 를 모니터링 할 수 있 습 니 다.
    (2)Remove-Job
    1 Remove-Job -Id $WaitJob1.Id,$WaitJob2.Id
    
    2 Remove-Job -Name $WaitJob1.Name,$WaitJob2.Name
    
    3 Remove-Job -InstanceId $WaitJob1.InstanceId,$WaitJob2.InstanceId
    
    4 Remove-Job -State Completed

    Remove Job 을 사용 할 때 이 Job 의 상태 가 완료 되 지 않 거나 정지 되 지 않 으 면 이상 을 던 집 니 다.
    Remove-Job : The command cannot remove the job with the job ID 67 because the job is not finished. To remove the job, first stop the job, or use the Force parameter.Parameter name: Job
    Remove Job 을 강제 하려 면 뒤에 인자-force 를 추가 할 수 있 습 니 다.
    1 Remove-Job -Job $WaitJob1,$WaitJob2 -Force

     제 가 아주 재 미 있 는 질문 하나 드릴 게 요.
    5.Start-Job 참조                                               
    예 를 들 어 우 리 는 지금 Job 을 열 어서$c=$a+$b 를 계산 한 다음 계산 결 과 를 D:\a.txt 텍스트 파일 에 기록 합 니 다.
    1 $a = 1  
    
    2 $b = 2  
    
    3 $c = 0  
    
    4 $Job = Start-Job -ScriptBlock {  
    
    5         $c = $a + $b  
    
    6         $c > "D:\a.txt"  
    
    7     }

    OK,코드 를 다 썼 습 니 다.실행 한 후에 우리 가 원 하 는 결 과 는 D:\a.txt 텍스트 파일 의 내용 은 3 입 니 다.
    그런데 사실 텍스트 파일 의 내용 이 비어 있 습 니 다.왜 일 까요?우 리 는 한 문 제 를 소홀히 했 기 때문이다.
    ScriptBlock 안의 매개 변 수 는 모두 매개 변수 가 전달 되 어야 합 니 다.
    위의 코드 수정:
    1 $a = 1
    
    2 $b = 2
    
    3 $c = 0
    
    4 $Job = Start-Job -ArgumentList $a,$b -ScriptBlock {
    
    5         param($a,$b)
    
    6         $c = $a + $b
    
    7         $c > "d:\a.txt"
    
    8     }

     위의 코드 를 실행 하면 텍스트 파일 의 내용 이 3 인 것 을 볼 수 있 습 니 다.
     6.인용&확장 읽 기                                               
    아래 링크 가 마이크로소프트 에 제공 하 는 기술 자료:
    http://technet.microsoft.com/library/2bc04935-0deb-4ec0-b856-d7290cca6442(v=wps.630).aspx

    좋은 웹페이지 즐겨찾기