a mi” első lépések naplózás ” sorozat, már lefedett naplózás számos nyelven és keretek: C#, Java, Python, Ruby, Ruby on Rails, Node.js, Symfony, Kotlin, Flask, Angular és Laravel. Ma hozzáadunk még egyet ehhez a sorozathoz: PowerShell.

furcsa lehet hozzáadni a listához; a PowerShell egy szkriptnyelv, míg a többiek teljes alkalmazásprogramozási nyelveknek vagy keretrendszereknek tekinthetők., Mégis PowerShell annyira erős, hogy képes létrehozni rendszerek komplex és fontos ahhoz, hogy indokolja naplózás.

a PowerShellt gyakran használják kritikus karbantartási feladatok elvégzésére számítógépeken vagy szervereken. Fontos, hogy az adminisztrátorok tudják, hogyan működnek ezek a szkriptek.

megvizsgáljuk, hogyan lehet bejelentkezni a PowerShell segítségével egy nagyon alapvető módon a saját naplózási funkció írásával. Ezután lefedjük, miért hasznos a powershellből történő fakitermelés. Arról is beszélünk, hogy mit kell naplóznia, és mit nem szabad naplóznia., Végül két különböző lehetőséget fogunk megvizsgálni,amelyek megkönnyítik a naplózást.

egy egyszerű PowerShell szkript

kezdjük ezzel a rendkívül egyszerű PowerShell szkripttel:

Ez az alapvető szkript egész számot vesz bemenetként. Ezután a szám számjegyeinek összege. Ha az eredmény hosszabb, mint egy számjegy, akkor ismét elvégzi a műveletet, amíg ez egyetlen számjegyet nem eredményez.,

Itt van néhány példa, hogy tisztázzuk a dolgokat:

  • 45 -> 4 + 5 = 9
  • 397 -> 3 + 9 + 7 = 19 -> 1 + 9 = 10 -> 1 + 0 = 1
  • 3 -> 3

Tedd ezt a forgatókönyvet egy szöveges fájlt, majd mentse el recursiveSum.ps1. Akkor futtassa a PowerShell parancssorban futó recursiveSum.ps1 45, például., A kimenet 9:

Ez egy olyan szkript, amely elég egyszerű ahhoz, hogy példaként működjön, de van elég lépése, hogy érdekeljen néhány naplózás. Természetesen a valós PowerShell szkriptek sokkal összetettebbek lesznek, ami még inkább garantálja a naplózás szükségességét.

A legegyszerűbb módja annak, hogy jelentkezzen be PowerShell

írjuk az egyes lépések eredményét a konzolra. Már írunk valamit a konzolra az írási-kimeneti nyilatkozat használatával, így könnyen használhatjuk újra., Változtassa meg a While hurkot egy ilyen kijelentés beillesztéséhez:

Ha most futtatja, akkor képesnek kell lennie egy ilyen kimenet megtekintésére:

Ez nagyszerű! Van egy kis fakitermelésünk. Ezek a naplóbejegyzések azonban mindig láthatóak lesznek. Egy összetettebb programban értelme lehet semmit sem mutatni, hacsak a felhasználó nem akarja látni a naplózást. Valószínűleg az is hasznos, hogy a felhasználó némi ellenőrzést az összeg a részleteket látnak. Itt jönnek be a naplószintek.,

Log szintek PowerShell

PowerShell van néhány Write – * nyilatkozatok, hogy a térkép a hagyományos log szintek, mint:

  • Write-Verbose
  • Write-Debug
  • Write-Information
  • Write-Warning
  • Write-Error

Verbose

nézzük meg írni-Verbose először. Megváltoztathatjuk üzeneteinket a közbenső lépésekről az írás-Verbose használatához., Amikor fut a forgatókönyvet, nem fogjuk látni a köztes lépéseket:

De ha hozzátesszük a -Verbose zászló, a naplók jelenik meg ismét:

Debug Információk, valamint Figyelmeztetés

A Debug Információk, valamint Figyelmeztető napló szinten a munka egy kicsit másként, mint megszoktuk, hogy a hagyományos bejelentkezés keretek más nyelveken., Először adjunk hozzá néhány extra nyilatkozatot:

Write-Debug "This is a debug statement"Write-Information "This is an info statement"Write-Warning "This is a warning statement"

Az írási hibakeresés csak akkor lesz látható, ha hozzáadja a-Debug zászlót. Ez is megáll a script fut, és kérjen megerősítést, hogy továbbra is. Ez hasznos a szkriptek lépésről lépésre történő futtatásához.

