meidän ”Getting Started with Logging” – sarja, olemme jo hakkuut monilla kielillä ja puitteita: C#, Java, Python, Ruby, Ruby on Rails, Solmu.js, Symfony, Kotlin, kolvi, kulmikas ja Laravel. Tänään, lisäämme toisen tähän sarjaan: PowerShell.

Se saattaa olla outo lisätä luetteloon; PowerShell on scripting kieli, kun taas toiset voidaan nähdä koko sovelluksen ohjelmointikieliä tai puitteita., PowerShell on kuitenkin niin tehokas, että se voi luoda järjestelmiä, jotka ovat monimutkaisia ja riittävän tärkeitä Puunkorjuun takaamiseksi.

Powershellia käytetään usein kriittisten huoltotehtävien suorittamiseen tietokoneilla tai palvelimilla. On tärkeää, että ylläpitäjät tietävät, miten nämä skriptit toimivat hyvin tai eivät.

selvitämme, miten voit kirjautua Powershellilla hyvin perustavalla tavalla kirjoittamalla oman hakkuutoimintosi. Sitten kerromme, miksi kirjautuminen Powershellista on hyödyllistä. Puhumme myös siitä, mitä sinun pitäisi kirjautua ja mitä sinun ei pitäisi kirjautua., Lopuksi tarkastelemme kahta eri vaihtoehtoa, jotka helpottavat hakkuuelämääsi.

Yksinkertainen PowerShell Script

aloitetaan tämä erittäin yksinkertainen PowerShell script:

Tämä basic script ottaa kokonaisluvun input. Se sitten tekee summa numeroa, että numero. Jos tulos on pidempi kuin yksi numero, se suorittaa operaation uudelleen, kunnes tämä johtaa yhden numeron.,

Tässä muutamia esimerkkejä selventämään asioita:

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

Laita tämä kirjoitus tekstitiedosto ja tallenna se recursiveSum.ps1. Sitten, voit käyttää sitä milloin PowerShell-komentoriviltä ajamalla recursiveSum.ps1-45, esimerkiksi., Lähtö 9:

Tämä on skripti, joka on tarpeeksi yksinkertainen toimiakseen esimerkkinä, mutta on tarpeeksi askelia, että voisimme olla kiinnostuneita jotkut hakkuut. Totta kai tosielämän PowerShell-skriptit ovat paljon monimutkaisempia, mikä takaa tarpeen kirjata vielä enemmän.

helpoin tapa kirjautua Powershelliin

kirjoitetaan jokaisen vaiheen tulos konsoliin. Kirjoitamme konsolille jo jotain Kirjoitustulostetta käyttämällä, joten voimme käyttää sitä helposti uudelleen., Muutos While-silmukka sisältää tällaisen lausunnon:

Kun käytät sitä nyt, sinun pitäisi pystyä näkemään lähtö kuten tämä:

Se on hienoa! Meillä on meneillään hakkuita. Nämä lokitiedot näkyvät kuitenkin aina. Monimutkaisemmassa ohjelmassa ei ehkä kannata näyttää mitään, ellei käyttäjä halua nähdä kirjausta. On luultavasti myös hyödyllistä antaa käyttäjälle mahdollisuus hallita näkemänsä yksityiskohtien määrää. Tässä tulee lokitasoja.,

Log Tasoilla PowerShell

PowerShell on joitakin Kirjoitus-* lausunnot, että kartta perinteisen log tasoilla, kuten:

  • Write-Verbose
  • Write-Debug-tietoihin
  • Write-Tiedot
  • Write-Varoitus
  • Write-Virhe

Verbose

katsotaanpa Kirjoittaa-Verbose ensin. Voimme muuttaa viestejämme välivaiheista Kirjoitusverboosiksi., Kun me ajaa meidän script nyt, emme näe meidän väli vaiheet:

Mutta jos lisäämme -Verbose lippu, meidän lokit näyttävät jälleen kerran:

Debug -, Tieto -, ja Varoitus

Debug -, Tieto -, ja Varoitus log tasoilla toimivat hieman eri tavalla kuin olemme tottuneet alkaen perinteinen puunkorjuu puitteet muilla kielillä., Katsotaanpa lisätä ylimääräistä lausuntoja, ensimmäinen:

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

Kirjoita-Debug näkyy vain, kun lisäät -Debug lippu. Se myös estää käsikirjoituksen käynnissä ja pyytää vahvistusta jatkaa. Tämä on hyödyllistä käydä läpi skriptejä vaihe vaiheelta.

Mutta sinulla on valvoa, onko tai ei näytä varoitukset ja tiedotusviestit. Kirjoita Varoitus-ja Write-Tietoja-komennot voidaan ohjata käyttämällä -WarningAction ja -InformationAction liput.,se lippuja, vain varoitus viestit näkyvät:

