Background에서 Powershell Job(작업) 실행하기


  • Powershell console에서 작업을 하면, 즉 여러 가지 cmdlet를 실행하거나 스크립트 파일(.ps1)을 실행할 때는 Interactively, Synchronously하게 처리된다. 즉, 이것은 한 명령어를 실행한 후 다음 명령어를 실행하려면 첫 번째 명령어의 결과가 화면에 나타난 후 그 다음 명령어를 실행할 수 있다는 것이다.
  • 문제는 그 다음 명령어를 실행하려고 하는데 첫 번째 명령어가 아직 계속 진행 중이라면 문제가 발생하게 되는 것이다.
  • 이것을 해결하려면 첫 번째, 또 다른 Powershell console 프로그램을 실행해서 처리하면 된다. 그러면 부가적으로 메모리와 CPU를 더 사용하게 된다. 그래서 두 번째 방법이 있다. 그것을 바로 Background에서 작업을 실행하게 하는 것이다.
  • Background에서 작업을 할 때는 -AsJob이라는 매개변수를 이용하거나 Start-Job이라는 cmdlet를 이용하는 방법이 있다.
  • -AsJob은 Parameter이기 때문에 모든 cmdlet에서 사용할 수 없다. 하지만 간단하게 사용할 수 있는 장점이 있다.
    • Gwmi -computername pc1, pc2 -Class cim_datafile
      (이렇게 하면 시간이 많이 걸린다)
    • Gwmi -computername pc1, pc2 -Class cim_datafile -AsJob
      (이렇게 하면 백그라운드로 작업이 되므로 다른 명령어를 실행할 수 있다.)
    • 작업이 진행중인지 끝났는지 확인하려면 Get-Job으로 확인할 수 있다.
       
  • Start-Job의 장점은 다음과 같다.
    • 모든 cmdlet에 사용할 수 있다.
      Start-Job -Scriptblock {Get-Process -Computername PC1, PC2}
    • Powershell Script 파일도 background로 작업을 할 수 있다.
      Start-Job -FilePath c:\myscript.ps1
    • 현재 로그온한 사용자가 아닌 다른 사용자 계정으로 실행할 수 있다.
      Start-Job -Scriptblock {Get-Eventlog -Logname system} -Credential Contoso\user01
    • Job name을 사용자가 명기할 수 있다. -AsJob은 Default로 Job name이 붙는다.
      Start-Job -Name WinRmTask -Scriptblock {get-process winrm}        
  • 백그라운드로 작업한 내용을 보기 위해서는 다음과 같이 한다.
    • Get-Job으로 Job 현황을 본다.
    • Receive-Job -Id 1 -Keep로 첫 번째 Job 내용을 본다. 여기서 -Keep을 사용한 이유는 이것을 사용하지 않으면 한 번만 내용을 볼 수 있기 때문이다.

       

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s