Skip to content

Powershell ile Office Excel kullanımı

Powershell ile Office Excel kullanımı

Daha önceki yazılarımızda Powershell ile Office Word kullanıma giriş yapmıştık. Bu yazımızda ise, Office Excel içerisine Powershell ile yapmış olduğumuz sorguların sonuçlarını Excel içerisine yazdırmayı ve ileri süreçlerde ilgili alanlara göre düzenleme işlemlerinden bahsediyor olacağım.

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.

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.

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.

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

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(,” şeklindedir.

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.

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.

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.

Dilerseniz yazmış olduğumuz Powershell Script tamına bu linkten erişebilirsiniz.