Windows Yönetimi ve
Powershell (1)
Powersehell ile
Windows sunucular üzerinde yönetimsel işlemleri yapmak zamandan ve harcanan
efordan kazanmamızı sağlamaktadır. Daha sonraki yazılarımda Powershell hakkında
tanımlayıcı ve genel hatlarıyla işlevlerini anlatacağım.
Bu makalemde
powershell ile uzak sunuculardan belirlenen kriterlere göre Windows Event
Logları(Olay Günlükleri) toplayıp kullanıcıya .txt uzantılı bir rapor sunan
modül anlatılacaktır.
Log Collector
Powershell Modülünü açıklamadan önce, yine bilmemiz gereken birkaç terim
açıklayacağım.(Yapılan işlemi görmeden önce bir önbilgiye sahip olmak, kişiye
konu hakkında bir bakış açışı kazandırmakla kalmaz yapılan işleme daha tepeden
bakma yetiside kazandırır... )
Session:
|
Powershell ile
uzaktaki bir sunucuya gönderilen pencere. Session aslında sunucu üzerinde
işlemler yapabilmemiz için tanımlanmış bir .NET Framework objesidir.
|
Computer:
|
Powershell'in
sunucu hostname'i için kullandığı nesnedir. Computername ifadesi bizim için
hostname'i ifade etmektedir.
|
Log Collector
Modülünü kısım kısım inceleyerek final adımı olarak tüm kısımları birleştirip
anlamlı bir ürün haline getirmemiz gerekmektedir.
İlk olarak bizim
için olay günlüklerini(Windows Event Log) işletim sisteminden toplayan bir
fonksiyon yazılmalıdır.
Function
GetDatabaseLogError()
{
Get-EventLog
-LogName "application" -Newest 20 | Where-Object {$_.source -like
"*SQL*"} | Where-Object {$_.EntryType -eq "Error"}
}
GetDatabaseErrorLog
fonksiyonunda
Application isminde ve SQL kaynaklı son 20 event log'u elde
edilmektedir.
İkinci olarak bunu
belirlediğimiz uzak sunucular üzerinde çalıştıran bir function oluşturmalıyız.
PrintDatabaseErrorLogs fonksyionunda bazı kısımları satır satır açıklamak daha
anlamlı ve faydalı olacaktır.
$Computers=
Get-Content $ComputerList
|
$ComputerList
parametresi bizim sunucu listemizin bulunduğu .txt dosyasının adresi ve işlem
yapılacak sunucular burada belirlenmektedir.
|
$Session =
New-PSSession -ComputerName $computer
|
Listedeki tüm
sunucular için yeni bir session açılır. Bu açılan session ile işlemler
yapılacaktır çünkü.
|
$Logs >>
$ReportPath
|
$ReportPath
parametresi kullanıcı tarafından talep edilen raporun adresi ve isim
bilgisini içerir ve ">>" ile Append işlemi yapılır dosyaya.
|
Function
PrintDabaseErrorLogs()
{
$Computers=
Get-Content $ComputerList
foreach($computer
in $Computers)
{
$Session =
New-PSSession -ComputerName $computer
$Logs = Invoke-Command -Session $Session -ScriptBlock
${function:GetDatabaseLogError}
$Logs >>
$ReportPath
}
}
Event Log Collector
Modülünün Tam Hali:
param (
[Parameter(Mandatory=$true)]
[string] $ComputerPath,
[Parameter(Mandatory=$true)]
[string] $ReportPath
)
Function GetLogs()
{
Get-EventLog
-LogName "application" -Newest 20 | Where-Object {$_.source -like
"*SQL*"} | Where-Object {$_.EntryType -eq "Error"}
}
Function
PrintLogs()
{
$Computers=
Get-Content $ComputerPath
foreach($computer
in $Computers)
{
$Session =
New-PSSession -ComputerName $computer
$Logs = Invoke-Command -Session $Session -ScriptBlock
${function:GetLogs}
$Logs >>
$ReportPath
}
}
Yorumlar
Yorum Gönder