Jos haluamme näyttää tietoja, viestejä, voimme tehdä niin lisäämällä -InformationAction Edelleen flag:

Ja jos haluamme piilottaa varoitukset, voimme käyttää -WarningAction SilentlyContinue vaihtoehto:

Virhe

Nyt, katsotaanpa, miten Kirjoittaa-Virhe toimii., Voimme lisätä tällaisen lausunnon meidän käsikirjoitus:

Write-Error "Something went wrong"

Kun tämä lauseke suoritetaan, PowerShell lopettaa suorittamisen meidän käsikirjoituksen ja kirjoittamaan virhe konsoli, sekä joitakin yksityiskohtia, jotka saattavat olla hyödyllisiä:

Mitä On Sovellus Hakkuut?

otetaan nyt askel pois PowerShell-komentosarjasta ja katsotaan, mikä sovelluksen kirjaus tarkalleen on., Ensimmäinen viesti meidän sarjassa määritteli sen hyvin:

Sovellus hakkuut liittyy tallennuksen tietoja sovelluksen runtime käyttäytymistä enemmän pysyviä medium.

– Olemme jo tekemässä ensimmäinen osa: toisin sanoen, syömällä tietoja meidän sovelluksen runtime käyttäytymistä. Näytämme prosessimme välitulokset. Mutta emme tee toista osaa. Emme äänitä tätä tietoa sinnikkäälle medialle. Kun suljemme PowerShell-istunnon, menetimme tämän tiedon. Tehdään se ensin.,

Puunkorjuu Tiedostoon

lisää tämä Kirjautuminen toiminto meidän script-tiedosto:

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

– Se yksinkertaisesti vie Merkkijono, ja sitten lisää se tukki.txt-tiedosto.,

Sitten voimme muuttaa meidän log-lausunnon niin, että se ei enää käytä Write-Verbose, mutta tämä Log-toiminto sen sijaan:

Log "Intermediate result: $($sum)"

Nyt voimme ajaa meidän script ja se luo tiedoston, joka sisältää meidän välivaiheita:

Mutta jos me ajaa meidän käsikirjoituksen useita kertoja, se on vain pitkä lista lausuntoja. Emme voi tietää, milloin linjat kirjattiin. Monimutkaisemmassa skenaariossa, joka sisältää useita skriptejä, meillä ei myöskään ole mitään keinoa tietää, mistä lokirivi on peräisin—ts.,, josta ps1-tiedosto. On enemmän tietoa, että voisimme tehdä hakkuita.

taas, otetaan askel taaksepäin ja katsotaan, mitä yritämme saavuttaa hakkuilla.

miksi kirjaudumme?

Powershellia käytetään usein automatisoimaan ja käsikirjoittamaan tiettyjä tehtäviä, jotka muuten olisivat tylsiä ja virhealttiita. Automaatio alkaa todella tuottaa arvoa, kun sitä sovelletaan monimutkaisempiin tehtäviin. Mutta näitä monimutkaisia skriptejä voi myös olla enemmän mahdollisuuksia rikkoa: palveluja ei voi vastata, kone kokoonpanot ovat muuttuneet, jne.,

ilman kirjaamista on vaikea tietää, toimivatko skriptit hyvin vai menikö jokin pieleen. Jos jokin meni vikaan, hakkuut auttavat selvittämään, missä ja miksi. Sovellus hakkuut voivat myös auttaa sinua keräämään oivalluksia, jotka paloja skriptejä käytetään eniten tai jossa suorituskyky voitot voivat olla vielä tehty.

Mitä eikö Sinun Pitäisi Kirjautua?

kun kirjoitat kirjauslausuntosi, varmista, että jätät arkaluontoiset tai henkilötiedot pois., Esimerkkejä:

  • salasanat ja pääsyn kuponkia
  • luottokortin numeroita tai pankkitilin numerot
  • sosiaaliturva numerot
  • sähköposti-osoitteet
  • katu-osoitteet
  • salaus avaimet
  • sosiaaliturva numerot

Myös OWASP huijata arkki hakkuut on kohdassa tietoja tietojen sulje pois, että on mielenkiintoista lukea. Vaikka se on suunnattu täysimittaisiin sovelluksiin, siitä voi olla hyötyä myös PowerShell-skripteille. Voin kuvitella skenaarion, jossa PowerShell-skriptit käsittelevät sähköpostiosoitteita tai tiettyjä API-avaimia.,

tällaisten henkilökohtaisesti tunnistettavien tietojen (tai PII) kirjaaminen on vaarallista. Ei vain tarvitset nimenomaista suostumusta käyttäjältä useimmissa maissa, mutta jos tiedot ovat koskaan vuotaneet, voit tai yrityksesi voidaan asettaa vastuuseen. Jos se ei ole tarpeen, on parempi jättää nämä tiedot pois.

