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.

A Windows PowerShell - windows-írás szolgáltatást PowerShell

Á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.

  1. A felhasználó (adminisztrátor) kiváltja az első fokon: PSService.ps1 -start.
  2. Ezt az elsőfokú jelentési SCM elindítani a szolgáltatást: a Start-Service $ SERVICENAME.
  3. 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.
  4. SCM felhívja a OnStart módszer a szolgáltatás tárgya.
  5. C # -módszer OnStart elindítja a második példányt a script: PSService.ps1 -start.
  6. 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.

  1. Meghatározzák az egyes gombot Paraméter blokk elején a forgatókönyvet.
  2. Ha a kulcs alapfolyamatok Main eljárás végén a forgatókönyvet.
  3. 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.