Не забравяйте да прочетете предишните статии в серията:
- Научете как да автоматизирате Windows с PowerShell
- Научете как да използвате Cmdlets в PowerShell
- Учене как да използвате обекти в PowerShell
- Форматиране на обучение, филтриране и сравнение в PowerShell
- Научете как да използвате Remoting в PowerShell
- Използване на PowerShell за получаване на компютърна информация
- Работа с колекции в PowerShell
И останете настроени за останалата част от серията през цялата седмица.
Работни места на фона
Досега всичко, което ви показах в PowerShell, е синхронно, което означава, че въвеждаме нещо в черупката и не можем да направим много, докато тази команда не приключи. Това е мястото, където се зареждат фонови задачи. За да стартирате фон, задачата просто предава скрипт блок на cmdlet за стартиране на задание.
Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}
Get-Job –Name GetFileList | Stop-Job
Get-Job –Name GetFileList | Receive-Job –Keep
След като завършите работа, най-добрата практика е да я премахнете. За да премахнете заданието, просто го отправете към командата Премахване на задание.
Get-Job –Name GetFileList | Remove-Job
Това ще го премахне от списъка с задания, които се връщат от Get-Job.
Отдалечени работни места
Преди няколко урока разгледахме как можем да използваме remoting, за да изпълним командите на PowerShell на отдалечена машина, като използваме Invoke Command, но знаехте ли, че можете да използвате Invoke Command, за да започнете работа във фонов режим? За целта просто добавете параметъра -AsJob в края на вашата команда:
Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob
Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper
Като алтернатива, можете да получите резултатите от конкретна задача за деца, като използвате нейния идентификационен номер за работа.
Get-Job -Id 3 –IncludeChildJob
Get-Job -Id 5 | Receive-Job –Keep
WMI Jobs
Работните задачи на WMI са почти същите като отдалечени задания, изискващи само параметъра -AsJob да бъде добавен към cmdlet на Get-WmiObject.
Планирани работни места
Последните три вида работни места, които разгледахме, не бяха устойчиви, което означава, че те са налице само в текущата ви сесия. По принцип това означава, че ако започнете работа и след това отворите друга конзола PowerShell и стартирайте Get-Job, няма да видите никакви работни места. Въпреки това, върнете се на конзолата, от която сте изстреляли задачата, ще можете да видите състоянието му. Това е в противоречие с планираните работни места, които са устойчиви, По принцип Scheduled Job е скрипт блок, който работи по график. В миналото същия ефект би могъл да се постигне с помощта на Windows Task Scheduler, което всъщност се случва под капака. За да създадете нова насрочена задача, ние правим следното:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
В това командване има доста неща, така че нека да го счупим.
- Първо, даваме на нашата Scheduled Job име на GetEventLogs.
- След това го казваме, че когато се задейства, искаме да стартира съдържанието на посочения скрипт блок, който основно получава най-новите 100 записа в регистъра на събитията за сигурност.
- След това определяме тригера. Тъй като параметърът за задействане отнема тригерен обект като вход, ние използвахме парахечната команда за генериране на тригер, който ще изгасне всеки ден в 5PM.
- Тъй като се занимаваме с регистрационния файл на събитията, трябва да стартираме като администратор, който можем да определим, като създадем нов обект ScheduledJobOption и го предадем на параметъра ScheduledJobOption.
Get-ScheduledJob