Начална » как да » Geek School Научете как да използвате задания в PowerShell

    Geek School Научете как да използвате задания в PowerShell

    PowerShell има четири типа задачи - Предварителни задания, Отдалечени задачи, Задания за WMI и Планирани задания. Присъединете се към нас, когато разберем какви са те и как можем да ги използваме.

    Прочетете предишните статии от поредицата:

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

    Очаквайте останалата част от поредицата цяла седмица.

    Предишни работни места

    Досега всичко, което ви показвах в PowerShell, е синхронно, което означава, че въвеждаме нещо в черупката и не може да направи много, докато тази команда не приключи. Това е мястото на фоновите задания. За да стартирате фон, заданието просто предава скриптов блок в командлета Start-Job.

    Start-Job-Име GetFileList -Scriptblock Get-ChildItem C: \ t

    Сега сме свободни да правим каквото искаме в рамките на обвивката, докато този скриптов блок се изпълнява във фонов режим.

    Когато стартирате нова задача, PowerShell създава нов обект на задание, който представлява това задание. Можете да получите списък на всички задачи по всяко време, като изпълните командлета Get-Job.

    Обектите на задачите ви разказват за състоянието на заданията. Например, в горната снимка на екрана можем да видим, че имаме BackgroundJob наречен GetFileList, който все още работи, но вече е започнал да връща данни. Ако по някакъв начин решите, че заданието се изпълнява твърде дълго, лесно можете да го спрете, като го свържете с Stop-Job.

    Get-Job-Име GetFileList | Стоп-Job

    Все пак, след като сте спрели дадена работа, каквито и данни да са получили до момента, в който сте го спрели, все още е налице. Все пак има гоча. В PowerShell, след като получите резултатите за дадена работа, те се изтриват. За да останат, трябва да посочите параметъра за задържане на Receive-Job.

    Get-Job-Име GetFileList | Получаване на задание - Запазване

    След като приключите с работа, най-добре е да я премахнете. За да премахнете заданието, просто я преместете в командлета Remove-Job.

    Get-Job-Име GetFileList | Премахване на работното място

    Това ще го премахне от списъка със задания, които се връщат от Get-Job.

    Отдалечени задачи

    Преди няколко часа разгледахме как можем да използваме отдалечено управление, за да изпълним PowerShell команди на отдалечена машина, използвайки Invoke-Command, но знаете ли, че можете също да използвате Invoke-Command, за да стартирате отдалечена работа във фонов режим? За да направите това, просто добавете параметъра -AsJob в края на вашата команда:

    Invoke-Command -компютърно име Flash, Viper -Среден администратор -ScriptBlock gci -AsJob

    Това беше проста команда и трябваше да приключи до момента, така че нека разгледаме състоянието на нашите работни места.

    Хм, изглежда, че е неуспешно. Това ме довежда до първата ми работа с работни места. Когато създавате нова задача от какъвто и да е тип в PowerShell, тя създава една родителска задача в допълнение към едно детско задание за всеки компютър, срещу който се изпълнява задачата. Когато използвате командлета Get-Job, той само ви показва родителските задачи, а състоянието на състоянието е най-лошия сценарий, което означава, че дори ако командата не се изпълни само на един от сто компютъра, състоянието на родителските задания ще каже се провали. За да видите списък с дъщерни задачи, трябва да използвате параметъра IncludeChildJob.

    Ако погледнете по-отблизо, ще видите, че работата наистина се е провалила само на един компютър, което ни отвежда към следващата грешка. Когато опитате и получите резултатите за заданието, ако укажете името или идентификацията на заданието на родителя, PowerShell ще върне данните от всички дъщерни задачи. Проблемът е, че ако е имало грешка в едно от заданията за деца, ще останем с някакъв червен текст.

    Има два начина да се справим с това. Първо, ако знаете какви компютри искате да получавате, можете просто да използвате параметъра ComputerName на cmdlet на Receive -Job.

    Get-Job -Id 3 | Получаване на задание -Зареждане -Компютърно име Viper

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

    Get-Job -Id 3 -ВключванеДебел-работа

    Get-Job -Id 5 | Получаване на задание - Запазване

    Работа на WMI

    Работите на WMI са почти същите като отдалечените задания, изискващи само параметъра -AsJob да бъде добавен към командлета Get-WmiObject.

    За съжаление, това означава, че те също са предмет на същите разрешения, които споменах в раздела за отдалечени работни места.

    Планирани работни места

    Последните три вида работни места, които разглеждахме, не бяха постоянни, което означава, че те са достъпни само в текущата ви сесия. По принцип това означава, че ако започнете работа и след това отворите друга PowerShell конзола и стартирате Get-Job, няма да видите никакви задачи. Въпреки това, върнете се на конзолата, от която сте изхвърлили работата, ще можете да видите нейното състояние. Това е в контраст с планираните работни места, които са постоянни. По принцип, планираното задание е блок скрипт, който се изпълнява по график. В миналото същият ефект можеше да се постигне с помощта на Windows Task Scheduler, което наистина се случва под капака. За да създадете ново планирано задание, направете следното:

    Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption

    В тази команда има доста много неща, така че нека да ги разделим.

    • Първо, даваме на Scheduled Job име на GetEventLogs.
    • След това му съобщаваме, че когато се задействаме, искаме тя да изпълни съдържанието на указания скриптов блок, който основно получава най-новите 100 записа на регистъра на събития за сигурност.
    • След това определяме спусъка. Тъй като параметърът на тригера задейства обект на задействане като входен сигнал, използвахме командата за скоба, за да генерираме тригер, който ще изгасва всеки ден в 17:00.
    • Тъй като имаме работа с регистъра на събитията, трябва да стартираме като администратор, който можем да определим чрез създаване на нов обект ScheduledJobOption и да го предадем на параметъра ScheduledJobOption..

    Тъй като това е малко по-различен тип задание, ще трябва да използвате и друга команда за извличане на списък от всички планирани задачи на машина.

    Get-ScheduledJob

    Това е всичко.