Школа Geek: Узнайте, как использовать вакансии в PowerShell

Оглавление:

Школа Geek: Узнайте, как использовать вакансии в PowerShell
Школа Geek: Узнайте, как использовать вакансии в PowerShell

Видео: Школа Geek: Узнайте, как использовать вакансии в PowerShell

Видео: Школа Geek: Узнайте, как использовать вакансии в PowerShell
Видео: Что такое лид-магнит? 7 свойств эффективных лид-магнитов. - YouTube 2024, Ноябрь
Anonim
У PowerShell есть четыре типа заданий: фоновые задания, удаленные задания, задания WMI и запланированные задания. Присоединяйтесь к нам, когда мы узнаем, что это такое и как мы можем их использовать.
У PowerShell есть четыре типа заданий: фоновые задания, удаленные задания, задания WMI и запланированные задания. Присоединяйтесь к нам, когда мы узнаем, что это такое и как мы можем их использовать.

Обязательно прочитайте предыдущие статьи в серии:

  • Узнайте, как автоматизировать Windows с помощью PowerShell
  • Обучение использованию командлетов в PowerShell
  • Обучение использованию объектов в PowerShell
  • Форматирование, фильтрация и сравнение обучения в PowerShell
  • Научитесь использовать Remoting в PowerShell
  • Использование PowerShell для получения информации о компьютере
  • Работа с коллекциями в PowerShell

И оставайтесь настроенными для остальной части серии всю неделю.

Справочные задания

До сих пор все, что я показал вам в PowerShell, было синхронным, что означает, что мы вносим что-то в оболочку и не можем сделать многого, пока эта команда не завершит выполнение. Здесь появляются фоновые задания. Чтобы запустить фон, задание просто передает блок сценария командлету Start-Job.

Start-Job –Name GetFileList –Scriptblock {Get-ChildItem C: –Recurse}

Теперь мы свободны делать все, что захотим внутри оболочки, в то время как блок сценария выполняется в фоновом режиме.
Теперь мы свободны делать все, что захотим внутри оболочки, в то время как блок сценария выполняется в фоновом режиме.
Когда вы запускаете новое задание, PowerShell создает новый объект задания, который представляет это задание. Вы можете получить список всех заданий в любое время, запустив командлет Get-Job.
Когда вы запускаете новое задание, PowerShell создает новый объект задания, который представляет это задание. Вы можете получить список всех заданий в любое время, запустив командлет Get-Job.
Объекты задания сообщают вам о статусе заданий. Например, в приведенном выше скриншоте мы видим, что у нас есть BackgroundJob с именем GetFileList, который все еще запущен, но уже начал возвращать данные. Если в какой-то момент вы решите, что задание работает слишком долго, вы можете легко остановить его, переместив его в Stop-Job.
Объекты задания сообщают вам о статусе заданий. Например, в приведенном выше скриншоте мы видим, что у нас есть BackgroundJob с именем GetFileList, который все еще запущен, но уже начал возвращать данные. Если в какой-то момент вы решите, что задание работает слишком долго, вы можете легко остановить его, переместив его в Stop-Job.

Get-Job –Name GetFileList | Stop-Job

Однако, как только вы прекратили работу, все полученные данные до тех пор, пока вы не остановите ее, все еще доступны. Однако есть гоча. В PowerShell после получения результатов для задания они удаляются. Чтобы они оставались, вы должны указать параметр переключателя keep-job.
Однако, как только вы прекратили работу, все полученные данные до тех пор, пока вы не остановите ее, все еще доступны. Однако есть гоча. В PowerShell после получения результатов для задания они удаляются. Чтобы они оставались, вы должны указать параметр переключателя keep-job.

Get-Job –Name GetFileList | Receive-Job –Keep

Image
Image

Как только вы закончите работу, лучше удалить ее. Чтобы удалить задание, просто подключите его к командлету Remove-Job.

Get-Job –Name GetFileList | Remove-Job

Это приведет к удалению из списка заданий, возвращаемых Get-Job.

Image
Image

Удаленные вакансии

