If-Koubou

Geek School: Научете как да използвате работни места в PowerShell

Geek School: Научете как да използвате работни места в PowerShell (Как да)

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

Не забравяйте да прочетете предишните статии в серията:

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

И останете настроени за останалата част от серията през цялата седмица.

Работни места на фона

Досега всичко, което ви показах в 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 Jobs

Работните задачи на 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)

В това командване има доста неща, така че нека да го счупим.

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

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

Get-ScheduledJob

Това е всичко за него.