/ / Geek School : PowerShell에서 작업을 사용하는 방법 알아보기

Geek School : PowerShell에서 작업을 사용하는 방법 알아보기

PowerShell에는 백그라운드 작업, 원격 작업, WMI 작업 및 예약 된 작업의 네 가지 유형의 작업이 있습니다. 그들이 무엇인지, 어떻게 사용하는지 알아 내면 우리와 함께하십시오.

시리즈의 이전 기사를 읽으십시오.

  • PowerShell을 사용하여 Windows를 자동화하는 방법 알아보기
  • PowerShell에서 cmdlet 사용 방법 학습
  • PowerShell에서 개체를 사용하는 방법 학습
  • PowerShell에서 학습 서식, 필터링 및 비교
  • PowerShell에서 원격 사용 방법 알아보기
  • PowerShell을 사용하여 컴퓨터 정보 얻기
  • PowerShell에서 컬렉션 작업

그리고 일주일 내내 나머지 시리즈를 계속 지켜봐 주시기 바랍니다.

백그라운드 작업

지금까지 내가 보여준 모든 것PowerShell은 동기식이므로 셸에 무언가를 입력하므로 해당 명령 실행이 끝날 때까지 실제로 많은 것을 할 수 없습니다. 백그라운드 작업이 시작되는 위치입니다. 백그라운드를 시작하려면 스크립트 블록을 Start-Job cmdlet에 전달하면됩니다.

시작 작업 – 이름 GetFileList – 스크립트 블록 {Get-ChildItem C : –Recurse}

영상

이제 스크립트 블록이 백그라운드에서 실행되는 동안 쉘 내에서 원하는 것을 자유롭게 할 수 있습니다.

영상

새 작업을 시작하면 PowerShell은 해당 작업을 나타내는 새 작업 개체를 만듭니다. Get-Job cmdlet을 실행하면 언제든지 모든 작업 목록을 얻을 수 있습니다.

영상

작업 개체는 상태를 알려줍니다.직업. 예를 들어 위의 스크린 샷에서 아직 실행 중이지만 이미 데이터를 반환하기 시작한 GetFileList라는 BackgroundJob이 있음을 알 수 있습니다. 어떤 시점에서 작업이 너무 오래 실행되었다고 판단하면 작업을 Stop-Job으로 파이프하여 쉽게 중지 할 수 있습니다.

Get-Job – 이름 GetFileList | 스톱 잡

영상

그러나 일단 일을 중단하면중지 한 시점까지 수신 한 데이터는 계속 사용할 수 있습니다. 그래도 문제가 있습니다. PowerShell에서 작업 결과를 받으면 삭제됩니다. 그것들을 유지하려면 Receive–Job의 keep 스위치 매개 변수를 지정해야합니다.

Get-Job – 이름 GetFileList | 받기-직업 – 유지

영상

작업이 끝나면 제거하는 것이 가장 좋습니다. 작업을 제거하려면 간단히 작업을 Remove-Job cmdlet으로 파이프하십시오.

Get-Job – 이름 GetFileList | 제거 작업

Get-Job이 반환 한 작업 목록에서 제거합니다.

영상

원격 작업

몇 가지 수업 전에 우리는 어떻게 사용할 수 있는지 살펴 봤습니다원격 시스템에서 Invoke-Command를 사용하여 PowerShell 명령을 실행하도록 원격으로 이동하지만 Invoke-Command를 사용하여 백그라운드에서 원격 작업을 시작할 수도 있다는 것을 알고 있습니까? 이렇게하려면 –AsJob 매개 변수를 명령 끝에 추가하십시오.

Invoke-Command -ComputerName Flash, Viper-인증 관리자 -ScriptBlock {gci} –AsJob

영상

이것은 간단한 명령이었고 지금까지 실행을 완료 했으므로 작업 상태를 살펴 보겠습니다.

영상

흠, 실패한 것 같습니다. 이것은 직업과 함께 나의 첫 번째 문제에 나를 데려 온다. PowerShell에서 모든 유형의 새 작업을 만들면 작업을 실행중인 모든 컴퓨터에 대해 하나의 자식 작업 외에 하나의 부모 작업이 만들어집니다. Get-Job cmdlet을 사용하면 부모 작업 만 표시되며 state 속성은 최악의 시나리오입니다. 즉, 명령이 백 대 컴퓨터 중 하나에서 실행되지 않은 경우에도 부모 작업 상태는 실패한. 하위 작업 목록을 보려면 IncludeChildJob 매개 변수를 사용해야합니다.

영상

자세히 보면 작업이 수행되었음을 알 수 있습니다실제로 한 컴퓨터에서만 실패하므로 다음 문제가 발생합니다. 작업 결과를 가져 오려고 할 때 부모의 작업 이름 또는 ID를 지정하면 PowerShell은 모든 자식 작업의 데이터를 반환합니다. 문제는 하위 작업 중 하나에 오류가 있으면 빨간색 텍스트가 남게된다는 것입니다.

영상

이 문제를 해결하는 데는 두 가지 방법이 있습니다. 먼저 결과를 원하는 컴퓨터를 알고있는 경우 Recieve –Job cmdlet의 ComputerName 매개 변수를 사용하면됩니다.

Get-Job –Id 3 | 수신 작업 – 유지 – 컴퓨터 이름 바이퍼

영상

또는 작업 ID를 사용하여 특정 하위 작업에서 결과를 얻을 수 있습니다.

Get-Job -Id 3 –IncludeChildJob

영상

Get-Job -Id 5 | 받기-직업 – 유지

영상

WMI 채용 공고

WMI 작업은 원격 작업과 거의 동일하므로 Get-WmiObject cmdlet에 –AsJob 매개 변수 만 추가하면됩니다.

영상

영상

불행히도 이것은 원격 작업 섹션에서 언급 한 것과 동일한 문제가 있음을 의미합니다.

예정된 작업

우리가 본 마지막 세 종류의 직업은영구적이지 않으므로 현재 세션에서만 사용할 수 있습니다. 기본적으로 작업을 시작한 다음 다른 PowerShell 콘솔을 열고 Get-Job을 실행하면 작업이 표시되지 않습니다. 그러나 작업을 시작한 콘솔로 돌아 가면 상태를 볼 수 있습니다. 이것은 예정된 작업과 대조되는 지속적이다. 기본적으로 예약 된 작업은 스크립트 블록입니다일정대로 실행됩니다. 과거에는 Windows 작업 스케줄러를 사용하여 동일한 효과를 얻을 수있었습니다. 새 예약 된 작업을 만들려면 다음을 수행하십시오.

Register-ScheduledJob-이름 GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)

그 명령에는 많은 일들이 일어나고 있습니다.

  • 먼저 예약 작업에 GetEventLogs라는 이름을 지정합니다.
  • 그런 다음 트리거 될 때 지정된 스크립트 블록의 내용을 실행하기를 원하며 기본적으로 보안 이벤트 로그의 최신 100 개 항목을 가져옵니다.
  • 다음으로 트리거를 지정합니다. 트리거 매개 변수는 트리거 오브젝트를 입력으로 사용하므로 괄호 명령을 사용하여 매일 오후 5시에 트리거되는 트리거를 생성했습니다.
  • 이벤트 로그를 처리하기 때문에 새로운 ScheduledJobOption 객체를 생성하고 ScheduledJobOption 매개 변수에 전달하여 지정할 수있는 관리자로 실행해야합니다.

영상

이것은 약간 다른 유형의 작업이기 때문에 다른 명령을 사용하여 시스템에서 스케줄 된 모든 작업 목록을 검색해야합니다.

일정 잡기

영상

그게 전부입니다.