Несколько уроков назад мы рассмотрели, как мы можем использовать удаленное управление для выполнения команд PowerShell на удаленной машине с помощью Invoke-Command, но знаете ли вы, что вы также можете использовать Invoke-Command, чтобы запустить удаленную работу в фоновом режиме? Для этого просто добавьте параметр -AsJob в конец вашей команды:

Invoke-Command -ComputerName Flash,Viper -Credential administrator -ScriptBlock {gci} –AsJob

Это была простая команда и должна была закончить выполнение, поэтому давайте взглянем на наш статус работы.
Это была простая команда и должна была закончить выполнение, поэтому давайте взглянем на наш статус работы.
Хм, похоже, что это провалилось. Это подводит меня к моей первой работе с заданиями. Когда вы создаете новое задание любого типа в PowerShell, оно создает одно родительское задание в дополнение к одному дочернему заданию для каждого компьютера, на котором выполняется работа. Когда вы используете командлет Get-Job, он показывает только родительские задания, а свойство состояния - наихудший сценарий, а это означает, что даже если команда не запускалась только на одном из ста компьютеров, состояние родительских заданий скажет не удалось. Чтобы просмотреть список дочерних заданий, вам необходимо использовать параметр IncludeChildJob.
Хм, похоже, что это провалилось. Это подводит меня к моей первой работе с заданиями. Когда вы создаете новое задание любого типа в PowerShell, оно создает одно родительское задание в дополнение к одному дочернему заданию для каждого компьютера, на котором выполняется работа. Когда вы используете командлет Get-Job, он показывает только родительские задания, а свойство состояния - наихудший сценарий, а это означает, что даже если команда не запускалась только на одном из ста компьютеров, состояние родительских заданий скажет не удалось. Чтобы просмотреть список дочерних заданий, вам необходимо использовать параметр IncludeChildJob.
Если вы посмотрите ближе, вы увидите, что работа действительно потерпела неудачу только на одном компьютере, что привело нас к следующему шагу. Когда вы попытаетесь получить результаты для задания, если вы укажете имя задания или идентификатор родителя, PowerShell вернет данные из всех дочерних заданий. Проблема в том, что если в одном из дочерних заданий произошла ошибка, мы останемся с красным текстом.
Если вы посмотрите ближе, вы увидите, что работа действительно потерпела неудачу только на одном компьютере, что привело нас к следующему шагу. Когда вы попытаетесь получить результаты для задания, если вы укажете имя задания или идентификатор родителя, PowerShell вернет данные из всех дочерних заданий. Проблема в том, что если в одном из дочерних заданий произошла ошибка, мы останемся с красным текстом.
Есть два способа обойти это. Во-первых, если вы знаете, на каких компьютерах вы хотите получить результаты, вы можете просто использовать параметр ComputerName командлета Recieve -Job.
Есть два способа обойти это. Во-первых, если вы знаете, на каких компьютерах вы хотите получить результаты, вы можете просто использовать параметр ComputerName командлета Recieve -Job.

Get-Job –Id 3 | Receive-Job –Keep –ComputerName Viper

Кроме того, вы можете получить результаты из определенного дочернего задания, используя свой идентификатор задания.
Кроме того, вы можете получить результаты из определенного дочернего задания, используя свой идентификатор задания.

Get-Job -Id 3 –IncludeChildJob

Image
Image

Get-Job -Id 5 | Receive-Job –Keep

Image
Image

Работа WMI

Задания WMI - это то же самое, что и удаленные задания, требующие добавления только параметра -AsJob в командлет Get-WmiObject.

Image
Image
К сожалению, это означает, что они также подвержены тем же самым проблемам, о которых я упоминал в разделе «Удаленные задания».
К сожалению, это означает, что они также подвержены тем же самым проблемам, о которых я упоминал в разделе «Удаленные задания».

Запланированные вакансии

Последние три вида работ, на которые мы смотрели, не были постоянными, а это значит, что они доступны только в текущем сеансе. В основном, это означает, что если вы начинаете работу, а затем открываете другую консоль 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

Рекомендуемые: