Geek School PowerShell에서 채용 정보를 사용하는 방법 알아보기
PowerShell에는 백그라운드 작업, 원격 작업, WMI 작업 및 예약 된 작업의 네 가지 유형의 작업이 있습니다. 그들이 무엇인지, 어떻게 사용할 수 있는지 알아낼 때 우리와 함께하십시오..
시리즈의 이전 기사를 읽으십시오.
- PowerShell을 사용하여 Windows를 자동화하는 방법 배우기
- PowerShell에서 Cmdlet을 사용하는 방법 학습
- PowerShell에서 개체를 사용하는 방법 학습
- PowerShell에서 형식 지정, 필터링 및 비교 학습
- PowerShell에서 Remoting 사용 방법 배우기
- PowerShell을 사용하여 컴퓨터 정보 가져 오기
- PowerShell의 컬렉션 작업
그리고 일주일 내내 나머지 시리즈에 계속해서 관심을 가져주세요..
배경 직업
지금까지 내가 PowerShell에서 보여준 모든 것은 동기식이었습니다. 즉, 쉘에 뭔가를 입력 했으므로 명령이 실행을 완료 할 때까지는 실제로 할 수 없습니다. 배경 작업을 시작하려면 작업을 시작하려면 Start-Job cmdlet에 스크립트 블록을 전달하기 만하면됩니다.
시작 작업 - 이름 GetFileList -Scriptblock Get-ChildItem C : \ -Recurse
이제 스크립트 블록이 백그라운드에서 실행되는 동안 셸 내에서 원하는 모든 작업을 자유롭게 수행 할 수 있습니다..
새 작업을 시작할 때 PowerShell은 해당 작업을 나타내는 새 작업 개체를 만듭니다. Get-Job cmdlet을 실행하여 언제든지 모든 작업 목록을 가져올 수 있습니다..
작업 개체는 작업 상태를 알려줍니다. 예를 들어 위의 스크린 샷에서 GetFileList라는 BackgroundJob이 아직 실행 중이지만 이미 데이터를 반환하기 시작한 것을 볼 수 있습니다. 작업이 너무 오래 실행되었다고 판단한 경우 Stop-Job으로 연결하여 작업을 쉽게 중지 할 수 있습니다.
Get-Job -Name GetFileList | 스톱 - 욥
그러나 일단 작업을 중단하면 중지 한 시점까지받은 모든 데이터를 계속 사용할 수 있습니다. 그래도 잡았다. PowerShell에서 작업 결과를 받으면 삭제됩니다. 이들을 유지하려면 Receive-Job의 유지 스위치 매개 변수를 지정해야합니다.
Get-Job -Name GetFileList | 수신 작업 - 보관
구직이 끝나면 그것을 지우는 것이 가장 좋습니다. 작업을 제거하려면 Remove-Job cmdlet으로 연결하면됩니다..
Get-Job -Name GetFileList | 제거 작업
그러면 Get-Job에서 반환 한 작업 목록에서 제거됩니다..
원격 작업
몇 가지 예를 살펴보면 Invoke-Command를 사용하여 원격 컴퓨터에서 원격 명령을 실행하여 원격 명령을 실행하는 방법을 살펴 보았지만 Invoke-Command를 사용하여 백그라운드에서 원격 작업을 시작할 수 있음을 알고 있습니까? 그렇게하려면 간단히 명령 끝에 -AsJob 매개 변수를 추가하십시오.
Invoke-Command -ComputerName Flash, Viper - 기본 관리자 -ScriptBlock gci -AsJob
그것은 간단한 명령이었고 지금까지 실행을 끝내야했기 때문에 우리의 직업 상태를 살펴볼 수 있습니다..
흠, 실패한 것처럼 보입니다. 이것은 일자리를 가진 첫 번째 잡았다. PowerShell에서 모든 유형의 새 작업을 만들면 작업을 실행하는 모든 컴퓨터에 대해 하나의 하위 작업 외에도 하나의 상위 작업이 만들어집니다. Get-Job cmdlet을 사용하면 부모 작업 만 표시되며 state 속성은 최악의 시나리오입니다. 즉 명령이 100 대의 컴퓨터 중 하나에서 실행되지 않은 경우에도 부모 작업 상태는 실패한. 자식 작업 목록을 보려면 IncludeChildJob 매개 변수를 사용해야합니다..
좀 더 자세히 살펴보면 한 컴퓨터에서만 작업이 실제로 실패했음을 알 수 있습니다. 그러면 다음 작업이 진행됩니다. 작업 결과를 얻으려고 할 때 부모의 작업 이름이나 ID를 지정하면 PowerShell은 모든 하위 작업의 데이터를 반환합니다. 문제는 자식 작업 중 하나에 오류가있는 경우 빨간색 텍스트가 남을 것입니다..
이 문제를 해결할 수있는 방법은 두 가지가 있습니다. 첫째, 결과를 원하는 컴퓨터를 알고있는 경우 Recieve -Job cmdlet의 ComputerName 매개 변수를 사용하면됩니다..
Get-Job -Id 3 | 수신 작업 - 키프 - 컴퓨터 이름 바이퍼
또는 작업 ID를 사용하여 특정 하위 작업의 결과를 가져올 수 있습니다.
Get-Job -Id 3 -IncludeChildJob
Get-Job -Id 5 | 수신 작업 - 보관
WMI 작업
WMI 작업은 원격 작업과 거의 동일하므로 -AsJob 매개 변수 만 Get-WmiObject cmdlet에 추가해야합니다..
불행하게도 이는 원격 작업 섹션에서 언급 한 것과 동일한 문제가 발생할 수 있음을 의미합니다..
예정된 작업
우리가 보았던 마지막 세 종류의 일자리는 영구적 인 것이 아니며, 현재의 세션에서만 사용 가능하다는 것을 의미합니다. 기본적으로 작업을 시작한 다음 다른 PowerShell 콘솔을 열고 Get-Job을 실행하면 작업이 표시되지 않습니다. 그러나 작업을 시작한 콘솔로 돌아와서 상태를 볼 수 있습니다. 이는 예약 된 작업과는 영구하다. 기본적으로 예약 된 작업은 일정에 따라 실행되는 스크립트 블록입니다. 과거에는 Windows 작업 스케줄러를 사용하여 동일한 영향을 미칠 수 있었지만 실제로는 두려운 상황에서 발생합니다. 새 예약 된 작업을 만들려면 다음을 수행하십시오.
Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName 보안 -Newest 100 -Trigger (New-JobTrigger - 매일 - 오후 5시) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
그 명령에 꽤 많은 일이 일어나고 있습니다..
- 먼저 예약 된 작업에 GetEventLogs의 이름을 지정합니다..
- 그런 다음 트리거 될 때 지정된 스크립트 블록의 내용을 실행하도록 요청합니다.이 스크립트 블록은 기본적으로 보안 이벤트 로그의 최신 항목 100 개를 가져옵니다.
- 다음으로 트리거를 지정합니다. trigger 매개 변수는 트리거 객체를 입력으로 사용하므로 괄호 안의 명령을 사용하여 매일 오후 5시에 실행되는 트리거를 생성합니다.
- 이벤트 로그를 다루기 때문에 우리는 새로운 ScheduledJobOption 객체를 생성하고이를 ScheduledJobOption 매개 변수에 전달함으로써 관리자로 실행할 필요가있다..
이것은 약간 다른 유형의 작업이기 때문에 다른 명령을 사용하여 시스템의 모든 예약 된 작업 목록을 검색해야합니다.
Get-ScheduledJob
그게 다야..