PowerShell
PowerShell 백그라운드 작업
수색…
소개
잡스는 PowerShell 2.0에 도입되었으며 명령 줄 도구의 고유 한 문제를 해결하는 데 도움이되었습니다. 요컨대, 장기 실행 태스크를 시작하면 태스크가 완료 될 때까지 프롬프트를 사용할 수 없습니다. 장기 실행 작업의 한 예로,이 간단한 PowerShell 명령을 생각해보십시오.
Get-ChildItem -Path c : \ -Recurse
C : 드라이브의 전체 디렉토리 목록을 가져 오는 데는 어느 정도 시간이 걸립니다. 작업으로 실행하면 콘솔에 컨트롤이 다시 나타나고 나중에 결과를 캡처 할 수 있습니다.
비고
PowerShell 작업이 새 프로세스에서 실행됩니다. 이것은 장단점이 있습니다.
장점 :
- 작업은 환경을 포함하여 깨끗한 프로세스로 실행됩니다.
- 작업이 주 PowerShell 프로세스와 비동기 적으로 실행될 수 있습니다.
단점 :
- 프로세스 환경 변경은 작업에 나타나지 않습니다.
- 매개 변수는 전달되고 반환 된 결과는 직렬화됩니다.
- 즉, 작업 실행 중에 매개 변수 개체를 변경하면 작업에 반영되지 않습니다.
- 즉, 개체를 serialize 할 수없는 경우 전달하거나 반환 할 수 없습니다 (PowerShell에서 매개 변수를 복사하고 PSObject를 전달 / 반환 할 수도 있음).
기본 일자리 창출
배경 작업으로 스크립트 블록 시작 :
$job = Start-Job -ScriptBlock {Get-Process}
백그라운드 작업으로 스크립트 시작 :
$job = Start-Job -FilePath "C:\YourFolder\Script.ps1"
원격 시스템에서 Invoke-Command
를 사용하여 작업 시작 :
$job = Invoke-Command -ComputerName "ComputerName" -ScriptBlock {Get-Service winrm} -JobName "WinRM" -ThrottleLimit 16 -AsJob
다른 사용자로 작업 시작 (암호 입력 요구) :
Start-Job -ScriptBlock {Get-Process} -Credential "Domain\Username"
또는
Start-Job -ScriptBlock {Get-Process} -Credential (Get-Credential)
다른 사용자로 작업 시작 (프롬프트되지 않음) :
$username = "Domain\Username"
$password = "password"
$secPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username, $secPassword)
Start-Job -ScriptBlock {Get-Process} -Credential $credentials
기본 작업 관리
현재 세션의 모든 작업 목록을 가져옵니다.
Get-Job
결과를 얻기 전에 작업 대기 중 :
$job | Wait-job | Receive-Job
작업이 너무 길면 시간 초과 됨 (이 예제에서는 10 초)
$job | Wait-job -Timeout 10
작업 중지 (해당 작업 대기열에서 보류중인 모든 작업을 완료하기 전에 완료) :
$job | Stop-Job
현재 세션의 백그라운드 작업 목록에서 작업 제거 :
$job | Remove-Job
참고 : 다음은 Workflow
작업에서만 작동합니다.
Workflow
작업 일시 중지 (일시 중지) :
$job | Suspend-Job
Workflow
작업 재개 :
$job | Resume-Job
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow