
ç¹ã«Windowsã«ã¯ãã®ããã®å€ãã®éèªæãªããŒã«ãããããããã°ã䜿çšãã䟿å©ãªäœæ¥ã«ã€ããŠèª¬æãããšããæ¥ãŸããã ããšãã°ãLog Parserã¯ãåã«çœ®ãæããããªãããšããããŸãã
ãã®èšäºã§ã¯ã SplunkãELK ïŒElasticsearch + Logstash + KibanaïŒãªã©ã®æ·±å»ãªåé¡ã«ã€ããŠã¯èª¬æããŸããã ç§ãã¡ã¯ã·ã³ãã«ã§ç¡æã«çŠç¹ãåœãŠãŠããŸãã
ãã°ãšã³ãã³ãã©ã€ã³
PowerShellã®åã¯ã findãfindstrãªã©ã®cmdãŠãŒãã£ãªãã£ã䜿çšã§ããŸããã åçŽãªèªååã«éåžžã«é©ããŠããŸãã ããšãã°ã1C 7.7亀æã§ãšã©ãŒããã£ããããå¿
èŠãããå Žåã亀æã¹ã¯ãªããã§åçŽãªã³ãã³ãã䜿çšããŸããã
findstr "Fail" *.log >> fail.txt
fail.txtãã¡ã€ã«å
ã®ãã¹ãŠã®äº€æãšã©ãŒãåä¿¡ã§ããŸããã ãã ãã以åã®ãšã©ãŒã«é¢ããæ
å ±ãååŸãããªã©ãããã«äœããå¿
èŠãªå Žåã¯ãforã«ãŒãã䜿çšããŠå·šå€§ãªã¹ã¯ãªãããäœæãããããµãŒãããŒãã£ã®ãŠãŒãã£ãªãã£ã䜿çšããå¿
èŠããããŸããã 幞ããPowerShellã®ç»å Žã«ããããããã®åé¡ã¯éå»ã®ãã®ãšãªããŸããã
ããã¹ããã°ãæäœããããã®äž»èŠãªããŒã«ã¯ãããã¹ããã¡ã€ã«ã®å
容ã衚瀺ããããã«äœ¿çšãããGet-Contentã³ãã³ãã¬ããã§ãã ããšãã°ãã³ã³ãœãŒã«ã«WSUSãµãŒãã¹ãã°ã衚瀺ããã«ã¯ã次ã®ã³ãã³ãã䜿çšã§ããŸãã
Get-Content -Path 'C:\Program Files\Update Services\LogFiles\SoftwareDistribution.log' | Out-Host -Paging
ãã°ã®æåŸã®è¡ã衚瀺ããããã«ãTailãã©ã¡ãŒã¿ãŒããããŸããããã¯ãWaitãã©ã¡ãŒã¿ãŒãšå
±ã«ããã°ããªã³ã©ã€ã³ã§èŠãããšãã§ããŸãã ã³ãã³ãã䜿çšããŠã·ã¹ãã ãã©ã®ããã«æŽæ°ãããããèŠãŠã¿ãŸãããã
>Get-Content -Path "C:\Windows\WindowsUpdate.log" -Tail 5 -Wait

Windowsã¢ããããŒãã®é²è¡ç¶æ³ãç£èŠããŠããŸãã
ãã°ã§ç¹å®ã®ã€ãã³ãããã£ããããå¿
èŠãããå Žåã¯ã Select-Stringã³ãã³ãã¬ããã圹ç«ã¡ãŸããããã«ãããæ€çŽ¢ãã¹ã¯ã«äžèŽããæååã®ã¿ã衚瀺ã§ããŸãã ææ°ã®Windowsãã¡ã€ã¢ãŠã©ãŒã«ããã¯ãã芧ãã ããã
Select-String -Path "C:\Windows\System32\LogFiles\Firewall\pfirewall.log" -Pattern 'Drop' | Select-Object -Last 20 | Format-Table Line

ç§ãã¡ã¯èª°ãç¥ç¶ã«craããããããšããŠããã®ããèŠãŠããŸãã
å¿
èŠã«å¿ããŠãç®çã®ååŸã®ãã°è¡ã調ã¹ãŠãContextãã©ã¡ãŒã¿ãŒã䜿çšã§ããŸãã ããšãã°ããšã©ãŒã®3è¡åŸãš3è¡åã衚瀺ããã«ã¯ã次ã®ã³ãã³ãã䜿çšã§ããŸãã
Select-String 'C:\Windows\Cluster\Reports\Cluster.log' -Pattern ' err ' âContext 3
äž¡æ¹ã®äŸ¿å©ãªã³ãã³ãã¬ãããçµã¿åãããããšãã§ããŸãã ããšãã°ãnetlogon.logã®45ã75è¡ç®ã衚瀺ããã«ã¯ã次ã®ã³ãã³ãã圹ç«ã¡ãŸãã
Get-Content 'C:\Windows\debug\netlogon.log' | Select-Object -First 30 -Skip 45
ã·ã¹ãã ãã°ã¯.evtx圢åŒã§ãããããããæäœããããã®åå¥ã®ã³ãã³ãã¬ããããããŸãã ã¯ã©ã·ãã¯ãã¬ãžã³ïŒãã¢ããªã±ãŒã·ã§ã³ãããã·ã¹ãã ããªã©ïŒãæäœããã«ã¯ã Get-Eventlogã䜿çšãããŸãã ãã®ã³ãã³ãã¬ããã¯äŸ¿å©ã§ãããä»ã®ã¢ããªã±ãŒã·ã§ã³ããã³ãµãŒãã¹ãã°ãæäœããããšã¯ã§ããŸããã å€å
žçãªéèªãå«ãããããéèªãæ±ãã«ã¯ãããæ±çšçãªãªãã·ã§ã³ã§ããGet-WinEventããããŸãã ããã«è©³ããèŠãŠãããŸãããã
䜿çšå¯èœãªã·ã¹ãã ãã°ã®ãªã¹ããååŸããã«ã¯ã次ã®ã³ãã³ããå®è¡ã§ããŸãã
Get-WinEvent -ListLog *

å©çšå¯èœãªéèªãšãããã«é¢ããæ
å ±ã衚瀺ããŸãã
ç¹å®ã®éèªã衚瀺ããã«ã¯ãååã远å ããã ãã§ãã ããšãã°ã次ã®ã³ãã³ãã䜿çšããŠãã·ã¹ãã ãã°ããæåŸã®20ãšã³ããªãååŸããŸãã
Get-WinEvent -LogName 'System' -MaxEvents 20

ã·ã¹ãã ãã°ã®æè¿ã®ãšã³ããªã
ç¹å®ã®ã€ãã³ããååŸããã«ã¯ãããã·ã¥ããŒãã«ã䜿çšããã®ãæã䟿å©ã§ãã PowerShellã§ã®ããã·ã¥ããŒãã«ã®æäœã®è©³çްã«ã€ããŠã¯ãTechnet about_Hash_Tablesãåç
§ããŠãã ããã
ããšãã°ãã€ãã³ãã³ãŒã1ããã³6013ã§ã·ã¹ãã ãã°ãããã¹ãŠã®ã€ãã³ããååŸããŸãã
Get-WinEvent -FilterHashTable @{LogName='System';ID='1','6013'}
ç¹å®ã®ã¿ã€ãã®ã€ãã³ãïŒèŠåãŸãã¯ãšã©ãŒïŒãåä¿¡ããå¿
èŠãããå ŽåãéèŠåºŠïŒã¬ãã«ïŒã«ãããã£ã«ã¿ãŒã䜿çšããå¿
èŠããããŸãã æ¬¡ã®å€ãå¯èœã§ãã
- 0-åžžã«æžã蟌ã¿ã
- 1-ã¯ãªãã£ã«ã«ã
- 2-ãšã©ãŒã
- 3-èŠåã
- 4-æ
å ±;
- 5-詳现ã
1ã€ã®ã³ãã³ãã§è€æ°ã®éèŠåºŠã®å€ãæã€ããã·ã¥ããŒãã«ãåéããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã ã·ã¹ãã ãã°ãããšã©ãŒãšèŠåãååŸããå Žåã¯ã Where-Objectã䜿çšããŠè¿œå ã®ãã£ã«ã¿ãŒåŠçã䜿çšã§ããŸãã
Get-WinEvent -FilterHashtable @{LogName='system'} | Where-Object -FilterScript {($_.Level -eq 2) -or ($_.Level -eq 3)}

