수색…


소개

잡스는 PowerShell 2.0에 도입되었으며 명령 줄 도구의 고유 한 문제를 해결하는 데 도움이되었습니다. 요컨대, 장기 실행 태스크를 시작하면 태스크가 완료 될 때까지 프롬프트를 사용할 수 없습니다. 장기 실행 작업의 한 예로,이 간단한 PowerShell 명령을 생각해보십시오.

Get-ChildItem -Path c : \ -Recurse

C : 드라이브의 전체 디렉토리 목록을 가져 오는 데는 어느 정도 시간이 걸립니다. 작업으로 실행하면 콘솔에 컨트롤이 다시 나타나고 나중에 결과를 캡처 할 수 있습니다.

비고

PowerShell 작업이 새 프로세스에서 실행됩니다. 이것은 장단점이 있습니다.

장점 :

  1. 작업은 환경을 포함하여 깨끗한 프로세스로 실행됩니다.
  2. 작업이 주 PowerShell 프로세스와 비동기 적으로 실행될 수 있습니다.

단점 :

  1. 프로세스 환경 변경은 작업에 나타나지 않습니다.
  2. 매개 변수는 전달되고 반환 된 결과는 직렬화됩니다.
    • 즉, 작업 실행 중에 매개 변수 개체를 변경하면 작업에 반영되지 않습니다.
    • 즉, 개체를 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