Powershell Çıktıları Office Excel’e Nasıl Alınır?

'Black Warrior

Yaşayan Forum Efsanesi
8 Ocak 2013
12,132
5
E5
Akıllara gelen ilk soru Export-CSV ya da Convertto-CSV komutları Office Excel aktarmak için yeterli değil mi? Sorumuzun cevabı: “Evet” fakat biz bu yazımızda Office Excel içerisine Powershell ile yaptığımız herhangi bir sorgu yazdırmakla kalmayıp ilgili alanlara göre düzenlemeler yapabiliriz. Örneğin, Powershell ile WMI sorgusu yaptınız, bu sorguda ortamdaki makinalarımızın disk bilgileri hakkında olduğunu varsayalım. Disk boyutları belirtmiş olduğunuz boyutların altında ise Excel içerisindeki ilgili alanın renginin değişmesini isteyebilirsiniz. Fakat bunu yukarıda belirtmiş olduğumuz komutlar ile yapmanız mümkün değildir.
Office Word yazımızda bahsetmiş olduğumuz gibi COM Objesi oluşturup onunla beraber çalışmamız gerekmektedir.
Herhangi bir COM Objesi yaratmak için Powershell içerisinde kullanacağımız Cmdlet “New-Object”‘ Office Excel uygulamasını çağırmak için ise “New-Object” cmdlet içerisinde –ComObject parametresine Excel.Application göndermektir. Aşağıdaki örnekte bu işlemi bir değişkene atayarak yapıyorum.
040615_0553_Powershellk1.png

Resim-1
Excel uygulamasının tüm özellikleri artık Excel değişkenine atanmış durumdadır.COM Objesini oluşturduktan sonra process olarak arka tarafta başlatıldı fakat Visible değeri “$False” olduğu için uygulamayı görememekteyim. Bu değeri “$True” çekerek uygulamayı görebiliriz.
040615_0553_Powershellk2.png

Resim-2
Excel uygulamamızı artık ekrana getirmeyi başardık. Şimdi ise Excel içerisine çalışma sayfaları eklemeye geldi. Bu işlemi yapabilmek için “Workbooks.Add()”çağırarak gerçekleştireceğiz. Powershell içerisinden çağırdım Excel içerisine çalışma sayfası eklenmiş olacak. Bu yöntemi kullanırken “Workbooks” adında bir değişkene atamasını yapıp, ilerleyen kısımlarda ilgili çalışma sayfasını seçim işlemlerinde kullanacağım.
040615_0553_Powershellk3.png

Resim-3
Excel içerisine çalışma sayfası eklendikten sonra, isteğinize bağlı olarak yeni çalışma sayfaları ekleyebilirsiniz. Powershell içerisinde oluşturduğumuz “Workbooks” değişkenin “Sheets.Add()” methodunu kullanarak yeni çalışma sayfaları ekleyebilirsiniz.
$Workbooks.sheets.add()
Excel içerisinde Sheet oluşturduktan sonra, içerisine Powershell içerisinden yaptığımız sorguları yazdırmak için hazırlık aşamasına geçelim. İlk önce yapmamız gereken, ilgili verileri yazmak istediğimiz Sheet seçmemiz gerekiyor. Sheet seçimi için, Workbooks değişkenin özelliklerinde olan “WorkSheets.Item(‘pagenumber’)” methodunu kullanıp daha sonra bunu “Sheet1″ adında bir değişkene atamasını gerçekleştirelim. Seçilen sayfanın tüm içeriğini artık “Sheet1″ değişkeni üzerinden yönetiyor olacağız. Hemen bu özelliklerini iyice anlamamız için, “Sheet1″ değişkenin Name özelliğini kullanarak Excel içerisindeki seçmiş olduğumuz çalışma sayfasının adını değiştirelim
040615_0553_Powershellk4.png

