Ana içeriğe atla

Powershell ve Windows Serisi

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
}
}

PrintDabaseErrorLogs


Yorumlar

Bu blogdaki popüler yayınlar

ASP.NET Core ile Visual Studio Code Ortamında Web API Geliştirmek

Merhaba Arkadaşlar, Önceki yazılarımızda MVC ile Web Programlama üzerine çalışmalar yapmıştık. Bu yazımda herkesin aklında bir fikir ve önbilgi oluşturmak adına MVC yapısından farklı olarak Web API konusuna giriş yapacağız. MVC yazılarına bu hafta devam etmedik çünkü MVC'ye devam ettikçe bazı kavramlar ve işlemler API ile daha kolay çözülebileceğini fark edeceksiniz. Bunu fark etmeniz için araya hem bir Web API yazısı koymuş olduk hem de .NET Core 2.0 ve Visual Studio Code ortamlarını tanımış olduk. Herşeyi ezbere bilmek zorunda değiliz ama en azından bazı kavramlar aklımızda yer etmeli bir önbilgimiz olmalı. Uzmanlığımız dışında bile olsa farklı konularda az da olsa bilgimiz olmalı ve gerektiğinde kendimizi farklı bir alanda diğer kişilerden daha hızlı uzmanlık kazanacak konuma getirmeliyiz :) Benim yorumlarım bu şekilde. Konumuza başlayacak olursak .NET Core nedir kısaca özetlemek gerekecek. Microsoft’un öncelikle IIS üzerinde PHP dosyalarının çalıştırılabilmesi daha ...

Powershell ile Web Tarayıcı Cookie Temizliği

Web tarayıcıların ürettiği cookie ve minik boyuttaki veriler uzun bi süre temizlenmediği durumda yüksek boyutlara ulaşabilir ve bilgisayarımızın performansını kötü etkileyebilir. Bu tarz cookie temizliği ve yönetimi işlemlerinin periyodik olarak yapılması bilgisayarımızın performansı arttıracak ve disk alanı üzerinde bize bir miktarda olsa yer kazandıracaktır. Bu tarz işlemleri yapan programlar internette mevcut ancak bazılarının güvenilirliği tartışılır ve cookie temizliği işlemini periyodik olarak yapmıyor. Powershell ile arkaplan işlerini ve browser yönetimi özelliklerini kullanarak cookie yönetimini ve temizliğini periyodik olarak gerçekleştirmek mümkün. Bu sayede hem güvenlik konusunda hem de işlevsellik konusunda kullanıcı dostu bir modül yapmak mümkündür. Aşağıdaki powershell komutları browser üzerindeki cookie temizliği işlemini yapmaktadır. Not: Cookie Temizleme işlemini yapan fonksiyon aşağıdaki github projesinden alıntıdır. Bu scriptin üzerine birkaç ekl...

SQL Server Sorgu İyileştirme Çalışması

Performans Ölçüm Kriterleri Bu makale ile SQL Server üzerinde çalışan query'lerin optimize edilmesi için gerekli olan ilk aşama maddeleri ve çözümleri işlenmektedir. Veritabanı üzerinde koşan sorguların optimize edilmesi bu maddeler ile sınırlı olmayıp ayrı bir başlık altında incelenmektedir. Bu makale  konu hakkında sağlam bir temel ve ön fikir edinmek isteyenler için güzel bir kaynak olacaktır. SQL Server üzerinde çalışmakta olan bir sorgunun performans iyileştirme işlemleri için ilk etapta dikkat ve kontrol edilmesi gereken bazı maddeler vardır.  Performans Analizi Kontrol Maddeleri 1.       İlgili T-SQL çalıştırılmadan önce Time ve IO İstatistikleri ON Mode'a alınmalıdır. Bu istatistiklerin açılması ile çalışan T-SQL'in çalışma süresinin detayı(CPU ve Other Time) ve sorguda çalışan tablolar üzerindeki IO istatistiklerinin detayı tespit edilebilir duruma gelmektedir. SET STATISTICS TIME ON SET STATISTICS IO ON SELECT c....