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.
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.
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.
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
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.
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ı 10GBtan 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.
Resim-6
Get-WmiObject ile clas belirtip sorgulamayı gerçekleştirdik. Get-Wmiobjectin 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.
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.
Resim-8
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.
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.
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.
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
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.
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ı 10GBtan 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.
Resim-6
Get-WmiObject ile clas belirtip sorgulamayı gerçekleştirdik. Get-Wmiobjectin 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.
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.
Resim-8