- CIM cmdlety WMI a PowerShellu vám umožňujú efektívne vyhľadávať a upravovať lokálne a vzdialené informácie o správe.
- CimSessions s WSMan alebo DCOM umožňujú bezpečný a kompatibilný prístup k moderným aj starším sieťovým zariadeniam.
- Použitie pokročilých funkcií, modulov, úloh a DSC premieňa PowerShell na kompletný jazyk pre automatizáciu infraštruktúry.
- PowerShell integruje lokálnu a vzdialenú správu, správu Azure a Microsoft 365 do jedného prostredia, čím sa znižuje počet opakujúcich sa manuálnych úloh.

Ak pracujete na správe systémov Windows, skôr či neskôr narazíte na problémy s... PowerShell, WMI a pokročilá automatizáciaNejde len o to, vedieť, ako spustiť štyri príkazy: keď spravujete desiatky alebo stovky serverov, potrebujete seriózny, štruktúrovaný a bezpečný prístup k zhromažďovaniu informácií, aplikovaniu zmien a opakovaniu úloh bez toho, aby ste sa zbláznili... alebo niečo pokazili.
V nasledujúcich riadkoch pokojne, ale dôkladne preskúmame, ako využiť Vzdialená komunikácia cez WMI, CIM a PowerShell automatizovať všetko od jednoduchých dotazov až po zložité infraštruktúrne scenáre. Uvidíme tiež, ako to všetko zapadá do modulov, úloh na pozadí, Azure, Microsoft 365 a niektorých pokročilých funkcií, ktoré skutočne ovplyvňujú každodennú prácu správcu systému.
Vylepšenia PowerShellu a prehľad pokročilej automatizácie
Windows PowerShell sa enormne vyvinul Od svojich najstarších verzií, pričom veľká časť tohto vývoja prišla s Windows Serverom 2012, kde sa zlepšila vzdialená komunikácia, rozšírili sa dostupné cmdlety a zjednodušili sa veci ako ladenie, úlohy na pozadí a obmedzené body pripojenia s cieľom zlepšiť bezpečnosť.
Jednou z kľúčových myšlienok tohto prostredia je, že administrátori môžu Vytvárajte správanie podobné cmdletom bez podrobného programovania, spoliehajúc sa na pokročilé funkcie, opakovane použiteľné moduly a veľmi komplexný systém pomoci. To znamená, že namiesto spoliehania sa na roztrúsené grafické nástroje si môžete vytvoriť ucelenú sadu skriptov a modulov, ktoré automatizujú procesy správy serverov, sietí, služby Active Directory, Azure alebo Microsoft 365.
V oblasti pokročilá automatizácia Za zmienku stoja aj funkcie ako jobs pre asynchrónne spúšťanie úloh, pracovné postupy, administrácia založená na konfigurácii pomocou PowerShell DSC a možnosti zabezpečenia, ako napríklad JEA (Just Enough Administration) alebo PowerShell Web Access, ktoré umožňujú detailnú kontrolu nad tým, čo a odkiaľ môže každá osoba robiť.
Celý tento ekosystém sa obzvlášť dobre hodí k WMI a CIM, pretože informácie o správe zverejnené operačným systémom (hardvér, služby, procesy(konfigurácia siete, nainštalovaný softvér atď.) sa stáva sadou objektov, ktoré môžete dotazovať, filtrovať a upravovať pomocou príkazov PowerShell určených na hromadnú automatizáciu.
WMI a CIM: Kľúčové koncepty a praktické rozdiely
Instrumentácia správy systému Windows, známejšia ako WMI je technológia nezávislá od PowerShellu. Je súčasťou systému Windows už roky a poskytuje úložisko administratívnych informácií o operačnom systéme, hardvéri a mnohých aplikáciách. Nezávisí od PowerShellu, ale PowerShell ho vo veľkej miere využíva na automatizáciu úloh.
Prirodzeným nástupcom WMI v ekosystéme PowerShell je cmdlety CIM (Common Information Model)Tieto cmdlety, predstavené v PowerShelle 3.0, sú zoskupené v module CimCmdlets a zahŕňajú okrem iného príkazy ako Get-CimInstance, Get-CimClass, New-CimInstance, Invoke-CimMethod, Register-CimIndicationEvent, Set-CimInstance a Remove-CimInstance.
V starších verziách prostredia Windows PowerShell, ako napríklad verzia 5.1 v systéme Windows 10 alebo Windows 11, stále nájdete klasické cmdlety WMI (Get-WmiObject, Invoke-WmiMethod, Register-WmiEvent, Remove-WmiObject, Set-WmiInstance). Tieto cmdlety sú však zastarané a už nie sú súčasťou PowerShellu 6 a novších verzií, takže sú relevantné iba na údržbu starších skriptov alebo kontrolu starého kódu.
Nie je protirečivé, keď niekto hovorí o „dotazovaní WMI pomocou CIM cmdletov“: Rutiny cmdlets CIM naďalej pristupujú k informáciám WMIRobia to však pomocou modernejších protokolov, ako je WSMan, a konzistentnejšieho API. Z praktických dôvodov by ste sa pri novom vývoji mali zamerať na CIM a cmdlety WMI zvažovať iba vtedy, keď potrebujete migrovať alebo porozumieť starším skriptom.
Historicky mnoho administrátorov používalo VBScript s dotazovacím jazykom WQL na dotazovanie WMI, napríklad pripojením sa k mennému priestoru. koreň\CIMV2 a dotazovanie tried ako Win32_BIOS. Ten istý WQL dotaz je možné dnes znova použiť pomocou Get-CimInstance odovzdaním parametra -Query, čo výrazne zjednodušuje prechod z VBScript na PowerShell bez nutnosti prepisovania logiky od začiatku.
Praktické využitie Get-CimInstance a efektívne dotazy
Pre každodennú prácu je najprirodzenejším spôsobom dotazovania WMI pomocou PowerShellu použitie Get-CimInstance s parametrom -ClassNameNamiesto písania kompletných WQL dotazov môžete na získanie informácií o BIOSe použiť Get-CimInstance -ClassName Win32_BIOS. Toto vráti objekt s vlastnosťami, ako napríklad Výrobca, Názov, Sériové číslo alebo Verzia SMBIOSBIOS.
Keďže všetko v PowerShelle sú objekty, je to veľmi jednoduché Filtrujte a vyberte si len to, čo potrebujeteAk vás zaujíma iba sériové číslo, môžete výsledok presmerovať do `Select-Object -Property SerialNumber` alebo použiť `Select-Object -ExpandProperty SerialNumber` na výstup jednoduchého reťazca namiesto objektu s vlastnosťou. Ďalšou bežnou možnosťou je použitie bodkovej syntaxe (`Get-CimInstance ...`).SerialNumber` na priamy prístup k hodnote.
Stojí za zmienku, že štandardne, Dotazy WMI vracajú viac vlastností, ako v skutočnosti použijeteNa lokálnom počítači to zvyčajne nespôsobuje žiadne problémy, ale keď začnete dotazovať veľa vzdialených počítačov, premieta sa to do dodatočného času spracovania a zbytočnej sieťovej prevádzky. Tu prichádza na rad parameter `-Property` funkcie `Get-CimInstance`, ktorý vám umožňuje obmedziť, ktoré vlastnosti sa načítajú zo zdroja.
Napríklad zadaním vlastnosti -Property SerialNumber znížite množstvo prenášaných informácií, čím sa dotaz stane rýchlejšie a efektívnejšie, najmä vo veľkom meradleTáto mentalita „objednať si len to, čo potrebujem“ je kľúčová pri navrhovaní skriptov pre inventarizáciu alebo audit, ktoré bežia na desiatkach alebo stovkách počítačov.
Stručne povedané, Get-CimInstance vám ponúka veľmi silnú rovnováhu medzi jednoduchosť (jeden príkazový riadok) a flexibilitaČi už pracujete s konkrétnymi triedami, staršími WQL dotazmi alebo konkrétnymi vlastnosťami, ktoré chcete optimalizovať pre vyhľadávanie.
Vzdialkové konzultácie s CIM, sedeniami a protokolmi WSMan/DCOM
Keď sa vzdiali od lokálneho tímu a začne dotazovať vzdialené počítače, do hry vstupuje niekoľko faktorov: povolenia, komunikačný protokol a výkonHoci veľa ľudí vníma PowerShell ako niečo „nebezpečné“, pravdou je, že vám neposkytuje žiadne ďalšie privilégiá: máte presne rovnaké oprávnenia ako v grafickom rozhraní alebo akomkoľvek inom nástroji, nič viac ani nič menej.
Ak sa pokúsite spustiť príkaz Get-CimInstance -ComputerName Server -ClassName Win32_BIOS bez dostatočných oprávnení na danom počítači, Zobrazí sa vám chyba „Prístup bol odmietnutý“.Nie je to tak, že PowerShell zlyháva; ide jednoducho o to, že používateľ, pod ktorým spúšťate reláciu, nemá právo na prístup k týmto informáciám vo WMI. Konzolu môžete samozrejme otvoriť ako správca domény, ale to znamená, že akýkoľvek príkaz bude vykonaný s týmito oprávneniami, čo je v mnohých prostrediach zbytočné riziko.
Odporúča sa uplatniť zásadu minimálne privilégiá a zvyšovať ich iba v prípade potrebyV cmdletoch, ktoré podporujú parameter -Credential, môžete pre daný príkaz zadať alternatívne poverenia. Get-CimInstance však priamo neakceptuje parameter -Credential a tu prichádza na rad CimSessions ako elegantné riešenie.
CimSession je trvalé pripojenie k vzdialenému počítaču, ktoré môžete vytvoriť pomocou príkazu New-CimSession, pričom odovzdáte názov počítača a prihlasovacie údaje (napríklad New-CimSession -ComputerName dc01 -Credential (Get-Credential)). Táto relácia je uložená v premennej, ako napríklad $CimSession a potom sa znova použije s Get-CimInstance použitím parametra -CimSession namiesto -ComputerName, čo umožňuje sústrediť viacero dotazov do jedného pripojenia.
Okrem problému s povereniami používa Get-CimInstance predvolenú hodnotu Protokol WSMan (založený na WinRM)To znamená, že vzdialený počítač musí mať verziu zásobníka WSMan 3.0 alebo vyššiu, čo je typické pre PowerShell 3.0 a novšie verzie. Verziu zásobníka WSMan na počítači môžete skontrolovať pomocou príkazu `Test-WSMan -ComputerName RemoteComputer` a overiť, či je hodnota „Stack“ 3.0 alebo vyššia, aby ste mohli použiť túto metódu pripojenia.
Relácie CIM s DCOM a spätnou kompatibilitou
Staršie rutiny cmdlets WMI založené na Get-WmiObject sa spoliehajú na Protokol DCOM, ktorý je stále kompatibilný so staršími verziami systému WindowsProblém je v tom, že v modernejších systémoch firewall zvyčajne štandardne blokuje DCOM a ak ho chcete používať tak, ako je, musíte otvoriť konkrétne porty, čo môže byť v rozpore s bezpečnostnými politikami organizácie.
CIM cmdlety ponúkajú výkonný kompromis: môžete vytvoriť možnosti relácie pomocou Nová možnosť relácie CimSessionOption -Protocol DcomMôžete ich uložiť do premennej (napríklad $DCOM) a potom ich skombinovať s New-CimSession, čím vygenerujete CimSession, ktorá používa DCOM namiesto WSMan. To vám umožní pripojiť sa k veľmi starým serverom, dokonca aj k tým, ktoré sú staršie ako Windows Server 2000, kde PowerShell nie je ani nainštalovaný.
Zvyčajne je vhodné uložiť poverenia správcu domény alebo účtu so zvýšenými oprávneniami do premennej (napríklad $Cred = Získať povereniaaby ste ich nemuseli zadávať zakaždým. Potom pomocou niečoho ako New-CimSession -ComputerName sql03 -SessionOption $DCOM -Credential $Cred môžete spustiť CimSession cez DCOM na starý server, ktorý nepodporuje WSMan, ale má WMI.
Z pohľadu scenáristu je veľkou výhodou to, že Výstup funkcie Get-CimInstance sa nemení v závislosti od protokolu.Získate rovnaké objekty a vlastnosti, či už používate WSMan alebo DCOM. To výrazne zjednodušuje logiku, pretože môžete zapuzdriť detekciu príslušného protokolu do funkcie a nechať zvyšok kódu vždy transparentne pracovať s CimSessions.
V skutočnosti je celkom bežné vytvárať vlastné funkcie, ktoré testujú WSMan pomocou Test-WSMan a ak nie je k dispozícii, automaticky sa prepnú do DCOM pomocou New-CimSessionOption. Týmto spôsobom môžete Štandardizujte vytváranie CimSessions v zmiešaných prostrediach s modernými aj staršími servermi bez replikácie logiky pripojenia vo všetkých vašich skriptoch.
Správa, zoznamovanie a čistenie CimSessions
Keď začnete intenzívne používať CimSessions, je dôležité si to sledovať, aby ste predišli hromadeniu zbytočných pripojení. Get-CimSession vám umožňuje zobraziť zoznam všetkých otvorených relácií, zistite, na ktoré zariadenie ukazujú, a skontrolujte, aký protokol používajú (WSMAN alebo DCOM), čo je veľmi užitočné na diagnostikovanie problémov s pripojením alebo autentifikáciou.
Tieto existujúce relácie môžete tiež načítať napríklad v premennej $CimSession = Get-CimSessiona použiť ich v jednom príkaze Get-CimInstance -CimSession $CimSession -ClassName Win32_BIOS na dotazovanie viacerých počítačov naraz, pričom sa relácie WSMan a DCOM kombinujú v jednej operácii.
Keď skončíte s preskúmaním týchto informácií, je najlepšie ukončiť relácie, aby ste predišli zbytočnému ponechaniu zdrojov otvorených. Get-CimSession | Remove-CimSession Týmto sa z aktuálneho profilu naraz odstránia všetky aktívne relácie CimSession. Prípadne môžete do rutiny Remove-CimSession odovzdať konkrétne relácie, čím sa zatvoria iba niektoré z nich.
Práca týmto spôsobom vám umožňuje mať riadené cykly pripájania a odpájaniaToto sa dôrazne odporúča pri používaní skriptov v rámci naplánovaných úloh, automatizačných runbookov alebo kanálov kontinuálnej integrácie, ktoré môžu spôsobiť zaseknutie relácií, ak toto čistenie explicitne neplánujete.
PowerShell ako komplexný automatizačný jazyk
Okrem WMI a CIM sa PowerShell stal univerzálny automatizačný jazyk Ide ďaleko za rámec typického administračného skriptu pre Windows. Existujú knihy a celé kurzy venované jeho pokročilým možnostiam, ktoré pokrývajú všetko od inštalácie v systémoch Linux a Windows až po vývoj distribuovateľných modulov prostredníctvom NuGetu a zahŕňajú moderné vývojové prostredia, ako je Visual Studio Code.
Bežným východiskovým bodom je pochopiť pokročilé funkcie PowerShelluTieto moduly vám umožňujú definovať parametre, overovanie, štruktúrovaný výstup a integrovanú pomoc takmer na úrovni natívneho cmdletu. Organizovanie kódu do modulov uľahčuje spoluprácu v prevádzkových tímoch, pretože tieto moduly môžete verzovať a publikovať v interných alebo verejných repozitároch založených na NuGet.
Kľúčová je aj spolupráca s vlastné objekty a triedyToto otvára dvere k oveľa bohatším dátovým modelom ako typické lineárne skripty. Umožňuje vám zapuzdriť obchodnú logiku, opätovne použiť štruktúry a navrhnúť interné API pre váš vlastný manažérsky tím, to všetko s využitím PowerShell enginu.
V oblasti pokročilej automatizácie zohrávajú dôležitú úlohu: Úlohy a pracovné postupy na pozadíTieto funkcie vám umožňujú spravovať asynchrónne úlohy, spúšťať dlhé operácie bez blokovania konzoly a organizovať zložité sekvencie na viacerých počítačoch. Sú perfektné pre hromadné dotazy WMI/CIM a scenáre vzdialenej správy, kde je často potrebné čakať, kým systémy implementujú zmeny alebo vrátia údaje.
Ďalším kľúčovým komponentom je PowerShell DSC (Desired State Configuration), ktorý vám umožňuje definovať požadovanú konfiguráciu infraštruktúry (roly, funkcie, služby, súbory, nastavenia zabezpečenia…) a opakovane aplikovať tieto stavy. V kombinácii s informáciami, ktoré získate prostredníctvom WMI/CIM, môžete odhaliť odchýlky, proaktívne ich opraviť a udržiavať konzistentné prostredia s menšou manuálnou námahou.
Lokálna, vzdialená a cloudová správa pomocou PowerShellu
Na čisto lokálnej úrovni poskytuje PowerShell cmdlets pre Správa doménových služieb Active DirectoryKonfigurácia siete a správa serverov. V systéme Windows 10 a novších verziách je integrácia ešte hlbšia, čo vám umožňuje automatizovať všetko od vytvárania webových stránok až po správu objektov služby Active Directory a konfiguráciu sieťového adaptéra.
Menej známym, ale veľmi užitočným kúskom je Poskytovatelia PS a disky PSTieto funkcie vám umožňujú zaobchádzať s rôznymi úložiskami (súborové systémy, registre, služba Active Directory atď.) ako s navigovateľnými diskami. To vám napríklad umožňuje vytvárať skupiny služby Active Directory, kľúče registra alebo štruktúry priečinkov na vzdialených počítačoch pomocou rovnakej syntaxe, akú by ste použili na navigáciu na pevnom disku.
Pokiaľ ide o vzdialenú správu, PowerShell integruje veľmi výkonnú sadu funkcií pre pripojiť sa k jednému alebo viacerým počítačom a spustiť príkazy v tvojom meneNa ladenie špecifických prípadov môžete použiť perzistentné relácie PSSession, pokročilé techniky vzdialenej komunikácie, scenáre typu jeden k mnohým (na súčasnú správu viacerých serverov) alebo scenáre typu jeden k jednému. To všetko samozrejme pri rešpektovaní architektúry a bezpečnostného modelu vzdialeného prístupu.
Cloud dnes tiež zohráva zásadnú úlohu. S Azure PowerShell a Azure Cloud Shell Virtuálne počítače, úložisko a predplatné môžete spravovať priamo z príkazového riadka. Inštalácia modulov Azure PowerShell a zvyknutie si na prácu s nimi je takmer nevyhnutné, ak spravujete hybridné alebo plne hostované prostredia Azure.
Na druhej strane sa PowerShell etabloval aj ako Referenčný nástroj na správu služby Microsoft 365 (Exchange Online, SharePoint Online, Teams, používatelia a licencie). Od vytvárania a správy účtov až po administráciu zdrojov Exchange Online vrátane skupín, lokalít SharePoint a Microsoft Teams je možné všetko riadiť pomocou skriptov, ktoré drasticky znižujú manuálnu prácu na webovom portáli.
Skriptovanie, kanály a osvedčené pracovné postupy
Aby ste čo najlepšie využili pokročilú automatizáciu s WMI a CIM, je nevyhnutné zvládnuť Model kanála PowerShellNa rozdiel od iných shellov tu neposielate obyčajný text, ale celé objekty, čo vám umožňuje vyberať, triediť, merať, filtrovať, vymenúvať a transformovať informácie s veľkou presnosťou.
Naučiť sa pracovať s channelingom zahŕňa jeho správne používanie cmdlety na výber a filtrovanieTo zahŕňa pochopenie toho, ako vymenovať zložité objekty a ako prenášať dáta medzi príkazmi a skriptmi bez straty informácií. Toto je posilnené štruktúrovaným použitím premenných, polí a hašovacích tabuliek, ktoré fungujú ako dočasné dátové štruktúry, na ktorých sa dá budovať pokročilejšia logika.
Ďalším krokom je Skriptovanie ako také: balenie príkazov do opakovane použiteľných skriptovVďaka riadeniu toku (if, for, foreach), importu údajov zo súborov CSV alebo iných formátov, spracovaniu vstupov od používateľa, spracovaniu chýb a protokolovaniu udalostí vám to umožňuje prejsť od jednotlivých príkazov k robustnejším interným nástrojom.
Riešenie problémov a riešenie chýb je obzvlášť dôležité v rozsiahlych automatizačných prostrediach s WMI/CIM, pretože výpadok siete, nesprávne nakonfigurované povolenie alebo neexistujúca trieda Ak nie sú správne spravované, môžu narušiť proces. Vďaka blokom try/catch, konfigurovateľným akciám pri chybách a podrobnému protokolovaniu môžete tieto situácie predvídať a lepšie na ne reagovať.
Nakoniec, všetko, čo s tým súvisí funkcie a moduly uzatvárajú kruhPodpisujete skripty, aby ste zabezpečili ich integritu, balíte funkcie do modulov, distribuujete tieto moduly do interných alebo verejných repozitárov a vytvárate ekosystém zdieľaných nástrojov v rámci vašej organizácie. Týmto spôsobom je akýkoľvek nový vývoj v oblasti WMI, CIM alebo vzdialenej komunikácie integrovaný do uceleného a ľahko udržiavateľného balíka.
Keď spočítate všetky vyššie uvedené prvky – WMI/CIM, vzdialené relácie, skriptovanie, asynchrónne úlohy, DSC, Azure a Microsoft 365 – získate prostredie, v ktorom pokročilá automatizácia s PowerShellom Stáva sa centrálnym centrom administrácie. Vďaka solídnemu základu osvedčených postupov, inteligentnému využívaniu CimSessions (s WSMan aj DCOM) a modulárnemu dizajnu skriptov môžete spravovať heterogénne infraštruktúry konzistentne, bezpečne a oveľa efektívnejšie, ako keby ste sa spoliehali výlučne na grafických sprievodcov alebo izolované nástroje.
obsah
- Vylepšenia PowerShellu a prehľad pokročilej automatizácie
- WMI a CIM: Kľúčové koncepty a praktické rozdiely
- Praktické využitie Get-CimInstance a efektívne dotazy
- Vzdialkové konzultácie s CIM, sedeniami a protokolmi WSMan/DCOM
- Relácie CIM s DCOM a spätnou kompatibilitou
- Správa, zoznamovanie a čistenie CimSessions
- PowerShell ako komplexný automatizačný jazyk
- Lokálna, vzdialená a cloudová správa pomocou PowerShellu
- Skriptovanie, kanály a osvedčené pracovné postupy