mitä kannattaa kirjata?

– Meidän artikkeli aloittanut Ruby hakkuut tekee suuri, kastepiste:

Sinun pitäisi ajatella tapahtumaloki, kuten tapahtuma—jotain, joka kiinnostaa teidän sovellus, joka tapahtui jonkin aikaa.,

Tämä tarkoittaa sitä, että vähintään tarvitaan aikaleima ja kuvaus tapahtumasta. Kuvaus voisi sisältää myös asiaankuuluvia tietoja. Tätä ei ole aina helppo määrittää etukäteen. Mieti, mitä sinun pitäisi vianmääritys skripti, joka epäonnistui ajaa onnistuneesti. Ja jos myöhemmin kohtaat tilanteen, jossa olisit tarvinnut lisätietoja ongelman korjaamiseksi, lisää se seuraavan kerran puunkorjuuseen.,

Vähemmän ilmeinen, mutta erittäin hyödyllinen, on sisällyttää log level:

  • alimmalla tasolla, Debug-lausekkeita voi olla hyödyllistä seurata toteutettu virtaus teidän PowerShell script.
  • a level up ovat Informaatioviestejä käsikirjoituksesi toiminnallisista puolista: mitä toteutettiin, miksi ja millä tiedoilla?
  • sitten on myös varoitusten taso: asiat, jotka eivät ole normaaleja ja mahdollisesti vahingollisia, mutta jotka eivät estä käsikirjoitusta jatkumasta.
  • lopulta virhetason viesteissä on kirjattavana virheitä, jotka ovat saaneet käsikirjoituksen kaatumaan.,

Voit kirjautua kaikki nämä tasot tai vain tietyn tason ja ajan (esimerkiksi, varoitukset ja virheet). Sitten, kun tarvitset lisätietoja, voit määrittää komentosarjan myös loki lisätietoja seuraavasta suorituksesta.

oma yksinkertainen hakkuutoimintomme ei sisältänyt lokitasoja. Se ei myöskään lisännyt aikaleimaa. Voimme lisätä tämän toiminnallisuuden tietenkin, mutta onneksi muut ovat jo luoneet kunnon hakkuut skriptejä.

Kirjoita Kirjauskirjoitus

Teknetissä on yksinkertainen mutta hyödyllinen kirjoitus nimeltä Write-Log., Jos me ladata sen, voimme muuttaa meidän skripti näyttää tältä:

– Olemme mukana Toiminta-Write-Log.ps1-tiedoston, poistaa meidän Log-toiminto, ja korvata soittaa puhelun, Kirjoittaa-Log. Voimme välittää viestin, tason ja polun. Taso voi olla Info, varoittaa, tai virhe. Huomaa, että tämä skripti ei ole Debug taso, mikä on valitettavaa. Voit kuitenkin helposti muokata sitä sisällyttää sen, koska script on julkaistu MIT-lisenssillä, joka mahdollistaa muutoksen.,

Kun käytämme tämän käsikirjoituksen, meidän loki näyttää tältä:

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

– Meillä on nyt selkeä loki rivit, jotka sisältävät aikaleiman, loki tasolla, ja meidän viesti. Se on paljon parempi kuin aiemmin. Tämä voi riittää tarpeisiisi,mutta otetaan askel pidemmälle ja Katsotaan toinen vaihtoehto: Psframe.

Kirjoita Logging Framework

PSFramework on PowerShell kehys, joka sisältää useita hyödyllisiä apuohjelmia. Katsomme vain hakkuuosuutta.,

jotta pääset alkuun Psframeworkilla, sinun on ensin asennettava se ajamalla Install-Module PSFramework in PowerShell. (Saatat joutua käyttämään PowerShell-konsolia järjestelmänvalvojana). Sitten, voit kirjoittaa lokitiedostoja kutsumalla Write-PSFMessage script. Meidän tapauksessa se näyttäisi tältä:

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

Huomaa, miten emme käytä Info-tasolla. Sen sijaan käytämme tuotosta. Tämä johtuu siitä, PSFramework käyttää log tasoilla, jotka vastaavat enemmän hienosti, että eri output purojen, että PowerShell on oletuksena: Verbose, Isäntä, Tuotanto -, Varoitus -, Virhe, jne.,

lokitiedosto on myös näyttää hieman erilainen kuin mitä olemme tottuneet:

sarakkeiden otsikot ovat puuttuu, mutta se voidaan helposti korjata asettamalla logging provider ensimmäinen:

