none
Powershell - pomůžete začátečníkovi se skriptem?

    Dotaz

  • Zdravím,

    začínám se učit v PS, tak mi prosím promiňte, pokud je to banální dotaz. Chtěl bych na serveru vzít konkrétní události ze security logu a poslat mail, kde v předmětu bude jméno uživatele, který událost vyvolal a v těle mailu bude podrobný obsah události. Začal jsem následovně:

    get-eventlog -logname security -newest 1 -instanceid 4771,4625 | format-list -property message

    Tím dostanu text, se kterým chci nadále pracovat. Ten bude zároveň v tělu mailu. Teď bych z tohoto textu rád vzal řádek s klíčovým slovem "Account Name" a vložil ho do předmětu zprávy. Pokud to udělám rourou na příkaz Select-String, tak nedostanu nic:

    get-eventlog -logname security -newest 1 -instanceid 4771,4625 | format-list -property message | Select-String -Pattern "Account Name"

    Pokud výstup uložím do souboru a z něj teprve použiji Select-String, tak správnou odpověď dostanu.

    Určitě to bude nějaká začátečnická chyba. Mohl by mi někdo zkušenější poradit?

    Díky, JŠ


    20. ledna 2014 15:59

Odpovědi

  • Tak už jsem si stačil pomoci sám. Kdyby to někdo další hledal, tady je výsledek:

    $jmeno = Get-EventLog -LogName security -Newest 1 -InstanceId 4771,4625
    $jmeno.message.substring($jmeno.message.IndexOf("Account Name:",100)+15,8)
    Skript vrátí jméno uživatele, který se pokoušel neúspěšně přihlásit do Active Directory.


    23. ledna 2014 20:07

Všechny reakce

  • 1. Hlasku lze poslat i "nativnimi" prostredky. Pouziva se "Attach Task To This Event".

    2. Skript zhavaruje, pokud se chyby v logu nevyskytuji. Zrejme byste mel osetrit nejdrive toto.

    M.

    20. ledna 2014 19:20
    Moderátor
  • 1. Ano, mám v úmyslu použít nativní "Attach task to this event", ale tím samotným nezískám tvar mailu který požaduji. Proto se snažím vytvořit PS skript

    2. Děkuji Vám za postřeh, vezmu to v úvahu při ladění hotového skriptu. V tuto chvíli to není příčinou problému, protože událostí 4771 a 4625 máme v doméně několik denně. Jak jsem psal, tak pokud napíšu příkaz v tom prvním tvaru, tak dostanu skutečně tu událost, kterou hledám.


    20. ledna 2014 19:59
  • Tak jsem teď strávil půl hodiny hledáním, jak převést to co leze z format-list na string. Bez úspěchu. Máte někdo nějaký nápad?
    21. ledna 2014 16:03
  • Tak už jsem si stačil pomoci sám. Kdyby to někdo další hledal, tady je výsledek:

    $jmeno = Get-EventLog -LogName security -Newest 1 -InstanceId 4771,4625
    $jmeno.message.substring($jmeno.message.IndexOf("Account Name:",100)+15,8)
    Skript vrátí jméno uživatele, který se pokoušel neúspěšně přihlásit do Active Directory.


    23. ledna 2014 20:07