PowerShell, WMI in CIM za napredno avtomatizacijo v sistemih Windows

Zadnja posodobitev: 27 marec 2026
  • Ukazi »cmdlet« CIM za WMI in PowerShell vam omogočajo učinkovito poizvedovanje in spreminjanje lokalnih in oddaljenih informacij o upravljanju.
  • CimSessions z WSMan ali DCOM omogočajo varen in združljiv dostop do sodobne in starejše omrežne opreme.
  • Uporaba naprednih funkcij, modulov, opravil in DSC spremeni PowerShell v popoln jezik za avtomatizacijo infrastrukture.
  • PowerShell združuje lokalno in oddaljeno upravljanje, upravljanje Azure in Microsoft 365 v eno samo okolje, kar zmanjšuje ponavljajoča se ročna opravila.

Napredna avtomatizacija PowerShell WMI

Če se ukvarjate z upravljanjem sistemov Windows, boste prej ali slej naleteli na PowerShell, WMI in napredno avtomatizacijo . Ne gre le za to, da znate zagnati nekaj ukazov: ko upravljate na desetine ali stotine strežnikov, potrebujete resen, strukturiran in varen pristop k zbiranju informacij, uveljavljanju sprememb in ponavljanju nalog, ne da bi pri tem znoreli ... ali karkoli pokvarili.

V naslednjih vrsticah bomo mirno, a temeljito raziskali, kako izkoristiti oddaljeno komunikacijo WMI, CIM in PowerShell za avtomatizacijo vsega, od preprostih poizvedb do kompleksnih infrastrukturnih scenarijev. Videli bomo tudi, kako se vse to ujema z moduli, opravili v ozadju, Azure, Microsoft 365 in nekaterimi naprednimi funkcijami, ki resnično vplivajo na vsakodnevno delo sistemskega skrbnika.

Izboljšave PowerShella in pregled napredne avtomatizacije

Windows PowerShell se je od svojih zgodnjih različic močno razvil , velik del tega razvoja pa je prišel s sistemom Windows Server 2012, kjer je bila izboljšana oddaljena komunikacija, razširjeni so bili razpoložljivi ukazi »cmdlet«, stvari, kot so odpravljanje napak, opravila v ozadju in omejene končne točke, pa so bile olajšane za izboljšanje varnosti.

Ena ključnih idej tega okolja je, da lahko skrbniki ustvarijo vedenja, podobna ukazom »cmdlet«, brez obsežnega kodiranja , z uporabo naprednih funkcij, modulov za večkratno uporabo in celovitega sistema pomoči. To pomeni, da namesto zanašanja na različna grafična orodja lahko zgradite skladen nabor skriptov in modulov, ki avtomatizirajo procese za upravljanje strežnikov, omrežij, imenika Active Directory, storitve Azure ali storitve Microsoft 365.

Na področju napredne avtomatizacije izstopajo tudi funkcije, kot so opravila za asinhrono izvajanje nalog, delovni tokovi, administracija na podlagi konfiguracije s PowerShell DSC in varnostne možnosti, kot sta JEA (Just Enough Administration) ali PowerShell Web Access, ki omogočajo podroben nadzor nad tem, kaj lahko vsaka oseba počne in od kod.

Celoten ekosistem se še posebej dobro ujema z WMI in CIM, saj informacije o upravljanju, ki jih razkrije operacijski sistem (strojna oprema, storitve, procesi , konfiguracija omrežja, nameščena programska oprema itd.), postanejo niz objektov, ki jih lahko poizvedujete, filtrirate in spreminjate z ukazi PowerShell, zasnovanimi za množično avtomatizacijo.

WMI in CIM: Ključni koncepti in praktične razlike

WMI in CIM v PowerShellu

Windows Management Instrumentation, bolj znan kot WMI, je tehnologija, neodvisna od PowerShella , ki je že leta del sistema Windows. Razkriva repozitorij informacij o upravljanju operacijskega sistema, strojne opreme in številnih aplikacij. Čeprav ni odvisen od PowerShella, ga PowerShell v veliki meri izkorišča za avtomatizacijo opravil.

Naravni naslednik WMI v ekosistemu PowerShell so ukazi »cmdlets« CIM (Common Information Model) , predstavljeni s PowerShellom 3.0. Ti ukazi »cmdlets« so združeni v modulu CimCmdlets in vključujejo ukaze, kot so Get-CimInstance, Get-CimClass, New-CimInstance, Invoke-CimMethod, Register-CimIndicationEvent, Set-CimInstance in Remove-CimInstance, med drugim.

V starejših različicah lupe Windows PowerShell, kot sta Windows 10 PowerShell 5.1 ali Windows 11 PowerShell, lahko še vedno najdete klasične ukaze »cmdlet« WMI (Get-WmiObject, Invoke-WmiMethod, Register-WmiEvent, Remove-WmiObject, Set-WmiInstance). Vendar pa so ti ukazi »cmdlet« zastareli in niso več vključeni v PowerShell 6 in novejše različice, zato so pomembni le za vzdrževanje starejših skriptov ali pregledovanje stare kode.

Ko nekdo govori o »poizvedovanju WMI z ukazi »cmdlets« CIM,« to ni protislovno: ukazi »cmdlets« CIM še vedno dostopajo do informacij WMI , vendar to počnejo z uporabo sodobnejših protokolov, kot je WSMan, in bolj doslednega API-ja. V praksi se je treba pri novih razvojih osredotočiti na CIM in ukaze »cmdlets« WMI upoštevati le, če morate migrirati ali razumeti starejše skripte.

V preteklosti so mnogi skrbniki uporabljali VBScript z jezikom za poizvedbe WQL za poizvedovanje WMI, na primer s povezovanjem z imenskim prostorom root\CIMV2 in poizvedovanjem razredov, kot je Win32_BIOS. Isto poizvedbo WQL je danes mogoče ponovno uporabiti z ukazom Get-CimInstance tako, da se posreduje parameter -Query, kar močno poenostavi prehod iz VBScripta v PowerShell, ne da bi bilo treba logiko prepisati od začetka.

Praktična uporaba Get-CimInstance in učinkovite poizvedbe

Poizvedbe WMI z ukazom Get-CimInstance

Za vsakodnevno delo je najbolj naraven način za poizvedovanje WMI s PowerShellom uporaba Get-CimInstance s parametrom -ClassName , namesto pisanja celotnih poizvedb WQL. Na primer, za pridobitev informacij o BIOS-u lahko uporabite Get-CimInstance -ClassName Win32_BIOS in prejeli boste objekt z lastnostmi, kot so Manufacturer, Name, SerialNumber ali SMBIOSBIOSVersion.

  Popoln seznam kod ALT in simbolov na tipkovnici v sistemu Windows: Ultimate Guide

Ker je vse v PowerShellu objekt, je zelo enostavno filtrirati in izbrati le tisto, kar potrebujete . Če vas zanima samo serijska številka, lahko rezultat posredujete v `Select-Object -Property SerialNumber` ali pa uporabite `Select-Object -ExpandProperty SerialNumber` za izpis preprostega niza namesto objekta z lastnostjo. Druga pogosta možnost je uporaba sintakse pik (`Get-CimInstance ...`).SerialNumber` za neposreden dostop do vrednosti.

Omeniti velja, da poizvedbe WMI privzeto vrnejo več lastnosti, kot jih boste dejansko uporabili . Na lokalnem računalniku je to običajno v redu, ko pa začnete poizvedovati po številnih oddaljenih računalnikih, se to spremeni v dodaten čas obdelave in nepotreben omrežni promet. Tukaj pride prav parameter `-Property` ukaza `Get-CimInstance`, ki vam omogoča, da omejite, katere lastnosti se pridobijo iz vira.

Z določitvijo -Property SerialNumber na primer zmanjšate količino prenesenih podatkov, zaradi česar je poizvedba hitrejša in učinkovitejša, zlasti v velikem obsegu . Ta miselnost »vprašajte le po tem, kar potrebujete« je ključna pri oblikovanju skriptov za inventar ali revizijo, ki se izvajajo na več deset ali več sto računalnikih.

Če povzamemo, Get-CimInstance ponuja močno ravnovesje med preprostostjo (ena ukazna vrstica) in prilagodljivostjo , ne glede na to, ali delate s konkretnimi razredi, starejšimi poizvedbami WQL ali specifičnimi lastnostmi, ki jih želite optimizirati za pridobivanje.

Oddaljena svetovanja s CIM, sejami in protokoli WSMan/DCOM

Ko se oddaljite od lokalnega računalnika in začnete dostopati do oddaljenih računalnikov, pride v poštev več dejavnikov: dovoljenja, komunikacijski protokol in zmogljivost . Čeprav mnogi ljudje menijo, da je PowerShell "nevaren", resnica je, da vam ne daje nobenih dodatnih privilegijev: imate popolnoma enaka dovoljenja kot pri grafičnem vmesniku ali katerem koli drugem orodju, nič več in nič manj.

Če poskusite zagnati ukaz `Get-CimInstance -ComputerName Server -ClassName Win32_BIOS` brez zadostnih pravic na tem računalniku, boste prejeli napako »Dostop zavrnjen« . To ni posledica napake PowerShella; preprosto gre za to, da uporabnik, kot katerega izvajate sejo, nima pravice dostopa do teh informacij v WMI. Seveda lahko odprete konzolo kot skrbnik domene, vendar to pomeni, da bo vsak ukaz izveden s temi pravicami, kar je v mnogih okoljih nepotrebno tveganje.

Priporočilo je, da uporabite načelo najmanjših privilegijev in povečate privilegije le, kadar je to potrebno . V ukazih »cmdlet«, ki podpirajo parameter -Credential, lahko določite alternativne poverilnice samo za zadevni ukaz. Vendar pa Get-CimInstance ne sprejema neposredno parameter -Credential in tukaj pride na vrsto CimSessions kot elegantna rešitev.

CimSession je trajna povezava z oddaljenim računalnikom, ki jo lahko ustvarite z ukazom New-CimSession, pri čemer posredujete ime računalnika in poverilnice (na primer New-CimSession -ComputerName dc01 -Credential (Get-Credential)). Ta seja je shranjena v spremenljivki, kot je $CimSession, in nato ponovno uporabljena z ukazom Get-CimInstance z uporabo parametra -CimSession namesto -ComputerName, kar vam omogoča združevanje več poizvedb v eno samo povezavo.

Poleg zahteve po poverilnicah Get-CimInstance privzeto uporablja protokol WSMan (ki temelji na WinRM) . To pomeni, da mora imeti oddaljeni računalnik nameščen sklad WSMan različice 3.0 ali novejše, ki je običajno na voljo v PowerShellu 3.0 in novejših različicah. Različico sklada WSMan v računalniku lahko preverite z ukazom `Test-WSMan -ComputerName RemoteComputer` in preverite, ali je vrednost »Stack« 3.0 ali višja, da lahko uporabite to metodo povezave.

Seje CIM z DCOM in združljivostjo s prejšnjimi različicami

Starejši ukazi »cmdlet« WMI, ki temeljijo na Get-WmiObject, se zanašajo na protokol DCOM, ki ga starejše različice sistema Windows še vedno podpirajo . Težava je v tem, da v novejših sistemih požarni zidovi pogosto privzeto blokirajo DCOM, zaradi česar morate odpreti določena vrata, da ga lahko uporabljate takšnega, kot je, kar lahko krši varnostne pravilnike vaše organizacije.

Ukazi »cmdlet« CIM ponujajo zmogljivo srednjo pot: možnosti seje lahko ustvarite z ukazom `New-CimSessionOption -Protocol Dcom` , jih shranite v spremenljivko (na primer `$DCOM`) in jih nato združite z ukazom `New-CimSession`, da ustvarite CimSession, ki uporablja DCOM namesto WSMan. To vam omogoča povezavo z zelo starimi strežniki, tudi s tistimi, ki so starejši od sistema Windows Server 2000, kjer PowerShell sploh ni nameščen.

  Pogoste napake gostitelja opravil sistema Windows in kako jih odpraviti korak za korakom

Običajno je priročno shraniti poverilnice skrbnika domene ali poverilnice za povišani račun v spremenljivko (na primer $Cred = Get-Credential ), da se izognete vsakič vnašanju. Nato lahko z nečim, kot je New-CimSession -ComputerName sql03 -SessionOption $DCOM -Credential $Cred, zaženete CimSession prek DCOM na starejši strežnik, ki ne podpira WSMan, ima pa WMI.

Z vidika pisca skript je glavna prednost ta, da se izhod funkcije `Get-CimInstance` ne spreminja glede na protokol : dobite iste objekte in lastnosti ne glede na to, ali uporabljate WSMan ali DCOM. To močno poenostavi logiko, saj lahko zaznavanje ustreznega protokola enkapsulirate v funkcijo in pustite, da preostala koda vedno deluje pregledno s CimSessions.

Pravzaprav je precej pogosto ustvarjanje funkcij po meri, ki s Test-WSMan preizkusijo WSMan in, če ta ni na voljo, samodejno preidejo v DCOM z uporabo New-CimSessionOption. To vam omogoča standardizacijo ustvarjanja CimSession v mešanih okoljih s sodobnimi in starejšimi strežniki, ne da bi pri tem podvajali logiko povezave v vseh vaših skriptih.

Upravljanje, seznam in čiščenje CimSessions

Ko začnete intenzivno uporabljati CimSessions, je pomembno, da jih spremljate, da se izognete kopičenju nepotrebnih povezav. Z ukazom Get-CimSession lahko naštejete vse odprte seje , vidite, na kateri računalnik kažejo, in preverite, kateri protokol uporabljajo (WSMAN ali DCOM), kar je zelo uporabno za diagnosticiranje težav s povezljivostjo ali preverjanjem pristnosti.

Te obstoječe seje lahko pridobite tudi v spremenljivki, na primer $CimSession = Get-CimSession , in jih uporabite v enem samem ukazu Get-CimInstance -CimSession $CimSession -ClassName Win32_BIOS za hkratno poizvedovanje več računalnikov, pri čemer združite seje WSMan in DCOM v isti operaciji.

Ko končate z analizo teh informacij, je priporočljivo, da zaprete seje, da preprečite nepotrebno odprtje virov. Ukaz »Get-CimSession | Remove-CimSession« odstrani vse aktivne seje CimSession iz trenutnega profila hkrati. Lahko pa ukazu »Remove-CimSession« posredujete določene seje, da zaprete le nekatere od njih.

Takšen način dela vam omogoča nadzorovane cikle vzpostavljanja in izklopa povezav , kar je zelo priporočljivo pri uporabi skriptov znotraj načrtovanih opravil, avtomatizacijskih runbookov ali cevovodov za neprekinjeno integracijo, ki lahko povzročijo prekinitev sej, če tega čiščenja ne načrtujete izrecno.

PowerShell kot celovit jezik za avtomatizacijo

Poleg WMI in CIM je PowerShell postal splošni jezik za avtomatizacijo , ki daleč presega tipičen skript za upravljanje sistema Windows. Obstajajo knjige in celi tečaji, posvečeni njegovim naprednim zmogljivostim, ki zajemajo vse od namestitve v Linuxu in Windowsu do razvoja distribuiranih modulov prek NuGeta in celo sodobnih razvojnih okolij, kot je Visual Studio Code.

Pogosto izhodišče je temeljito razumevanje naprednih funkcij PowerShella , ki omogočajo definiranje parametrov, izvajanje validacije, ustvarjanje strukturiranega izhoda in dostop do integrirane pomoči skoraj na ravni izvornega ukaza »cmdlet«. Od tam naprej organiziranje kode v module olajša sodelovanje znotraj operativnih ekip, saj lahko te module različice in objavljate v internih ali javnih repozitorijih NuGet.

Ključnega pomena je tudi delo s prilagojenimi objekti in razredi , ki odpirajo vrata veliko bogatejšim podatkovnim modelom kot tipični linearni skripti. To vam omogoča, da zaključite poslovno logiko, ponovno uporabite strukture in oblikujete notranje API-je za svojo vodstveno ekipo, vse to pa poganja PowerShell.

Na področju napredne avtomatizacije imajo ključno vlogo opravila in delovni tokovi v ozadju , ki omogočajo upravljanje asinhronih nalog, izvajanje dolgotrajnih operacij brez blokiranja konzole in orkestracijo kompleksnih zaporedij na več računalnikih. Te zmogljivosti so idealne za množične poizvedbe v WMI/CIM in scenarije oddaljenega upravljanja, kjer je pogosto treba čakati, da sistemi izvedejo spremembe ali vrnejo podatke.

Druga ključna komponenta je PowerShell DSC (Desired State Configuration), ki vam omogoča, da določite želeno konfiguracijo infrastrukture (vloge, funkcije, storitve, datoteke, varnostne nastavitve itd.) in ta stanja večkrat uporabite. V kombinaciji z informacijami, ki jih pridobite prek WMI/CIM, lahko zaznate odstopanja, jih proaktivno odpravite in vzdržujete dosledna okolja z manj ročnega napora.

Lokalno, oddaljeno in upravljanje v oblaku s PowerShellom

Na lokalni ravni PowerShell ponuja ukaze »cmdlet« za upravljanje domenskih storitev Active Directory , konfiguriranje omrežij in skrbništvo strežnikov. V sistemu Windows 10 in novejših različicah je integracija še globlja, kar omogoča avtomatizacijo vsega, od ustvarjanja spletnih mest do upravljanja objektov Active Directory in konfiguriranja omrežnih adapterjev.

  Upravljanje procesov v operacijskih sistemih

Manj znana, a zelo uporabna komponenta sta PSProviders in PSDrives , ki omogočata obravnavo različnih lokacij shranjevanja (datotečni sistem, register, Active Directory itd.), kot da bi bili navigacijski pogoni. Zahvaljujoč temu lahko na primer ustvarite skupine Active Directory, ključe registra ali strukture map na oddaljenih računalnikih z isto sintakso, ki bi jo uporabili za navigacijo po trdem disku.

Kar zadeva oddaljeno upravljanje, PowerShell integrira zmogljiv nabor funkcij za povezovanje z enim ali več računalniki in izvajanje ukazov v vašem imenu . Uporabite lahko trajne seje PSSession, napredne tehnike oddaljenega upravljanja, scenarije ena-na-mnoge (za hkratno upravljanje več strežnikov) ali scenarije ena-na-ena za odpravljanje napak v specifičnih primerih. Vse to seveda ob spoštovanju arhitekture in varnostnega modela oddaljenega dostopa.

Tudi oblak danes igra temeljno vlogo. Z Azure PowerShell in Azure Cloud Shell lahko upravljate virtualne stroje, shrambo in naročnine neposredno iz ukazne vrstice. Namestitev modulov Azure PowerShell in seznanjanje z njimi je skoraj obvezno, če upravljate hibridna ali v celoti gostovana okolja Azure.

Po drugi strani pa se je PowerShell uveljavil tudi kot orodje za upravljanje storitve Microsoft 365 (Exchange Online, SharePoint Online, Teams, uporabniki in licence). Od ustvarjanja in upravljanja računov do skrbništva virov Exchange Online, vključno s skupinami, spletnimi mesti SharePoint in storitvijo Microsoft Teams, je vse mogoče orkestrirati s skripti, ki drastično zmanjšajo ročno delo na spletnem portalu.

Skriptiranje, cevovodi in najboljše delovne prakse

Da bi kar najbolje izkoristili napredno avtomatizacijo z WMI in CIM, je bistveno obvladati PowerShellov model cevovoda . Za razliko od drugih lupin tukaj ne posredujete golega besedila, temveč celotne objekte, kar vam omogoča, da z veliko natančnostjo izbirate, razvrščate, merite, filtrirate, naštevate in preoblikujete informacije.

Učenje dela s cevovodi vključuje pravilno uporabo ukazov »cmdlet« za izbiro in filtriranje , razumevanje naštevanja kompleksnih objektov in učenje prenosa podatkov med ukazi in skripti brez izgube informacij. To je podkrepljeno z organizirano uporabo spremenljivk, polj in zgoščevalnih tabel, ki delujejo kot začasne podatkovne strukture, na katerih se gradi naprednejša logika.

Naslednji korak je samo skriptiranje: pakiranje ukazov v skripte za večkratno uporabo z nadzorom pretoka (if, for, foreach), uvoz podatkov iz datotek CSV ali drugih formatov, obravnavanje uporabniškega vnosa, obravnavanje napak in beleženje dogodkov. Vse to vam omogoča prehod z izoliranih ukazov na robustnejša, vgrajena orodja.

Odpravljanje težav in obravnavanje napak sta še posebej pomembna v obsežnih avtomatiziranih okoljih z WMI/CIM, saj lahko izpad omrežja, napačno konfigurirano dovoljenje ali manjkajoči razred prekinejo proces, če niso pravilno upravljani. Z bloki try/catch, nastavljivimi dejanji ob napakah in podrobnim beleženjem lahko te situacije predvidite in se nanje učinkoviteje odzovete.

Končno, vse, kar je povezano s funkcijami in moduli, sklene krog : podpišete skripte, da zagotovite njihovo integriteto, zapakirate funkcije v module, distribuirate te module v interne ali javne repozitorije in ustvarite ekosistem skupnih orodij znotraj vaše organizacije. Na ta način je vsak nov razvoj na področju WMI, CIM ali oddaljenega dela integriran v koherenten in enostavno vzdrževalni paket.

Ko združite vse zgoraj navedeno – WMI/CIM, oddaljene seje, skripte, asinhrona opravila, DSC, Azure in Microsoft 365 – dobite okolje, kjer napredna avtomatizacija s PowerShellom postane jedro administracije. Z trdnimi temelji najboljših praks, inteligentno uporabo CimSessions (z WSMan in DCOM) in modularno zasnovo skriptov lahko dosledno, varno in veliko učinkoviteje upravljate heterogene infrastrukture kot če bi se zanašali zgolj na grafične čarovnike ali izolirana orodja.

Avtomatizacija PowerShell DC Ansible
Povezani članek:
Napredna avtomatizacija v sistemu Windows s PowerShell DSC in Ansible