A Windows PowerShell - windows-írás szolgáltatást PowerShell
Termékek és technológiák:
Windows Services, a Windows PowerShell, C #
Ez a cikk ismerteti:
- A Windows-szolgáltatás építészet
- kezelése a Windows-szolgáltatások;
- használja kódrészeteket C # Windows PowerShell szkriptek;
- Az írás egy önkormányzattal szolgáltatás a Windows PowerShell.
A Windows-szolgáltatás (Windows Services) - ez általában összeállított programot a C, C ++, C # vagy más nyelven alapuló Microsoft .NET Framework és hibakeresés az ilyen szolgáltatások nagyon nehéz. Néhány hónappal ezelőtt, ihlette a tény, hogy más operációs rendszerek lehetővé teszik írás szolgáltatások, mint egy egyszerű shell script, elkezdtem gondolkodni azon, hogy van-e a Windows könnyebb módja létre őket.
Ez a cikk bemutatja a végleges Ezen erőfeszítések eredményeként: egy új és egyszerű módja annak, hogy hozzon létre a Windows-szolgáltatások. Ők lehet írva a programozási nyelv a Windows PowerShell. Nincs több összeállítani gyorsabb ciklusok „edit-teszt” lehet végezni minden rendszerben, és nem csak a fejlesztő számítógépet.
Mi az a Windows Service?
A Windows-szolgáltatás - olyan program, amely a háttérben fut, felhasználói beavatkozás nélkül. Például egy webszerver, amely a „néma” reagál a HTTP-kérelmeket weboldalak az interneten, ez egy szolgáltatás, valamint egy ellenőrző alkalmazást, egyszerűen rekord mutatókat és rögzítő hardver eseményeket az érzékelőket.
Services automatikusan futtatható a rendszer betöltésekor. Vagy igényszerintiként amikor kérte alkalmazások támaszkodnak rájuk. A szolgáltatás fut a saját Windows munkamenet, amely eltér az UI-session. Munkájukat számos rendszer folyamatok gondosan kiválasztott szabály a kockázatok csökkentése érdekében a biztonsággal kapcsolatos.
Windows Service Control Manager
A szolgáltatások felügyelt Windows Service Control Manager (SCM). SCM felelős a konfiguráció a szolgáltatások és azok kezdete és vége, és így tovább. D.
SCM vezérlőpulton keresztül elérhető Control Panel | Rendszer és biztonság | Felügyeleti eszközök | Services. Amint ábrán látható. 1. megjelenít egy listát az összes konfigurált szolgáltatások nevüket, leírás, állapot, indítási típus és a fiók nevét.

