- 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으로 확인할 수 있다.
- Gwmi -computername pc1, pc2 -Class cim_datafile
-
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}
- 모든 cmdlet에 사용할 수 있다.
-
백그라운드로 작업한 내용을 보기 위해서는 다음과 같이 한다.
- Get-Job으로 Job 현황을 본다.
- Receive-Job -Id 1 -Keep로 첫 번째 Job 내용을 본다. 여기서 -Keep을 사용한 이유는 이것을 사용하지 않으면 한 번만 내용을 볼 수 있기 때문이다.
- Get-Job으로 Job 현황을 본다.