Resim-4
Görüldüğü gibi, ilgili çalışma sayfasını seçip ismini Powershell kodu içerisinde belirttiğim gibi değiştiğini görmekteyim. Powershell içerisinden WMI sorgulama yaparak ortamdaki tüm bilgisayarlarımızın kullandıkları disklerindeki sürücü harfi, disk boyutu, kalan boyut, makine adı gibi kısımları getireceğim. Bu sorgunun cevabını yazdırmadan önce “Disk Report Page” adlı Sheet içerisine oluşacak raporun başlıklarını ekleyeceğim. Bu Sheet üzerinde işlemler yapacağım için “Sheet” değişkenimi kullanarak devam edeceğiz. Sheet değişkenin içerisindeki “Cells” özelliği içerisindeki “Item()” methodu ile Excel içerisindeki ilk satıra rapor başlıklarını ekleyeceğim. Bu methodun kullanım şekli “Cells.Item(<satırnumarası>,<sutunnumarası>” şeklindedir.
040615_0553_Powershellk5.png

Resim-5
Rapor için istemiş olduğumuz başlıkları oluşturduk. Dikkat ettiyseniz, kod içerisinde “Cells.Item()” methodunu kullanırken satır ve sütün bilgilerini gönderdik. Şimdi ilgili başlıklar altına istemiş olduğumuz verileri yazmaya geldik. Bu işleme başlamadan önce, Excel içerisinde verilerimizi yazdırırken ikinci satırdan başlamamız gerekiyor ve yazdırılan her veriden sonra, diğer satırlara devam etmesini sağlamamız gerekmektedir. Bunun için Powershell içerisinde döngü yapmamız gerekmektedir. Her yazdığımız veri aynı satır ve sütün içerisine yazmamızı için döngü içerisinde satırları ve sütünları saydırmamız için değişken oluşturup counter olarak kullanmalıyız. Satır ve Sütün için kullandığımız counter değişkenlerini “Cells.Items” içerisine göndermemiz gerekiyor. Öncelikle disk sorgusu yapmak için, Get-WmiObject cmdlet ile “win32_logicaldisk” WMI class kullanıp, daha sonra tüm sorguları “Foreach-Object” ile döngüye içerisine sokup counter değişkenlerini kullanıp Excel içerisindeki ilgili satırlara eklemesini gerçekleştireceğiz. Bununla beraber “if-else” ifadesini kullanarak eğer sorgulama yaptığımız disklerimizin kalan boyutları 10GB’tan küçük ve eşit ise ilgili hücrenin kırmızı ile boyanmasını gerçekleştireceğim. Bu renk değişimi için “Cells.Items” özelliği olan “Interior.ColorIndex” kullanarak gerçekleştireceğiz. “Interior.ColorIndex” özelliğinin alabileceği değerler ilgili sayfada bulunmaktadır.
040615_0553_Powershellk6.png

Resim-6
Get-WmiObject ile clas belirtip sorgulamayı gerçekleştirdik. Get-Wmiobject’in parametlerinden olan “-ComputerName” ile tüm şirketteki bilgisayarlarınızı sorgular yapıp Excel içerisine yazdırabilirsiniz. Kod içerisinde comment-block oluşturarak detayları yazdım. “Interior.ColorIndex” için ise 3 değerini atamış bulunmaktayım. Yukarıda belirtmiş olduğum link içerisinde, 3 belirtirseniz ilgili alan kırmızı renk boyanıyor olacaktır.
040615_0553_Powershellk7.png

Resim-7
Powershell içerisinden sorgulamalar yaparak Excel içerisine yazdırdık, belirtmiş olduğumuz kritelere göre renklendirmek yaptık. Bu işlemleri gerçekleştirip Excel dosyamızı kaydetmemek olmaz sanırım. Sırasıyla kaydetmek işlemi için yapmamız gereken, kullanmış olduğumuz “Workbooks” değişkeni içerisinden “SaveAs()” methodu içerisine kaydedilecek yolu göndererek bu işlemi gerçekleştirebiliriz. Kaydetme işlemi tamamlandıktan sonra, ComObjesi yaratırken kullanmış olduğumuz “Excel” değişkenin ise “Quit()” methodu ile Excel kapatabilirsiniz.
040615_0553_Powershellk8.png

Resim-8
040615_0553_Powershellk9.png
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.