Ábra. 1. Windows Service Control Manager GUI Windows 10
SCM is van egy parancssori interfész.
- Régi közüzemi net.exe jól ismert parancsok net start és a net stop, így a gyökerek már az MS-DOS! Annak ellenére, hogy nevét, akkor lehet, hogy start és stop bármilyen szolgáltatást, nem csak a hálózati szolgáltatásokat. Írja net segítségével, hogy egy részletes leírást.
- Erősebb hasznosság, sc.exe bevezetett Windows NT biztosít szemcsés ellenőrzése alatt minden szempontból a szolgáltatás menedzsment. Írja sc /. a részletes leírást.
A parancssori segédprogramok, bár jelen a Windows 10 már elavultnak tekinthető, és javasoljuk, hogy használja a Windows PowerShell szolgáltatás menedzsment funkciók, mint azt az alábbiakban ismertetjük.
Hogyan lehet elkapni net.exe és sc.exe használat „rövid” nevű egyszóval szolgáltatás, amely, sajnos, nem esik egybe egy leíró nevet, megjelenik a SCM vezérlőpulton. Ahhoz, hogy a levelezés a két név, használja a get-service parancsot a Windows PowerShell.
szolgáltatás állapota
Szolgáltatás lehetnek a különböző államokban. Bizonyos körülmények között szükség van, a többi opcionális. Két alapvető feltételeket, hogy támogatni kell az összes szolgáltatás: leállt (leállítás) és futás (megkezdődött). Ezek az állapotok rendre bemutatott üres cella vagy futás (futás) Állapot oszlopban látható. 1.
Harmadszor, nem kötelező feltétel - szünetel (szünetel). És még egy implicit állami fenntartású minden szolgáltatást, akkor is, ha azt nem említik sehol, - Eltávolítva (Törölve).
Órás lehet átmenet e államok ábrán látható. 2.
Ábra. 2. Az állapot a szolgáltatás
Végül, több átmeneti állapot, ami a szolgáltatás támogatja (nem kötelező): StartPending, StopPending, PausePending, ContinuePending. Ezek hasznos, ha az állapot átmeneteket hosszú időt vesz igénybe.
Management Services segítségével Windows PowerShell
- következetes funkció neveket;
- teljesen objektum-orientált;
- egyszerű kezelését bármely .NET-objektumot.
Windows PowerShell számos szolgáltatás-menedzsment funkciókat, az úgynevezett parancsmagjai (parancsmagokat). Néhány példa táblázatban mutatjuk be. 1.
Táblázat. 1. Szolgáltatás menedzsment funkciók a Windows PowerShell
Regisztrálja a futtatható fájlt szolgáltatást az SCM
A végrehajtó ezek a módszerek, a szolgáltatás fogja kezelni SCM és lehet futtatni indításkor automatikusan vagy kérésre; Ezen kívül egy ilyen szolgáltatás indítható vagy leállítható manuálisan a vezérlőpulton SCM, a régi csapat net.exe / sc.exe vagy új Windows PowerShell funkciókat szolgáltatások kezelésére.
Minden szolgáltatás létre kell hozni a .NET-egy tárgy származó ServiceBase osztályban.
Létrehozása egy futtatható fájlt a forráskód C #, a beépített Windows PowerShell script
PowerShell egyszerűsíti a használata .NET-objektumok szkripteket. Az alapértelmezett beépített támogatása többféle típusú .NET-objektumok, elegendő a legtöbb feladat. Még jobb, hogy ez bővíthető, és lehetővé teszi, hogy beágyazni rövid töredékek C # -code Windows PowerShell script támogatást adni bármely más .NET-funkciókat. Ezt a lehetőséget az Add-Type parancs, amely a neve ellenére, sokkal többet tud, mint egyszerűen hozzá támogatja az új típusú .NET-objektumokat Windows PowerShell. Azt is lehetővé teszi, hogy állítson össze, és összekapcsolják a teljes C # alapú alkalmazás az új futtatható fájlt. Például a következő Windows PowerShell script, hello.ps1:
Mindezt összerakva
Lehetőségek PSService.ps1 Mindezek alapján megbeszéltük a pillanatban, én is létrehozhat a szolgáltatás Windows PowerShell, melyet álmodtam - PSService.ps1 script, ami:
- ő maga is telepíthető, és távolítsa el (a Windows PowerShell funkciókat szolgáltatás menedzsment);
- Maga a start és stop magad (ugyanazt a funkciók);
- Ez magában foglalja a rövid részlet C # -code generáló PSService.exe SCM (parancsok segítségével Add-Type);
- tesz egy visszahívást PSService.exe csatlakoztassa PSService.ps1 script, ami a tényleges szolgálat működését (eseményekre reagálva OnStart, OnStop et al.);
- SCM vezérli a panel és bármely parancssori segédprogramok (miatt dugó PSService.exe);
- a hibatűrő és sikeresen kezeli a parancsot, miközben bármilyen állapotban. Például, akkor automatikusan leállítja a szolgáltatást, mielőtt eltávolítaná, vagy nem csinál semmit, ha ő fogja kérni, hogy indítsa el a már futó szolgáltatások;
- Támogatja a Windows 7 és az újabb Windows-verziók (a funkciók csak a Windows PowerShell v2).
Figyeljük meg, hogy ebben a cikkben kitértem kritikus része a tervezés és a végrehajtás PSService.ps1. Script például magában foglalja a hibakereső kód valamilyen módon támogatja az opcionális funkciókat a szolgáltatások, de ezek leírását megnehezítené a magyarázat feleslegesen.
Építészet PSService.ps1 script szerveződik egy sor részből áll:
A globális változók
Közvetlenül mögötte az egység Paraméter PSService.ps1 script tartalmaz globális változók, amelyek meghatározzák a globális beállításokat lehet változtatni, ha szükséges. Az alapértelmezett értékeket a táblázatban. 3.
Táblázat. 3. Az alapértelmezett értékek globális változók
alapérték
Egyszavas név használt parancsok net start, és egyéb
Az alap szkript nevét
Leíró nevet szolgáltatás
Minta PowerShell Service
szolgáltatás, ahol a fájlok vannak telepítve
• a fájl neve, amelyek rögzítik üzenet szolgáltatás
Event Log A név a rögzített szolgáltatás események
A parancssori argumentumokat
Egyszerűsítése érdekében használat, a forgatókönyvet támogatja parancssorban érveket, amelyek megfelelnek az átmenetek minden állam, mint az a táblázatban látható. 4.
Táblázat. 4. A parancssor érveket az állapot átmeneti
Szolgáltatásmenedzsment felelős SCM. Mindegyik indításhoz kell átmenni az SCM, úgy, hogy nyomon tudja követni az egészségügyi szolgáltatásokat. Ezért, még ha a felhasználó szeretné manuálisan kezdeményezi a dob a szolgáltatást a forgatókönyvet, az indítási kell elvégezni, mint a kéréssel, hogy SCM. Ebben az esetben a műveleti sorrendet az alábbi.
- A felhasználó (adminisztrátor) kiváltja az első fokon: PSService.ps1 -start.
- Ezt az elsőfokú jelentési SCM elindítani a szolgáltatást: a Start-Service $ SERVICENAME.
- SCM végzi PSService.exe. Fő eljárás létrehoz egy szolgáltatás tárgya, majd meghívja az eljárást Run.
- SCM felhívja a OnStart módszer a szolgáltatás tárgya.
- C # -módszer OnStart elindítja a második példányt a script: PSService.ps1 -start.
- Ez másodfokú most fut a háttérben, mint egy olyan rendszer felhasználó lefuttatja a harmadik példányt, ami fognak emlékezni, mint egy igazi szolgáltatás: PSService.ps1 -Service. Ebben az esetben, és fut, mint szolgáltatás.
Ennek eredményeként kerül sor két feladat: PSService.exe és PowerShell.exe például azáltal, hogy PSService.ps1 -Service.
Szolgáltatásmenedzsment felelős SCM.
Mindezt három részre a kódot a script.
- -start kulcs meghatározása a Paraméter blokk elején a script:
- A Main eljárás végén a forgatókönyvet, ha blokk kezeli kulcsfontosságú -start:
- A töredék a forráskódot, hogy a C #, Main eljárás, és a OnStart felvezető, amely végrehajtja a parancsot PSService.ps1 -start, ábrán látható. 4.
Ábra. 4. Processzor indítókódját
Beszerzése szolgáltatás állapota
-Állapotlap felvezető egyszerűen kéri a SCM állapotát a szolgáltatást, és továbbítja azt a kimeneti szállító:
De abban a szakaszban a hibakeresés, akkor találkozhat egy hibásan működő script, például azért, szintaktikai hiba a forgatókönyvet, és így tovább. N. Ilyen esetekben a SCM állam végül hiányos. Kaptam ezt a helyzetet egy párszor elkészítésekor ezt a cikket. Annak érdekében, hogy a diagnózis ilyen problémák, akkor ajánlatos újra ellenőrizni mindent, és keresni esetekben -Service:
Leállítása és eltávolítása
Leállítása és eltávolítása műveletek lényegében megszünteti mi történt műveletek indítása és beállítása rendre:
- -Stop (amikor egy felhasználó elindítja) beszámol SCM kell állítania a szolgáltatást;
- A rendszer indításakor PSService.ps1 -Service példányát egy elpusztult;
- -Vegye leállítja a szolgáltatást, megszünteti a regisztrációs segítségével sc.exe törölni $ SERVICENAME, majd törölje a fájlokat a telepítési könyvtárba.
Ezen túlmenően, a megvalósítás nagyon hasonló a beállítás és a Start.
- Meghatározzák az egyes gombot Paraméter blokk elején a forgatókönyvet.
- Ha a kulcs alapfolyamatok Main eljárás végén a forgatókönyvet.
- A leállítása működés C # fragmensek processzor OnStop, amely kiváltja PSService.ps1 -Stop. Stop működés másképp működik típusától függően a felhasználó - vagy valós rendszert.
Események rögzítése a napló
A szolgáltatás fut a háttérben, anélkül, hogy UI. Ez megnehezíti elhárítására: hogyan lehet diagnosztizálni, hogy nem sikerül, ha az nem tükrözi a természete? A szokásos módszer - rögzíti az összes hibaüzenetet időbélyeggel, és rögzíti fontos esemény sikeresen teljesítette, mint az állami átmeneteket.
A szolgáltatás fut a háttérben, anélkül, hogy UI. Ez megnehezíti elhárítására: hogyan lehet diagnosztizálni, hogy nem sikerül, ha az nem tükrözi a természete?
Script példa PSService.ps1 végrehajtja két különböző naplózási módszerrel, és ezeket használja mind a stratégiai helyeken (beleértve a korábban megjelenített kódot fragmensek, ahol ezek a módszerek eltávolításra kerültek, hogy egyértelmű az alapvető működését).
- Az egyik módszer a felvételt az Alkalmazás eseménynaplóban tárgyakat a szolgáltatás neve, mint a neve a forrás, ábrán látható. 5. Ezek az események látható az Eseménynapló és szűrheti és keressen segítségével mindazokat az eszközöket, ez a típus. Azt is kaphatnak ezek a feljegyzések segítségével a Get-Eventlog:
adaptációja szolgáltatás
A saját szolgáltatás, kövesse az alábbi lépéseket.
- Másolás, egy példa egy új fájlt egy új bázis nevét, pl C: \ Temp \ MyService.ps1.
- Változás a hossza a szolgáltatás neve a részben globális változókat.
- Cserélje ki az itt -Service felvezető végén a forgatókönyvet. Ezen a ponton a blokk while ($ true) egyszerűen tartalmaz egy fejlesztési kódot, felébred minden 10 másodperc, és rögzíteni egy log fájlt egy jelentést:
További információért lásd. Az oldalsáv „link”.
Nyilvánvaló, hogy egy ilyen szolgáltatás script, mint ez, nem felel meg a teljesítménye egy lefordított program. Szolgáltatás script írt Windows PowerShell, nagyon kényelmes, hogy teszteljék a koncepció és a problémák az alacsony költségű teljesítmény szempontjából, mint a rendszerfelügyelet, a csoportosítás szolgáltatások, és így tovább. D. De bármilyen nagy feladat, hogy átírja a szolgáltatást C ++ vagy C #.
Ezen túlmenően, a memóriát nagyobb, mint a lefordított programot, mivel nem igényel egy teljes értékű letölthető Windows PowerShell tolmács rendszer ülésén. De a modern számítógépek sok gigabájt memóriával nem igazán számít.
Ez a szkript egyáltalán nincs összefüggésben a Ps-Service.exe Mark Russinovich (Mark Russinovich). Azért választottam PSService.ps1 neve előtt tudomást szerzett a véletlen nevek. A végén már megmentette a script-példány neve ebben, mivel pontosítja a célja a forgatókönyvet. Természetesen, ha azt szeretnénk, hogy kísérletezzen szolgáltatás alapján a Windows PowerShell, akkor nevezd át kap egy egyedi szolgáltatás nevét egy egyedi bázis szkript nevét!
Szeretném kifejezni hálámat a szakértői felülvizsgálat cikkek JDH IT Solutions Jeffery Hicks (Jeffery Hicks).
Tettem egy Windows szolgáltatás követi ezt a cikket. Minden jól működik, és úgy éreztem, mintha én egy igazán programozó :). De van egy probléma - ez a szolgáltatás fogyaszt túl sok memóriát. Tény, hogy körülbelül 6 órán szolgáltatást elfogyasztott 3 Gb memória, és azt hiszem, ez nem.
Jól néz ki, fut nagy, és igen, futok alatt a különböző szolgáltatási számla, nincs rossz mellékhatásai.
Így írt egy minta szolgáltatás, amely a 1000 sor hosszú. Kösz, de én kihagyom.
Nemrég használják ezt az alapot a fogyasztói igényeknek, és nagyon nagyra értékelik ezt. Kellett, hogy egy kis módosítással, hogy a szolgáltatás fut alatt a szolgáltatási számla kivételével localsystem, annak érdekében, hogy végre valami hálózati műveletek, som.
Érdekes cikket. Van olyan cikket, amely azt mutatja, hogyan PowerShell lehet használni, hogy hívja a REST alapú szolgáltatás?
Ez a cikk egy új és egyszerű módja annak, hogy hozzon létre a Windows szolgáltatások, írásban azokat a PowerShell script nyelv helyett C # vagy C ++ nyelven. Nincs több válogatás, csak egy gyors szerkesztés / vizsgálati ciklus lehet tenni bármilyen rendszeren. Olvasd el ezt a cikket.