de van némi ellenőrzése arról, hogy figyelmeztetéseket és információs üzeneteket jelenítsen-e meg. A Write-Warning and Write-Information parancsok vezérelhetők a-WarningAction and-InformationAction zászlók használatával.,se zászlók, csak a figyelmeztető üzenetek jelennek meg:

Ha meg akarjuk mutatni az információkat, üzeneteket, még hozzáadásával -InformationAction Továbbra is lobogó:

ha meg szeretnénk elrejteni a figyelmeztetések, használhatjuk a -WarningAction SilentlyContinue lehetőség:

Hiba

Végül, nézzük meg, hogy Write-Error működik., Tehetünk hozzá egy ilyen nyilatkozat, hogy a script:

Write-Error "Something went wrong"

Ha ez az állítás kivégezték, PowerShell megáll a végrehajtás a forgatókönyvet írni a hiba, hogy a konzol, valamint néhány részletet, ami hasznos lehet:

Mi Az Alkalmazás Naplózás?

vessünk egy lépést a PowerShell szkriptünktől, és nézzük meg, hogy pontosan mi is az alkalmazás naplózása., A sorozatunk első bejegyzése jól definiálta:

Az alkalmazás naplózása magában foglalja az alkalmazás futásidejű viselkedésével kapcsolatos információk rögzítését egy tartósabb adathordozóra.

már elvégeztük az első részt: más szóval, az alkalmazás futásidejű viselkedésével kapcsolatos információk rögzítése. Bemutatjuk a folyamat közbenső eredményeit. De nem a második részt csináljuk. Nem rögzítjük ezt az információt egy tartós adathordozónak. Amikor lezárjuk a PowerShell munkamenetet, elvesztettük ezt az információt. Először csináljuk.,

naplózás egy fájlba

hozzáadjuk ezt a Naplófunkciót a szkriptfájlunkhoz:

Function Log { param( $msg ) Add-Content log.txt $msg}

egyszerűen egy karakterláncot vesz fel, majd hozzáadja egy naplóhoz.txt fájl.,

Akkor meg tudjuk változtatni a napló nyilatkozatot, hogy már nem használ Write-Verbose de ez a Napló funkció helyett:

Log "Intermediate result: $($sum)"

Most, hogy tudjuk futtatni a szkriptet, majd hozzon létre egy fájlt, amely a köztes lépéseket:

De ha elfogy a forgatókönyvet, többször is, csak egy hosszú listát a mondatok. Nem tudhatjuk, mikor voltak bejelentkezve a sorok. Egy összetettebb forgatókönyvben, amely több szkriptet tartalmaz, azt sem tudjuk, honnan származik a naplóvonal-azaz.,, ahonnan ps1 fájl. Több információ is van, amit naplózhatunk.

ismét Vegyünk egy lépést hátra, és nézzük meg, mit akarunk elérni a naplózással.

miért naplózunk?

a PowerShellt gyakran használják bizonyos feladatok automatizálására és szkriptelésére, amelyek egyébként unalmasak és hibásak lennének. Az automatizálás valóban értéket ad, ha összetettebb feladatokra alkalmazzák. De ezeknek az összetett szkripteknek nagyobb esélye lehet a törésre is: előfordulhat, hogy a szolgáltatások nem reagálnak, a gép konfigurációi megváltozhatnak stb.,

naplózás nélkül nehéz tudni, hogy a szkriptek jól futottak-e, vagy valami rosszul ment-e. Ha valami rosszul sült el, a fakitermelés segít kideríteni, hogy hol és miért. Az alkalmazás naplózása segíthet abban is, hogy betekintést nyerjen abba, hogy a szkriptek mely részeit használják leginkább, vagy ahol továbbra is teljesítménynövekedést lehet elérni.

mit ne jelentkezzen be?

naplózási nyilatkozatok írásakor ügyeljen arra, hogy az érzékeny vagy személyes adatokat kihagyja., Példák:

  • jelszavakat, hozzáférési tokenek
  • a hitelkártya számot, vagy bankszámlaszámok
  • társadalombiztosítási számok
  • e-mail címeket
  • cím
  • titkosítási kulcsokat
  • társadalombiztosítási számok

Az OWASP puskát a fakitermelés van egy rész, arról, hogy az adatokat zárja ki, hogy érdekes, hogy olvassa el. Bár teljes körű alkalmazásokra irányul, hasznos lehet A PowerShell szkriptek számára is. El tudom képzelni a forgatókönyvet, ahol a PowerShell szkriptek kezelik az e-mail címeket vagy bizonyos API kulcsokat.,

