Обязательно прочитайте предыдущие статьи в серии:
- Узнайте, как автоматизировать Windows с помощью PowerShell
- Обучение использованию командлетов в PowerShell
- Обучение использованию объектов в PowerShell
- Форматирование, фильтрация и сравнение обучения в PowerShell
- Научитесь использовать Remoting в PowerShell
- Использование PowerShell для получения информации о компьютере
- Работа с коллекциями в PowerShell
И оставайтесь настроенными для остальной части серии всю неделю.
Справочные задания
До сих пор все, что я показал вам в PowerShell, было синхронным, что означает, что мы вносим что-то в оболочку и не можем сделать многого, пока эта команда не завершит выполнение. Здесь появляются фоновые задания. Чтобы запустить фон, задание просто передает блок сценария командлету Start-Job.
Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}
Get-Job –Name GetFileList | Stop-Job
Get-Job –Name GetFileList | Receive-Job –Keep
Как только вы закончите работу, лучше удалить ее. Чтобы удалить задание, просто подключите его к командлету Remove-Job.
Get-Job –Name GetFileList | Remove-Job
Это приведет к удалению из списка заданий, возвращаемых Get-Job.
Удаленные вакансии
Несколько уроков назад мы рассмотрели, как мы можем использовать удаленное управление для выполнения команд 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
Задания WMI - это то же самое, что и удаленные задания, требующие добавления только параметра -AsJob в командлет Get-WmiObject.
Запланированные вакансии
Последние три вида работ, на которые мы смотрели, не были постоянными, а это значит, что они доступны только в текущем сеансе. В основном, это означает, что если вы начинаете работу, а затем открываете другую консоль PowerShell и запускаете Get-Job, вы не увидите никаких заданий. Однако вернитесь на консоль, от которой вы отдали работу, вы сможете увидеть ее статус. Это отличается от запланированных заданий, которые постоянны, В основном, запланированное задание является блоком сценария, который выполняется по расписанию. Раньше такой же эффект мог быть достигнут с помощью Планировщика заданий Windows, который действительно является тем, что происходит под капотом. Чтобы создать новое Запланированное задание, мы делаем следующее:
Register-ScheduledJob -Name GetEventLogs -ScriptBlock {Get-EventLog -LogName Security -Newest 100} -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)
В этой команде происходит довольно много, поэтому давайте сломаем ее.
- Во-первых, мы даем нашему Запланированному заданию имя GetEventLogs.
- Затем мы говорим, что при запуске мы хотим, чтобы он запускал содержимое указанного блока сценариев, в котором в основном получают самые последние 100 записей журнала событий безопасности.
- Затем мы укажем триггер. Поскольку параметр триггера принимает объект триггера в качестве входного сигнала, мы использовали командную форму для генерации триггера, который будет выходить каждый день в 5 вечера.
- Поскольку мы имеем дело с журналом событий, мы должны запускаться как администратор, который мы можем указать, создав новый объект ScheduledJobOption и передав его параметру ScheduledJobOption.
Get-ScheduledJob