ã·ã¹ãã ãã°ã®ãšã©ãŒãšèŠåã
åæ§ã«ãã€ãã³ãããã¹ãããã³æéã§çŽæ¥ãã£ã«ã¿ãªã³ã°ããããšã«ãããããŒãã«ãçµã¿ç«ãŠãããšãã§ããŸãã
PowerShellã®ããã¥ã¡ã³ãã§ãsyslogãæäœããããã®äž¡æ¹ã®ã³ãã³ãã¬ããã®åäœã®è©³çްãã芧ãã ããã
PowerShellã¯äŸ¿å©ã§æè»ãªã¡ã«ããºã ã§ãããæ§æã®ç¥èãå¿
èŠã§ãããè€éãªæ¡ä»¶ã倧éã®ãã¡ã€ã«ãåŠçããã«ã¯å®å
šãªã¹ã¯ãªãããæžãå¿
èŠããããŸãã ããããçŽ æŽãããLog Parserã䜿çšããŠãSQLã¯ãšãªã ãã§å¯ŸåŠãããªãã·ã§ã³ããããŸãã
SQLã¯ãšãªãä»ãããã°ã®æäœ
Utility Log Parserã¯ãããŒããã®åãã«çãŸãããã以æ¥ãå
¬åŒã®ã°ã©ãã£ã«ã«ã·ã§ã«ãååŸããããšã«æåããŸããã ããã«ããããããããã®é¢é£æ§ã¯å€±ãããããã°ãåæããããã®æããæ°ã«å
¥ãã®ããŒã«ã®1ã€ã§ããããšã«å€ããã¯ãããŸããã ãã®ãŠãŒãã£ãªãã£ã¯ãMicrosoftããŠã³ããŒãã»ã³ã¿ãŒããããŠã³ããŒãã§ããŸãããã®ãŠãŒãã£ãªãã£ã®ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã¯ Technet ã®ã£ã©ãªãŒã«ãããŸãã ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã«ã€ããŠã¯ãåŸã»ã©ããŠãŒãã£ãªãã£èªäœããå§ããŸãããã
Log Parserã®å¯èœæ§ã«ã€ããŠã¯ãã LogParser-çããããšãããç¥ã£ãŠããããšããè³æã§æ¢ã«èª¬æããŠããã®ã§ãå
·äœçãªäŸããå§ããŸãã
ãŸããããã¹ããã¡ã€ã«ãæ±ããŸããããšãã°ããã¡ã€ã¢ãŠã©ãŒã«ã§ãããã¯ãããRDPæ¥ç¶ã®ãªã¹ããååŸããŸãã ãã®æ
å ±ãååŸããã«ã¯ã次ã®SQLã¯ãšãªã§åé¡ãããŸããã
SELECT extract_token(text, 0, ' ') as date, extract_token(text, 1, ' ') as time, extract_token(text, 2, ' ') as action, extract_token(text, 4, ' ') as src-ip, extract_token(text, 7, ' ') as port FROM 'C:\Windows\System32\LogFiles\Firewall\pfirewall.log' WHERE action='DROP' AND port='3389' ORDER BY date,time DESC
çµæãèŠãŠã¿ãŸãããïŒ

Windowsãã¡ã€ã¢ãŠã©ãŒã«ã®ãã°ã確èªããŸãã
ãã¡ãããçµæã®ããŒãã«ã§ã¯ãäžŠã¹æ¿ããã°ã«ãŒãåãªã©ãäœã§ãã§ããŸãã SQLã®æ³ååãšç¥èã§ååã§ãã
Log Parserã¯ãä»ã®å€ãã®ãœãŒã¹ã§ãåªããæ©èœãçºæ®ããŸãã ããšãã°ããŠãŒã¶ãŒãRDPçµç±ã§ãµãŒããŒã«æ¥ç¶ããå ŽæãèŠãŠã¿ãŸãããã
TerminalServices-LocalSessionManager \ Operationalãã°ã䜿çšããŸãã
ãã¹ãŠã®ãã°ã§Log Parserããã®ããã«åäœããããã§ã¯ãããŸãã-äžéšã®ãã°ã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã ãã®å ŽåãïŒ
SystemRootïŒ
\ System32 \ Winevt \ Logs \ Microsoft-Windows-TerminalServices-LocalSessionManagerïŒ
4Operational.evtxããïŒ
tempïŒ
\ test.evtxã«ãã°ãã³ããŒããã ãã§ãã
ãã®ãªã¯ãšã¹ãã§ããŒã¿ãåãåããŸãïŒ
SELECT timegenerated as Date, extract_token(strings, 0, '|') as user, extract_token(strings, 2, '|') as sourceip FROM '%temp%\test.evtx' WHERE EventID = 21 ORDER BY Date DESC

ã¿ãŒããã«ãµãŒããŒã«èª°ããã€æ¥ç¶ãããã確èªããŸãã
IISãExchangeãªã©ã倿°ã®ãã°ãã¡ã€ã«ãåŠçããããã«Log Parserã䜿çšãããšç¹ã«äŸ¿å©ã§ãã SQLã®æ©èœã®ãããã§ããµãŒããŒã«æ¥ç¶ããIOSããã³Androidã®ããŒãžã§ã³ã«é¢ããçµ±èšãŸã§ãããŸããŸãªåææ
å ±ãååŸã§ããŸãã
äŸãšããŠããã®ã¯ãšãªã§æ¥ããšã®æåæ°ã®çµ±èšãèŠãŠã¿ãŸãããã
SELECT TO_LOCALTIME(TO_TIMESTAMP(EXTRACT_PREFIX(TO_STRING([
ã·ã¹ãã ã«Office Webã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ãããŠãããMicrosoftããŠã³ããŒã ã»ã³ã¿ãŒ ããããŠã³ããŒãã§ããå Žåã¯ãåºåã«çŸããå³ã衚瀺ã§ããŸãã

èŠæ±ãæºãããçµæã®ç»åãéããŸã...

çµæã«æå¿ããŸãã
Log Parserã®ã€ã³ã¹ããŒã«åŸãCOMã³ã³ããŒãã³ãMSUtil.LogQueryãã·ã¹ãã ã«ç»é²ãããããšã«æ³šæããŠãã ããã LogParser.exeã®åŒã³åºãã ãã§ãªããä»ã®äœ¿ãæ
£ããèšèªã䜿çšããŠããŠãŒãã£ãªãã£ãšã³ãžã³ã«èŠæ±ãè¡ãããšãã§ããŸãã äŸãšããŠããã©ã€ãCã®20åã®æã容éã®å€§ãããã¡ã€ã«ãåºåããç°¡åãªPowerShellã¹ã¯ãªããã瀺ããŸãã
$LogQuery = New-Object -ComObject "MSUtil.LogQuery" $InputFormat = New-Object -ComObject "MSUtil.LogQuery.FileSystemInputFormat" $InputFormat.Recurse = -1 $OutputFormat = New-Object -ComObject "MSUtil.LogQuery.CSVOutputFormat" $SQLQuery = "SELECT Top 20 Path, Size INTO '%temp%\output.csv' FROM 'C:\*.*' ORDER BY Size DESC" $LogQuery.ExecuteBatch($SQLQuery, $InputFormat, $OutputFormat) $CSV = Import-Csv $env:TEMP'\output.csv' $CSV | fl Remove-Item $env:TEMP'\output.csv' $LogQuery=$null $InputFormat=$null $OutputFormat=$null
SystemManager.ruããŒã¿ã«ã®è³æLog Parser COM API Overviewã§ã³ã³ããŒãã³ãã®æäœã«é¢ããããã¥ã¡ã³ããçè§£ã§ããŸãã
ãã®æ©èœã«ãããLog Parserã®ã°ã©ãã£ã«ã«ã·ã§ã«ã§ããäœæ¥ã容æã«ããããã®ããã€ãã®ãŠãŒãã£ãªãã£ã䜿çšã§ããŸãã ææã®ãã®ã¯èæ
®ããŸããããç¡æã®Log Parser Studioã玹ä»ããŸãã

ã€ã³ã¿ãŒãã§ã€ã¹ãã°ããŒãµãŒã¹ã¿ãžãªã
ããã§ã®äž»ãªæ©èœã¯ã©ã€ãã©ãªã§ããããã«ããããã©ã«ãã忣ãããããšãªãããã¹ãŠã®ãªã¯ãšã¹ãã1ãæã«ä¿æã§ããŸãã ãŸããã¯ãšãªãæŽçããã®ã«åœ¹ç«ã€æ¢è£œã®äŸããããããããŸãã
2çªç®ã®æ©èœã¯ããªã¯ãšã¹ããPowerShellã¹ã¯ãªããã«ãšã¯ã¹ããŒãããæ©èœã§ãã
äŸãšããŠãæãå€ãã®æçŽãéä¿¡ããã¡ãŒã«ããã¯ã¹ã®éžæãã©ã®ããã«æ©èœããããèŠãŠã¿ãŸãããã

æãã¢ã¯ãã£ããªã¡ãŒã«ããã¯ã¹ã®éžæã
ãã®å Žåãããå€ãã®çš®é¡ã®éèªãéžæã§ããŸãã ããšãã°ããçŽç²ãªããã°ããŒãµãŒã§ã¯ãå
¥åããŒã¿ã®ã¿ã€ãã«å¶éããããExchangeã«ã¯å¥ã®ã¿ã€ãã¯ãããŸããããã£ãŒã«ãã®èª¬æãå
¥åããããããŒãèªåã§ã¹ãããããå¿
èŠããããŸãã Log Parser Studioã§ã¯ãå¿
èŠãªåœ¢åŒãããã«äœ¿çšã§ããŸãã
Log Parserã«å ããŠãèšäºã PowerShellã§ã¯ãªãExcel ãã§èª¬æãããŠããMS Excelæ©èœã䜿çšããŠãã°ãæäœã§ããŸãã ãã ããLog Parserã䜿çšããŠãã©ã€ããªãããªã¢ã«ãæºåããExcelã®Power Queryã§åŠçããããšã«ãããæå€§éã®å©äŸ¿æ§ãå®çŸã§ããŸãã
ãã°ãã·ã£ãã«ã§åããããã®ããŒã«ã䜿çšããããšããããŸããïŒ ã³ã¡ã³ãã§å
±æããŸãã