Az ilyen személyazonosításra alkalmas információk (vagy PII) naplózása veszélyes. Nem csak a Felhasználó kifejezett beleegyezésére van szüksége a legtöbb országban, de ha az adatok kiszivárogtak, akkor Ön vagy vállalata felelősségre vonható. Ha ez nem igazán szükséges, akkor jobb, ha ezeket az adatokat kihagyja.

mit kell bejelentkeznie?

a Ruby naplózással való kezdésről szóló cikkünk nagyszerű pontot jelent:

a naplóbejegyzést eseményként kell gondolnia—valami, ami érdekes az alkalmazás számára, ami egy időben történt.,

Ez azt jelenti, hogy legalább időbélyegzőre és az esemény leírására van szükségünk. A leírás releváns adatokat is tartalmazhat. Ezt nem mindig könnyű előre meghatározni. Gondoljon arra, hogy mit kell hibaelhárítania egy olyan szkriptet, amely nem sikerült sikeresen futtatni. Ha később olyan helyzetbe kerül, ahol további információra lett volna szüksége a probléma megoldásához, adja hozzá a naplózáshoz a következő alkalommal.,

kevésbé nyilvánvaló, de nagyon hasznos, ha naplószintet tartalmaz:

  • a legalacsonyabb szinten a hibakeresési utasítások hasznosak lehetnek a PowerShell szkript végrehajtott áramlásának nyomon követéséhez.
  • egy szinttel feljebb vannak tájékoztató üzenetek a szkript funkcionális oldaláról:mit hajtottak végre, miért és milyen adatokkal?
  • akkor ott van a figyelmeztetések szintje is: olyan dolgok, amelyek nem normálisak és potenciálisan károsak, de nem akadályozzák meg a szkript folytatását.
  • végül a hibaszintű üzenetek olyan hibák naplózására szolgálnak, amelyek a szkript összeomlását okozták.,

választhatja, hogy naplózza ezeket a szinteket, vagy csak egy adott szintet és felfelé (például figyelmeztetések és hibák). Ezután, ha további információra van szüksége, konfigurálhatja a szkriptet úgy, hogy további részleteket is naplózzon a következő végrehajtásról.

saját egyszerű naplózási funkciónk nem tartalmazta a naplózási szinteket. Ahogy az időbélyeget sem. Természetesen hozzáadhatjuk ezt a funkciót, de szerencsére mások már létrehoztak tisztességes naplózási szkripteket.

írja be a naplózási szkriptet

van egy egyszerű, mégis hasznos szkript a Techneten, az írási napló néven., Ha letöltjük, megváltoztathatjuk a szkriptünket, hogy így nézzen ki:

felvettük a függvény-Write-Log. ps1 fájlt, eltávolítottuk a Naplófunkciót, majd a hívást egy írási naplóra cseréltük. Átadhatunk egy üzenetet, egy szintet és egy utat. A szint lehet információ, figyelmeztetés vagy hiba. Vegye figyelembe, hogy ennek a szkriptnek nincs hibakeresési szintje, ami sajnálatos. Könnyen módosíthatja, hogy belefoglalja, mivel a szkript az MIT licenc alatt jelenik meg, amely lehetővé teszi a módosítást.,

amikor ezt a szkriptet használjuk, a naplónk így fog kinézni:

2019-08-20 09:18:29 INFO: Intermediate result: 512019-08-20 09:18:29 INFO: Intermediate result: 6

most már világos naplóvonalak vannak, amelyek tartalmazzák az időbélyeget, a naplószintet és az üzenetünket. Ez sokkal jobb, mint korábban. Ez elegendő lehet az Ön igényeinek, de vessünk egy lépéssel tovább, és nézzünk meg egy másik lehetőséget:a PSFramework.

írja be a naplózási keretrendszert

a PSFramework egy PowerShell keretrendszer, amely számos hasznos segédprogramot tartalmaz. Csak a fakitermelési részt fogjuk megnézni.,

a PSFramework használatához először telepítenie kell a PowerShell Telepítőmodul PSFramework futtatásával. (Lehet, hogy rendszergazdaként kell futtatnia a PowerShell konzolt). Ezután írhat a naplófájlokba a Write-PSFMessage szkript meghívásával. A mi esetünkben ez így néz ki:

Write-PSFMessage -Level Output -Message "Intermediate result: $($sum)"

figyeljük meg, hogy nem használunk információs szintet. Ehelyett a kimenetet használjuk. Ennek oka az, hogy a PSFramework olyan naplószinteket használ, amelyek jobban megfelelnek a PowerShell által alapértelmezés szerint megadott különböző kimeneti adatfolyamoknak: Verbose, Host, Output, Warning, Error stb.,