Tämä lokitiedosto sisältää aikaleima, tiedostonimi, ja nyt ovat otsikkorivi. Tämä johtuu siitä, että Psframeworkin oletuslokipalveluntarjoaja ei lisää otsikkoriviä, mutta logfile-palveluntarjoaja lisää., Loki tiedosto näyttää nyt tältä:

Tämä nyt sisältää paljon hyödyllisiä tietoja, kuten tiedostonimi meidän script, linja, jossa hakkuut tapahtunut ja käyttäjätunnus käyttäjä, joka on käynnissä script. Toinen suuri etu Puunkorjuun PSFramework on, että se tukkii asynkronisesti. Kirjaaminen ei hidasta skriptejäsi. Lopuksi, se myös automaattisesti puhdistaa lokit. Oletuksena se poistaa lokitiedostot seitsemän päivän kuluttua tai kun ne ylittävät 100 megatavua.,

Vertailu

Toiminta-Write-Log script vastaa enemmän sitä, mitä monet sovellus ohjelmoijat ovat tottuneet. Se sisältää normaalit lokitasot (Debugia lukuun ottamatta) ja kirjoittaa lokitiedostoa, kuten monet lokikehykset tekevät: aikaleima, lokitaso ja viesti.

Kuitenkin, se kaipaa ylimääräistä toiminnallisuutta, joka voi olla ratkaisevaa sinulle: log siivota, asynkroninen hakkuut; ja lisää teknistä tietoa, kuten käsikirjoitus, linja numero, ja suorittamalla käyttäjä.,

Psframe-kirjaus tarjoaa nämä ominaisuudet, vaikka se vaatii sinua asentamaan koko kehyksen. Tämän ei pitäisi olla ongelma, mutta se on pidettävä mielessä. Psframe käyttää myös erilaisia hakkuutasoja kuin mihin olemme tottuneet. Ne vastaavat kuitenkin tarkasti PowerShell-lähdevirtoja. Tämä voi tuntua luonnollisemmalta kokeneille PowerShell-käyttäjille.

mitä seuraavaksi?

olemme katsoneet yksinkertaisen tavan kirjautua Powershelliin. Meillä on myös parantunut, kun meidän oma ratkaisu käyttämällä parempi käsikirjoitus (Toiminto-Write-Log.ps1) ja käyttämällä hakkuut sisältyvät PSFramework.,

yksi asia, joka iski minuun, oli se, että hakkuut Powershellissa ovat vielä melko perusasioita. Kyse ei ole siitä, että tarkastelemamme vaihtoehdot olisivat huonoja tai puutteellisia. Mutta en löytänyt yhden hakkuut script tai moduuli, joka sisältää useita log tasoilla, asynkroninen hakkuut, log siivota, ja, mikä tärkeintä, useita log-kohteisiin.

entä jos haluamme lähettää virheitä sähköpostiosoitteeseen? Tai entä jos haluamme kirjautua tietokantaan? Sikäli kuin näen, PSFramework tarjoaa eniten vaihtoehtoja täällä, mutta sähköposti tai tietokanta eivät sisälly. Voi kuitenkin olla mahdollista kirjoittaa omansa ja rekisteröidä se Psframeworkiin.,

Tämä saattaa johtua siitä, että PowerShellin maailma on erilainen kuin sovelluskehityksen maailma. PowerShell-skriptit voivat olla paljon räätälöidympiä, tiettyyn skenaarioon tarkoitettuja ja useista erillisistä skripteistä koostuvia.

silti kirjaaminen on edelleen tärkeää, erityisesti skripteillä, jotka toimivat säännöllisesti ja joilla on tietynlainen monimutkaisuus. PowerShell on tehokas kieli automatisoimaan monia tehtäviä. Kun jokin menee pieleen tällaisessa tehtävässä, haluat tietää, mikä meni pieleen, mikä edelsi sitä ja miten korjata se. Lokit antavat sinulle tämän tiedon.,

seuraava askel ylös, et ehkä halua katsoa kokoamiseen ja hallita lokit. Scalyr on loistava työkalu tähän. Tutustu Scalyr API eri vaihtoehtoja lähettää lokitapahtumia Scalyr. Tämä voidaan helposti kutsua mistä PowerShell ja parantaa kykyä seuranta-ja vianmääritys PowerShell skriptejä.

tämän viran on kirjoittanut Peter Morlion., Peter on intohimoinen ohjelmoija, joka auttaa ihmisiä ja yrityksiä parantamaan niiden laatua koodi, erityisesti legacy codebases. Hän uskoo vakaasti, että alan parhaat käytännöt ovat korvaamattomia, kun työskentelevät kohti tätä tavoitetta, ja hänen erikoisuuksia ovat TDD -, DI -, ja VANKKA periaatteita.