- WMI и PowerShell-ови CIM cmdlets вам омогућавају да ефикасно испитивате и мењате локалне и удаљене информације о управљању.
- CimSessions са WSMan-ом или DCOM-ом олакшавају безбедан и компатибилан приступ модерној и старој умреженој опреми.
- Употреба напредних функција, модула, послова и DSC-а претвара PowerShell у комплетан језик за аутоматизацију инфраструктуре.
- PowerShell интегрише локално, удаљено, Azure и Microsoft 365 управљање у једно окружење, смањујући понављајуће ручне задатке.

Ако радите на администрирању Windows система, пре или касније ћете наићи на PowerShell, WMI и напредну аутоматизацију . Није само ствар у томе да знате како да покренете неколико команди: када управљате десетинама или стотинама сервера, потребан вам је озбиљан, структуриран и безбедан приступ прикупљању информација, примени промена и понављању задатака без претеривања... или кварења било чега.
У наредним редовима, истражићемо, мирно, али темељно, како да искористимо WMI, CIM и PowerShell даљинску комуникацију за аутоматизацију свега, од једноставних упита до сложених инфраструктурних сценарија. Такође ћемо видети како се све ово уклапа са модулима, позадинским задацима, Azure-ом, Microsoft 365 и неким напредним функцијама које праве праву разлику у свакодневном раду систем администратора.
Побољшања PowerShell-а и преглед напредне аутоматизације
Windows PowerShell се много развио од својих раних верзија, а велики део те еволуције дошао је са Windows Server 2012, где је побољшана даљинска комуникација, проширени су доступни cmdlets-ови, а ствари попут дебаговања, позадинских послова и ограничених крајњих тачака су олакшане ради побољшања безбедности.
Једна од кључних идеја иза овог окружења је да администратори могу да креирају понашања слична cmdlet командама без опсежног кодирања , користећи напредне функције, модуле за вишекратну употребу и свеобухватни систем помоћи. То значи да уместо ослањања на различите графичке алате, можете да направите кохерентан скуп скрипти и модула који аутоматизују процесе за управљање серверима, мрежама, Active Directory-јем, Azure-ом или Microsoft 365.
У области напредне аутоматизације, истичу се и функције као што су послови за асинхроно извршавање задатака, токови рада, администрација заснована на конфигурацији помоћу PowerShell DSC-а и безбедносне опције као што су JEA (Just Enough Administration) или PowerShell Web Access, што омогућава детаљну контролу шта свака особа може да ради и одакле.
Читав овај екосистем се посебно добро уклапа са WMI и CIM, јер информације о управљању које открива оперативни систем (хардвер, услуге, процеси , конфигурација мреже, инсталирани софтвер итд.) постају скуп објеката које можете испитивати, филтрирати и мењати помоћу PowerShell команди дизајнираних за масовну аутоматизацију.
WMI и CIM: Кључни концепти и практичне разлике
Windows Management Instrumentation, познатији као WMI, је PowerShell-ова независна технологија која је годинама део Windows-а. Она открива спремиште информација о управљању оперативним системом, хардвером и многим апликацијама. Иако не зависи од PowerShell-а, PowerShell га у великој мери користи за аутоматизацију задатака.
Природни наследник WMI-ја у PowerShell екосистему су CIM (Common Information Model) cmdlets команде , представљене са PowerShell-ом 3.0. Ове cmdlets команде су груписане у CimCmdlets модулу и укључују команде као што су Get-CimInstance, Get-CimClass, New-CimInstance, Invoke-CimMethod, Register-CimIndicationEvent, Set-CimInstance и Remove-CimInstance, између осталих.
У старијим верзијама Windows PowerShell-а, као што су Windows 10 PowerShell 5.1 или Windows 11 PowerShell, и даље можете пронаћи класичне WMI cmdlet команде (Get-WmiObject, Invoke-WmiMethod, Register-WmiEvent, Remove-WmiObject, Set-WmiInstance). Међутим, ове cmdlet команде су застареле и више нису укључене у PowerShell 6 и новије верзије, тако да су релевантне само за одржавање старих скрипти или преглед старог кода.
Када неко говори о „упитивању WMI-ја помоћу CIM cmdlet-ова“, то није контрадикторно: CIM cmdlet-ови и даље приступају WMI информацијама , али то раде користећи модерније протоколе попут WSMan-а и конзистентнији API. У практичном смислу, за нове развоје, требало би да се фокусирате на CIM и разматрате WMI cmdlet-ове само када треба да мигрирате или разумете застареле скрипте.
Историјски гледано, многи администратори су користили VBScript са WQL језиком за упите за упите WMI-ја, на пример, повезивањем са именским простором root\CIMV2 и упитивањем класа као што је Win32_BIOS. Исти WQL упит се данас може поново користити помоћу Get-CimInstance прослеђивањем параметра -Query, што знатно поједностављује прелазак са VBScript-а на PowerShell без потребе за преписивањем логике од нуле.
Практична употреба Get-CimInstance и ефикасни упити
За свакодневни рад, најприроднији начин за упите WMI помоћу PowerShell-а је коришћење Get-CimInstance са параметром -ClassName , уместо писања пуних WQL упита. На пример, да бисте добили информације о BIOS-у, можете користити Get-CimInstance -ClassName Win32_BIOS и добићете објекат са својствима као што су Manufacturer, Name, SerialNumber или SMBIOSBIOSVersion.
Пошто је све у PowerShell-у објекат, веома је лако филтрирати и одабрати само оно што вам је потребно . Ако вас занима само серијски број, можете проследити резултат до `Select-Object -Property SerialNumber` или користити `Select-Object -ExpandProperty SerialNumber` да бисте избацили једноставан стринг уместо објекта са својством. Још једна уобичајена опција је коришћење синтаксе тачке (`Get-CimInstance ...`).SerialNumber` за директан приступ вредности.
Вреди напоменути да, подразумевано, WMI упити враћају више својстава него што ћете заправо користити . На локалној машини, ово је обично у реду, али када почнете да упите многе удаљене машине, то се претвара у додатно време обраде и непотребан мрежни саобраћај. Ту долази до изражаја параметар `-Property` функције `Get-CimInstance`, који вам омогућава да ограничите која се својства преузимају из извора.
На пример, навођењем -Property SerialNumber смањујете количину пренетих података, чинећи упит бржим и ефикаснијим, посебно у великим размерама . Овај менталитет „питајте само оно што вам је потребно“ је кључан приликом дизајнирања скрипти за инвентар или ревизију које се покрећу на десетинама или стотинама машина.
Укратко, Get-CimInstance нуди моћну равнотежу између једноставности (једна командна линија) и флексибилности , без обзира да ли радите са конкретним класама, старим WQL упитима или одређеним својствима која желите да оптимизујете за преузимање.
Удаљене консултације са CIM-ом, сесијама и WSMan/DCOM протоколима
Када се удаљите од локалне машине и почнете да приступате удаљеним машинама, у игру долазе неколико фактора: дозволе, комуникациони протокол и перформансе . Иако многи људи сматрају PowerShell „опасаним“, истина је да вам он не даје никакве додатне привилегије: имате потпуно исте дозволе као и са графичким интерфејсом или било којим другим алатом, ни више ни мање.
Ако покушате да покренете `Get-CimInstance -ComputerName Server -ClassName Win32_BIOS` без довољних привилегија на тој машини, добићете грешку „Access is denied“ (Приступ је одбијен) . То није зато што PowerShell не ради; једноставно је у питању корисник под којим покрећете сесију нема право приступа тим информацијама у WMI-ју. Наравно, можете отворити конзолу као администратор домена, али то значи да ће свака команда бити извршена са тим привилегијама, што је непотребан ризик у многим окружењима.
Препорука је да се примени принцип најмањих привилегија и повећају привилегије само када је то неопходно . У cmdlet-овима који подржавају параметар -Credential, можете навести алтернативне акредитиве само за дотичну команду. Међутим, Get-CimInstance не прихвата директно -Credential, и ту CimSessions долази до изражаја као елегантно решење.
CimSession је трајна веза са удаљеним рачунаром коју можете креирати помоћу New-CimSession, прослеђујући име рачунара и акредитиве (на пример, New-CimSession -ComputerName dc01 -Credential (Get-Credential)). Ова сесија се чува у променљивој, као што је $CimSession, а затим се поново користи са Get-CimInstance коришћењем параметра -CimSession уместо -ComputerName, што вам омогућава да обједините више упита у једну везу.
Поред захтева за акредитиве, Get-CimInstance подразумевано користи WSMan протокол (заснован на WinRM-у) . То значи да удаљена машина мора имати WSMan стек верзије 3.0 или новију, која се обично налази у PowerShell-у 3.0 и новијим верзијама. Можете проверити верзију WSMan стека на машини помоћу `Test-WSMan -ComputerName RemoteComputer` и проверити да ли је вредност „Stack“ 3.0 или виша да бисте користили овај метод повезивања.
CIM сесије са DCOM-ом и компатибилношћу са назад
Старији WMI cmdlets засновани на Get-WmiObject ослањају се на DCOM протокол, који и даље подржавају старије верзије Windows-а . Проблем је што на модернијим системима заштитни зидови често блокирају DCOM подразумевано, захтевајући да отворите одређене портове да бисте га користили каквог јесте, што може кршити безбедносне политике ваше организације.
CIM cmdlets нуде моћно решење: можете креирати опције сесије помоћу `New-CimSessionOption -Protocol Dcom` , сачувати их у променљивој (на пример, `$DCOM`), а затим их комбиновати са `New-CimSession` да бисте генерисали CimSession која користи DCOM уместо WSMan. Ово вам омогућава да се повежете са веома старим серверима, чак и онима који претходе Windows Server 2000, где PowerShell није ни инсталиран.
Обично је згодно чувати акредитиве администратора домена или акредитиве за налог са повишеним привилегијама у променљивој (на пример, $Cred = Get-Credential ) како бисте избегли да их сваки пут куцате. Затим, помоћу нечега попут New-CimSession -ComputerName sql03 -SessionOption $DCOM -Credential $Cred, можете покренути CimSession преко DCOM-а на старији сервер који не подржава WSMan, али има WMI.
Из перспективе писца скрипте, главна предност је што се излаз функције `Get-CimInstance` не мења у зависности од протокола : добијате исте објекте и својства без обзира да ли користите WSMan или DCOM. Ово знатно поједностављује логику јер можете да капсулирате детекцију одговарајућег протокола у функцији и дозволите да остатак кода увек ради транспарентно са CimSessions.
У ствари, прилично је уобичајено креирати прилагођене функције које тестирају WSMan помоћу Test-WSMan и, ако није доступан, аутоматски прелазе у DCOM помоћу New-CimSessionOption. Ово вам омогућава да стандардизујете креирање CimSession-а у мешовитим окружењима са модерним и старијим серверима, без реплицирања логике повезивања у свим вашим скриптама.
Управљање, листање и чишћење CimSessions-а
Када почнете интензивно да користите CimSessions, важно је да их пратите како бисте избегли акумулирање непотребних веза. Помоћу Get-CimSession можете да наведете све отворене сесије , видите на коју машину указују и проверите који протокол користе (WSMAN или DCOM), што је веома корисно за дијагностиковање проблема са повезивањем или аутентификацијом.
Такође можете да преузмете те постојеће сесије у променљивој, на пример $CimSession = Get-CimSession , и да их користите у једној команди Get-CimInstance -CimSession $CimSession -ClassName Win32_BIOS да бисте истовремено упитали неколико рачунара, комбинујући WSMan и DCOM сесије у истој операцији.
Када завршите са анализом тих информација, добра је идеја да затворите сесије како бисте избегли непотребно остављање ресурса отвореним. Командлет Get-CimSession | Remove-CimSession уклања све активне CimSession сесије из тренутног профила одједном. Алтернативно, можете проследити одређене сесије командлету Remove-CimSession да бисте затворили само неке од њих.
Овакав начин рада вам омогућава да имате контролисане циклусе повезивања и прекидања везе , што се топло препоручује када користите скрипте унутар заказаних задатака, аутоматизационих рунбукова или цевовода континуиране интеграције који могу довести до застоја сесија ако експлицитно не планирате то чишћење.
PowerShell као свеобухватни језик за аутоматизацију
Поред WMI-ја и CIM-а, PowerShell је постао језик за аутоматизацију опште намене који далеко превазилази типичну скрипту за управљање Windows-ом. Постоје књиге и читави курсеви посвећени његовим напредним могућностима, који покривају све, од инсталације на Linux-у и Windows-у до развоја дистрибутивних модула путем NuGet-а, па чак и модерних развојних окружења попут Visual Studio Code-а.
Уобичајена полазна тачка је темељно разумевање напредних функција PowerShell-а , које вам омогућавају да дефинишете параметре, извршите валидацију, генеришете структурирани излаз и приступите интегрисаној помоћи готово на нивоу изворног cmdlet-а. Одатле, организовање кода у модуле олакшава колаборативни рад унутар оперативних тимова, јер можете верзионисати и објављивати ове модуле у интерним или јавним NuGet-базираним спремиштима.
Рад са прилагођеним објектима и класама је такође кључан , отварајући врата много богатијим моделима података него што то чине типични линеарни скриптови. Ово вам омогућава да инкапсулирате пословну логику, поново користите структуре и дизајнирате интерне API-је за свој менаџерски тим, а све то покреће PowerShell механизам.
У области напредне аутоматизације, позадински послови и токови рада играју кључну улогу , омогућавајући управљање асинхроним задацима, извршавање дугих операција без блокирања конзоле и оркестрацију сложених секвенци на више машина. Ове могућности су савршено решење за групне упите ка WMI/CIM-у и сценарије удаљене администрације, где је често потребно чекати да системи имплементирају промене или врате податке.
Још једна кључна компонента је PowerShell DSC (Desired State Configuration - конфигурација жељеног стања), која вам омогућава да дефинишете жељену конфигурацију инфраструктуре (улоге, функције, услуге, датотеке, безбедносна подешавања итд.) и да више пута примењујете та стања. У комбинацији са информацијама које добијате путем WMI/CIM-а, можете открити одступања, проактивно их исправити и одржавати конзистентна окружења уз мање ручног напора.
Локално, удаљено и управљање у облаку помоћу PowerShell-а
На локалном нивоу, PowerShell пружа cmdlet команде за управљање услугама домена Active Directory , конфигурисање мрежа и администрирање сервера. У оперативном систему Windows 10 и новијим верзијама, интеграција је још дубља, што вам омогућава да аутоматизујете све, од креирања веб локација до управљања објектима Active Directory и конфигурисања мрежних адаптера.
Мање позната, али веома корисна компонента су PSProviders и PSDrives , које вам омогућавају да третирате различите локације за складиштење (систем датотека, регистар, Active Directory итд.) као да су навигациони дискови. Захваљујући томе, можете, на пример, креирати групе Active Directory-ја, кључеве регистра или структуре фасцикли на удаљеним рачунарима користећи исту синтаксу коју бисте користили за навигацију по чврстом диску.
Што се тиче удаљене администрације, PowerShell интегрише моћан скуп функција за повезивање са једним или више рачунара и извршавање команди у ваше име . Можете користити трајне PSSession сесије, напредне технике удаљеног приступа, сценарије „један на више“ (за истовремено управљање више сервера) или сценарије „један на један“ за отклањање грешака у специфичним случајевима. Све ово, наравно, уз поштовање архитектуре и безбедносног модела удаљеног приступа.
Облак такође игра фундаменталну улогу данас. Са Azure PowerShell-ом и Azure Cloud Shell-ом, можете управљати виртуелним машинама, складиштем и претплатама директно из командне линије. Инсталирање Azure PowerShell модула и упознавање са њима је готово обавезно ако управљате хибридним или потпуно Azure-хостованим окружењима.
С друге стране, PowerShell се такође етаблирао као алат за управљање Microsoft 365 (Exchange Online, SharePoint Online, Teams, корисници и лиценце). Од креирања и управљања налозима до администрирања Exchange Online ресурса, укључујући групе, SharePoint сајтове и Microsoft Teams, све се може оркестрирати помоћу скрипти које драстично смањују ручни рад на веб порталу.
Скриптовање, цевоводи и најбоље радне праксе
Да бисте извукли максимум из напредне аутоматизације са WMI и CIM, неопходно је савладати PowerShell-ов модел цевовода . За разлику од других шкољки, овде не прослеђујете обичан текст, већ комплетне објекте, што вам омогућава да бирате, сортирате, мерите, филтрирате, набрајате и трансформишете информације са великом прецизношћу.
Учење рада са цевоводима подразумева правилно коришћење командлета за селекцију и филтрирање , разумевање начина набрајања сложених објеката и учење начина преноса података између команди и скрипти без губитка информација. Ово је појачано организованом употребом променљивих, низова и хеш табела, које делују као привремене структуре података на којима се гради напреднија логика.
Следећи корак је само скриптовање: паковање команди у скрипте за вишекратну употребу са контролом тока (if, for, foreach), увоз података из CSV датотека или других формата, обрада корисничког уноса, обрада грешака и евидентирање догађаја. Све ово вам омогућава да пређете са изолованих команди на робусније, уграђене алате.
Решавање проблема и руковање грешкама су посебно важни у великим аутоматизованим окружењима са WMI/CIM-ом, јер прекид мреже, погрешно конфигурисана дозвола или недостајућа класа могу прекинути процес ако се њима не управља правилно. Са блоковима try/catch, конфигурабилним акцијама у случају грешке и детаљним евидентирањем, можете предвидети и ефикасније реаговати на ове ситуације.
Коначно, све што је везано за функције и модуле заокружује круг : потписујете скрипте како бисте осигурали њихов интегритет, пакујете функције у модуле, дистрибуирате те модуле у интерне или јавне репозиторијуме и креирате екосистем дељених алата унутар ваше организације. На овај начин, сваки нови развој на WMI, CIM или даљинском управљању је интегрисан у кохерентан и лако одржавајући пакет.
Када комбинујете све горе наведено – WMI/CIM, удаљене сесије, скриптовање, асинхроне задатке, DSC, Azure и Microsoft 365 – добијате окружење у којем напредна аутоматизација помоћу PowerShell-а постаје језгро администрације. Са чврстом основом најбољих пракси, интелигентним коришћењем CimSessions-а (са WSMan-ом и DCOM-ом) и модуларним дизајном скрипти, можете управљати хетерогеним инфраструктурама доследно, безбедно и далеко ефикасније него ослањајући се искључиво на графичке чаробњаке или изоловане алате.
Индекс
- 1 Побољшања PowerShell-а и преглед напредне аутоматизације
- 2 WMI и CIM: Кључни концепти и практичне разлике
- 3 Практична употреба Get-CimInstance и ефикасни упити
- 4 Удаљене консултације са CIM-ом, сесијама и WSMan/DCOM протоколима
- 5 CIM сесије са DCOM-ом и компатибилношћу са назад
- 6 Управљање, листање и чишћење CimSessions-а
- 7 PowerShell као свеобухватни језик за аутоматизацију
- 8 Локално, удаљено и управљање у облаку помоћу PowerShell-а
- 9 Скриптовање, цевоводи и најбоље радне праксе