a naplófájl is kissé másnak tűnik, mint amit megszoktunk:

az oszlopfejlécek hiányoznak, de ez könnyen orvosolható a naplózási szolgáltató első beállításával:

Ez a naplófájl tartalmaz egy időbélyeget a fájlnévben, és most tartalmaz egy fejlécet. Ennek oka az, hogy a PSFramework alapértelmezett naplózási szolgáltatója nem ad hozzá fejlécsort,de a logfile szolgáltató., A naplófájl most így fog kinézni:

Ez most sok hasznos információt tartalmaz, például a szkriptünk fájlnevét, a naplózás sorát, valamint a szkriptet futtató felhasználó felhasználónevét. A psframework naplózásának másik nagy előnye, hogy aszinkron módon naplóz. A naplózás nem lassítja le a szkripteket. Végül automatikusan megtisztítja a naplókat is. Alapértelmezés szerint hét nap elteltével, vagy ha meghaladja a 100 megabájtot, eltávolítja a naplófájlokat.,

a függvény-írás-napló szkript jobban illeszkedik ahhoz, amit sok alkalmazásprogramozó használt. Tartalmazza a szabványos naplózási szinteket (kivéve a hibakeresést), valamint naplófájlt ír, mint sok naplózási keretrendszer: időbélyeget, naplózási szintet és az üzenetet.

azonban hiányzik néhány extra funkció, ami fontos lehet az Ön számára: log clean up; aszinkron naplózás; és extra technikai információk, mint a script, sorszám, és végrehajtó felhasználó.,

a PSFramework naplózás biztosítja ezeket a funkciókat, bár megköveteli a teljes keretrendszer telepítését. Ez nem lehet egy igazi kérdés, de ez valami, hogy tartsa szem előtt. A PSFramework különböző naplózási szinteket is használ, mint amihez szoktunk. Ezek azonban szorosan illeszkednek a PowerShell kimeneti áramaihoz. Ez természetesebbnek érzi magát a tapasztalt PowerShell felhasználók számára.

mi a következő lépés?

vettünk egy pillantást egy egyszerű módja annak, hogy jelentkezzen be PowerShell. Saját megoldásunkat egy jobb szkript (Function-Write-Log.ps1) használatával, valamint a Psframeworkben található naplózással is továbbfejlesztettük.,

egy dolog, ami meglepett, az volt, hogy a Powershellbe való bejelentkezés még mindig meglehetősen alapvető. Nem az, hogy az általunk vizsgált lehetőségek rosszak vagy hiányosak. De nem találtam egyetlen naplózási szkriptet vagy modult, amely több naplózási szintet, aszinkron naplózást, naplótisztítást, és ami a legfontosabb, több naplózási célt tartalmaz.

mi van, ha hibákat akarunk küldeni egy e-mail címre? Vagy mi van, ha be akarunk jelentkezni egy adatbázisba? Amennyire látom, a PSFramework itt kínálja a legtöbb lehetőséget, de az e-mail vagy az adatbázis nem szerepel. Lehet, hogy lehet írni a saját, regisztrálja a PSFramework, bár.,

ennek oka lehet, hogy a PowerShell világa különbözik az alkalmazásfejlesztés világától. A PowerShell szkriptek sokkal testreszabottabbak lehetnek, egy adott forgatókönyv számára készültek, több különálló szkriptből állnak.

a naplózás azonban továbbra is fontos, különösen olyan szkriptek esetén, amelyek rendszeresen futnak, és bizonyos szintű bonyolultsággal rendelkeznek. PowerShell egy erős nyelv, hogy automatizálják a feladatok sokaságát. Ha valami baj van egy ilyen feladattal, akkor tudni akarod, mi történt rosszul, mi előzte meg, hogyan lehet megjavítani. A naplók megadják ezt az információt.,

a következő lépésként érdemes megnézni a naplók összesítését és kezelését. A Scalyr nagyszerű eszköz erre. Nézze meg a Scalyr API-t a naplóesemények Scalyr-re történő küldésének különböző lehetőségeihez. Ez könnyen hívható a PowerShell, és javítja a képességét, nyomon követése, hibaelhárítás a PowerShell szkriptek.

ezt a bejegyzést Peter Morlion írta., Peter egy szenvedélyes programozó, amely segíti az embereket és a vállalatokat a kódjuk minőségének javításában, különösen a régi kódbázisokban. Határozottan úgy véli, hogy az ipar legjobb gyakorlatai felbecsülhetetlen értékűek, amikor e cél elérése érdekében dolgoznak, specialitásai közé tartozik a TDD, a DI és a szilárd elvek.