PowerShell има четири вида задания - фонови работни места, отдалечени работни места, работни места с WMI и планирани работни места. Присъединете се към нас, когато разберем какви са и как можем да ги използваме.
Не забравяйте да прочетете предишните статии в серията:
И останете настроени за останалата част от серията през цялата седмица.
Досега всичко, което ви показах в PowerShell, е синхронно, което означава, че въвеждаме нещо в черупката и не можем да направим много, докато тази команда не приключи. Това е мястото, където се зареждат фонови задачи. За да стартирате фон, задачата просто предава скрипт блок на cmdlet за стартиране на задание.
Старт-задача - Наистина GetFileList -Scriptblock Get-ChildItem C: \ -Recurse
Сега ние сме свободни да правим всичко, което искаме, в рамките на черупката, докато този скрипт блок се изпълнява във фонов режим.
Когато започнете нова работа, PowerShell създава нов обект на работа, който представлява тази задача. Можете да получите списък на всички задания по всяко време, като стартирате командата Get-Job.
Предметът на работа ви разказва за състоянието на заданията. Например, в горната екранна снимка можем да видим, че имаме BackgroundJob, наречен GetFileList, който все още работи, но вече е започнал да връща данни. Ако в даден момент решиш, че задачата работи твърде дълго, лесно можеш да я спреш, като я включиш в Stop-Job.
Get-Job - Намерете GetFileList | Стоп-Job
Въпреки това, след като сте спрели дадена работа, каквито данни са получили до момента, в който сте я спрели, все още е налице. Все пак има мощност. В PowerShell, след като получите резултатите за дадена задача, те се изтриват. За да останат, трябва да зададете параметъра за запазване на превключвателя за получаване на заданието за получаване.
Get-Job - Намерете GetFileList | Получаване на задача
След като завършите работа, най-добрата практика е да я премахнете. За да премахнете заданието, просто го отправете към командата Премахване на задание.
Get-Job - Намерете GetFileList | Премахване на работното място
Това ще го премахне от списъка с задания, които се връщат от Get-Job.
Преди няколко урока разгледахме как можем да използваме remoting, за да изпълним командите на PowerShell на отдалечена машина, като използваме Invoke Command, но знаехте ли, че можете да използвате Invoke Command, за да започнете работа във фонов режим? За целта просто добавете параметъра -AsJob в края на вашата команда:
Invoke-Command -Компютърно име Flash, Viper -Credential administrator -ScriptBlock gci -AsJob
Това беше проста команда и трябваше да приключи изпълнението досега, така че нека да разгледаме нашия статут на работа.
Хм, изглежда, че не успя. Това ме накара да се захвана с първите ми неща. Когато създавате нова задача от всякакъв вид в PowerShell, тя създава една родителска задача в допълнение към едно детайлно задание за всеки компютър, на който работите. Когато използвате командата Get-Job, тя ви показва само родителските задания, а състоянието на държавата е най-лошият сценарий, което означава, че дори ако командата не се изпълни само на един от сто компюта, се провали. За да видите списък с детски задачи, трябва да използвате параметъра IncludeChildJob.
Ако погледнете по-близо, ще видите, че работата наистина не е успешна само на един компютър, което ни води към следващия gotcha. Когато опитате да получите резултатите за заданието, ако зададете името или идентификационния номер на родителя, PowerShell ще върне данните от всички задания на дете. Проблемът е, че ако е имало грешка в една от детските работни места, ще останем с някакъв червен текст.
Има два начина да се справите с това. На първо място, ако знаете за кои компютри искате резултатите, просто можете да използвате параметъра ComputerName на командата Ressie-Job cmdlet.
Get-Job-ID 3 | Получаване на задача-Кейп-КомпютърНие
Като алтернатива, можете да получите резултатите от конкретна задача за деца, като използвате нейния идентификационен номер за работа.
Get-Job-ИД 3-Включване на деца
Get-Job-ID 5 | Получаване на задача
Работните задачи на WMI са почти същите като отдалечени задания, изискващи само параметъра -AsJob да бъде добавен към cmdlet на Get-WmiObject.
За съжаление, това означава, че те също са обект на същите забележки, споменати в секцията "Дистанционни работни места".
Последните три вида работни места, които разгледахме, не бяха устойчиви, което означава, че те са налице само в текущата ви сесия. По принцип това означава, че ако започнете работа и след това отворите друга конзола PowerShell и стартирайте Get-Job, няма да видите никакви работни места. Въпреки това, върнете се на конзолата, от която сте изстреляли задачата, ще можете да видите състоянието му. Това е в противоречие с планираните работни места, които са устойчиви, По принцип Scheduled Job е скрипт блок, който работи по график. В миналото същия ефект би могъл да се постигне с помощта на Windows Task Scheduler, което всъщност се случва под капака. За да създадете нова насрочена задача, ние правим следното:
Регистрация-ScheduledJob -Най-GetEventLogs -ScriptBlock Get-EventLog -LogName Сигурност -Newest 100 -Trigger (New-JobTrigger -Дейлинг -At 17:00) -ПрограмиранеJobOption (New-ScheduledJobOption -RunElevated)
В това командване има доста неща, така че нека да го счупим.
Тъй като това е малко по-различен тип работа, ще трябва да използвате друга команда, за да изтеглите списък с всички зададени задания на машината.
Get-ScheduledJob
Това е всичко за него.