SCOM SDK – PowerShell – Creating monitor


icon_sdkOne of my customers wanted to monitor a 3rd party solution by monitoring events and asked if it`s possible with SCOM. As you probably know it`s one of the easiest tasks in SCOM to create monitors to monitor events on event viewer for specific or bunch of servers.

I was told to send them instructions to create a monitor based on Windows events. I started to get screenshots from create management pack and create monitor wizards, and then creating a group for the servers need to be monitored and finally overriding my monitor to enable monitoring for this specific computer group. At the end I realized it was about 30 page screenshots. Instead of sending these screenshots I though it would be much easier and sexy to send them a single PowerShell script to create a monitor. I thought SCOM Shell would have these cmdlets.

I was wrong.

Unfortunately, SCOM Shell doesn`t have any supported shell to create a unit monitor for Windows events. Then I decided to check SCOM SDK.

That was the first time for me to deal with SDK with PowerShell. SDK is much more powerful than PowerShell but you need to figure out how to deal with objects and methods.

There is an example to create a unit monitor by using SCOM SDK but as you may realize it`s written in C#. That was a good starting point for me.

So I started my journey, spent couple of hours to create my PowerShell script that uses SCOM SDK binaries. You can find the script below.

Please note that this is really an ugly script, no error handling, structure or sexy functions. This is just a sample to deal with SDK. If you are interested in to learn how to deal with SDK using PowerShell, it`s a good chance to open my script and C# example and see the integration between them.

Also SCOM MVP Tao Yang has done great job with Automating OpsMgr series on his blog .

He also shared with me an article yet to be written regarding monitor creation using SDK. It`s much more better than my ugly script 🙂 So if you need more details, follow Tao`s automation series.

My ugly script:!57641&authkey=!AKbaImed7116Ig8&ithint=file%2cps1


Azure uzerinde IP adresi rezervasyonu

Azure uzerinde hizmet verebilmek icin kaynaklarinizin bir IP adresine ihtiyaci bulunur. VNet uzerinde tanimlayacaginiz bu IP adresleri dinamik yada statik olarak yapilandirilabilir.

Varsayilanda bir VNet icerisindeki sanal makine otomatik olarak havuzdan bi IP alir. Dagitilacak bu IP havuzunu daha onceden sizin belirlemeniz gerekiyor. Ancak bazi senaryolarda belirli sunucular icin statik IP yapilandirmasini gerceklestirmeniz gerekmektedir. Ornegin Azure uzerindeki sanal makinenizi bir Domain Controller sunucusu olarak yapilandirmayi dusunuyorsaniz bu sunucunun en azindan bir adet statik IP’ye ihtiyaci vardir.

Asagidaki PowerShell komutu sayesinde bir VM olusturma asamasi sirasinda rahatlikla statik bir IP belirleyebilirsiniz.


New-AzureService -ServiceName ServiceAnil -Location "Central US"
$MyImage = Get-AzureVMImage|?{$_.ImageName -like "*Windows-2012R2-x64*"}
New-AzureVMConfig -Name AnilVM -InstanceSize Large -ImageName $MyImage.ImageName `
| Add-AzureProvisioningConfig -Windows -AdminUsername anilerduran -Password Password1 `
| Set-AzureSubnet –SubnetNames Subnet-1 `
| Set-AzureStaticVNetIP -IPAddress `
| New-AzureVM -ServiceName "ServiceAnil" –VNetName VNetAnil

The Power of Automation


IT automation has always been one of the most important goal of IT managers to make their organization run efficiently. Automation simply ensures that all resources will be allocated according to business needs dynamically.

Hu wrote a post on HDS community where he talked about typical break down of IT budgets.



I also found another diagram on Gartner`s IT metrics report that shows us organizations are spending %66 of their time and budget to just “run the business”

Gartner IT Metric Report

These two diagrams simply show us that in order to grow and transform our business we should focus on innovation and reduce time/money spending on operating. That’s obviously not an easy task to achieve and can only be possible if your infrastructure is flexible and adaptable for these changes.

Couple of years ago, it was a straightforward task for IT administrators to manage/operate less data, servers, and applications. But now, every single minute hundreds of terabytes of data are flowing from “things” to our systems. Since IoT concept will be an enabler to different domains including logistic, transportation, automotive, healthcare and smart cities, in the near future every single “thing” will be sensor attached and connected to the internet/cloud. Analysts expect that 50 to 100 billion devices will be connected to the Internet by 2020.

IT administrators should handle not only this huge amount of data but also underlying components such as storage, network, servers, applications, hypervisors so on.

Unfortunately without having a true software-defined infrastructure approach, managing, maintaining or innovating could be impossible.

As my colleagues Paul Meehan and Paula Phipps mention, to design a software-defined infrastructure approach, we can use three A`s

Automation: 29% of IT time is spent on tedious tasks. 39% of IT outages are due to human error. Hitachi midrange VSP family eliminates tedious manual tasks, reduces errors and lets administrators focus on revenue-generating activities.

Access: Access more data and solve real-world problems

Abstraction: Provide more services faster with more flexibility to support a diverse set of applications.

Couple of years ago I was involved in a project. Customer was working for government and had very sensitive public IIS web sites. Development team was developing updates every two weeks and sending MSI update package to Operations team. This team was responsible to achieve following actions:

  • RDP to different DMZ servers. All servers were belong to different forests therefore they need to use different credential for each server.
  • Copy MSI package to servers, unzip it (No check if MSI damaged/working or not)
  • Call network team and ask them to disable pool member on Load Balancer
  • For each web site, stop IIS service, change webconfig file, install MSI (no check if its installed or not, no check on event viewer or log files)
  • Start IIS service
  • Call network team to revert back configuration
  • Connect another IIS web site….

Operation team was spending around one or two days to update all web servers in production.

But I think time was not the main problem. The main problem was human errors. According the researches, most of the storage, server or service outages are caused by human errors. For the above scenario, if operation guy changes wrong line in webconfig or network guy removes wrong pool member, production environment will have service outage.

However, as using a correct automation method, organizations can easily reduce these statistics and save more money/time.   Remember the first “A” – Automation.

Microsoft is investing in automating, enabling the use of different automation solutions such as PowerShell, System Center Orchestrator and Service Management Automation. These automation solutions can be used to automate not only Microsoft workloads but also cross-platform Linux workloads, Network and Storage solutions.

I believe PowerShell is one of the most important initiatives by Microsoft in recent years. It`s a scripting language with an easy syntax and developed for System administrators. Almost all of the new Microsoft products, on-premise or Azure based, have native Windows PowerShell support.

Orchestrator is the new version of Opalis, acquired by Microsoft in 2009. It`s a process automation solution and comes with System Center suite. If you are using Virtual Machine Manager or Operations Manager you already have an IT Process Automation solution as well. Simple dashboard, drag&drop workflow design. You can also use .NET Script activity to run PowerShell scripts in workflows.

And Service Management Automation built-on PowerShell workflows. It`s a web based process automation tool designed to work with Windows Azure Pack, local version of Microsoft Azure in your datacenter. It allows you to build SMA workflows to create, monitor, deploy and manage resources in your private cloud environment.

When it comes to Software-Defined Infrastructure and Automation, Hitachi offers a wide range of solutions.  The Hitachi midrange VSP family provides the foundation for software-defined infrastructures by making automation and abstraction easy with an integrated portfolio of infrastructure automation and virtualization software.

If you are using Hitachi`s converged solution, you already know that how it simplifies management of private cloud and data center environments. You can also combine Microsoft System Center / Windows Azure Pack suite with UCP and it enables an end-to-end Private Cloud platform with self-service / orchestration / automation capabilities.

This solution automates the management of servers, networking components and storage using UCP Director, System Center and Microsoft adaptors.

Hitachi integrates with Microsoft applications to create a unified automation/management solution for Microsoft environments.

These are the available adaptors provided by Hitachi:

  • Hitachi Infrastructure Adapter for Microsoft System Center Operations Manager
  • Hitachi Adapter for Microsoft System Center Virtual Machine Manager
  • Hitachi Storage Adapter for Microsoft System Center Orchestrator
  • Hitachi Storage Adapter for Microsoft® SQL Server Remote BLOB Storage
  • Hitachi Storage Adapter for Microsoft Windows PowerShell
  • Hitachi Storage Adapter for Microsoft Volume ShadowCopy Service

Especially adapters for PowerShell and Orchestrator enables you to automate and orchestrate processes using together Hitachi and Microsoft solutions.

Hitachi Storage Adapter for Microsoft Windows PowerShell allows Hitachi storage administrators to use PowerShell cmdlets on Hitachi storage systems. Using cmdlets, administrators can create scripts to automate complex tasks.

Hitachi Storage Adapter for Microsoft Windows PowerShell

Using Hitachi Storage Adapter for Microsoft System Center Orchestrator you can easily extend the capabilities of System Center Orchestrator.

Hitachi Storage Adapter for Microsoft System Center Orchestrator

This plug-in provides:

  • Storage management and Hitachi NAS (HNSA) support
  • Virtualized storage management
  • Hitachi Content Platform (HCP) management

Each activity uses built-in PowerShell processes to run on remote server and allows you to create workflows/Runbooks to automate complex tasks in your datacenter.

It`s really good to see how two different vendor come together and built a complete management and automation solution. One more time hats-off to Hitachi engineers. They created really valuable plugins and integrations with Microsoft/System Center suite. These adaptors combines the power of Hitachi performance, reliability and agility with the productivity of Microsoft solutions.

PowerShell script to configure FTP User Isolotion Mode Attributes

As you may already know, with FTP User Isolotion Mode you can strict your users to browse only administrator configured directories.

For instance you can modify required attributes of userA and then UserA will only be able to access/browse “USERA directory”. Even He/she has access on other directories.

But in order to configure FTP User Isolotion Mode with active directory you need to set two interesting attributes:

msIIS-FTPRoot = Root FTP Directory

msIIS-FTPDir  = User Directory

If these above attributes are configured for a user, once this user access to server, FTP automatically redirect this user to msIIS-FTPDir directory under ms-IIS-FTPRoot directory.

To configure these attributes you can just open user properties in ADUC and configure settings under attribute editor.


But if you are planning to set these attributes for bunch of users, It may slow down the processes to configure one by one.

Here is a simple PowerShell script


Convert String to DateTime

Have you ever wondered on how to convert string data type to datetime in PS?

In one of my PowerShell projects I need to compare couple of dates to get the exact difference. But some of date values are coming from different sources, for instance as a string.

Therefore i could not simply use “date2 – date1″ math operation.

It's pretty easy to convert a string to a datetime with Parseexact as follow:

$Date= [datetime]::ParseExact($StringDate,”dd.MM.yyyy HH:mm:ss”,$null)


PowerShell Öğreniyorum – Pipeline – Bölüm 9

Bu bölümde Pipeline kullanım örneklerine devam edilecektir.

Get-Item metodunun Get-ChildItem metodundan temel farkı, yalnızca dosya sistemi altında listeleme yapmak yerine registry ve benzeri dizinler altında da sorgulama gerçekleştirebilmesidir. Bu metod kullanılarak belirli bir dizin altındaki belirli uzantıya sahip dosyalar listelenebilir ve pipeline içerisinden geçirilerek istenilen Sütun değerleri üzerinde işlemler gerçekleştirilebilir. Aşağıdaki örnekte, bir dizin altındaki tüm .txt uzantılı dosyalar listelenmiş, bunların içerisinde yalnızca belirli bir boyutun üzerindekiler filtrelenmiş ve toplam değer anlamlı bir ifade ile çıktı olarak elde edilmiştir. Aşağıda bu scriptin oluşturulması için gereken adımlar listelenmiştir.

Yukarıdaki şekilde görüldüğü gibi “C:Text Dosyalarım” dizini altında .txt uzantısına sahip tüm dosyalar, çeşitli özellikleri ile birlikte çıktı olarak elde edilmiştir.

Pipeline kullanımı ile ilgili dizindeki .txt uzantılı dosyalar hafızaya alınmış ve belirlenen kriterler dahilinde filtrelenmeye başlanmıştır. Buradaki filtreleme yönetimi, tüm dosyaların Length sütunlarının okunması ve pipeline dışarısına yalnızca boyutu 40 Kb’dan büyük olan dosyaların çıkmasıdır.

Görüldüğü gibi 40 Kb’dan büyük toplam üç dosya Pipeline kullanımı ile listelenmiştir.

Bir sonraki PipeLine içerisinde , Measure-Object komut satırı , bir önceki pipeline içerisinden çıkan çıktıların Length özelliklerinin toplamının –sum parametresi ile hesaplanması için kullanılmaktadır.

Measure-Object metodu PowerShell içerisinde Count, Average, Sum, Minimum ve Maximum değerlerine göre bir nesne için istatiksel veriler oluşturmak amacıyla kullanılmaktadır. Yukarıdaki örnekte, son pipeline dâhilinde yalnızca 40 Kb’dan fazla boyutu olan nesneler için Length sütunundaki değerler toplama işlemine (SUM) dâhil edilmiştir.

Son çıktıda 40 Kb’dan fazla olan .txt uzantılı dosyaların toplam boyutu görülmektedir. ( 555662 Byte)    

İstenildiği takdirde PowerShell ile elde edilen çıktılar üzerinde, istenilen değişiklikler gerçekleştirilebilir. Örneğin üzerinde bazı matematiksel işlemler gerçekleştirilerek, konsolda daha anlamlı verilerin yer alması sağlanabilmektedir.

Çıktı üzerinde daha rahat çalışabilmek adına, son pipeline sonucunda elde edilen değer bir değişkene atanabilir.

Bu değişken içerisindeki 555662 Byte değerinin daha anlaşılır görüntülenmesini sağlamak PowerShell formatları sayesinde mümkündür.

Bilgisayarlar kendi aralarında haberleşmek istediklerinde, okunuşu kolay olan, görüntüsü daha anlaşılır olan formatları seçmek yerine standart kurallar çerçevesinde ilerlerler. Bu sebeple bir dosyanın boyutunu Byte cinsinden saklamak, makine dilinde oldukça kullanışlıdır. Ancak son kullanıcı gözünde değişik varyasyonlar kullanılarak bu değerler daha okunabilir, anlaşılabilir değerlere dönüştürülebilir. Örneğin 555,662 şeklinde, yalnızca virgül ile basamakların ayrıldığı bir yazım biçimi bile okuyucu tarafından daha hoş karşılanmaktadır.

PowerShell bu noktada Visual Basic’de olduğu gibi tümleşik gelen bir numara formatlama komut satırına yâda fonksiyonuna sahip değildir. Bunun yerine bir çok noktada paralel çalıştığı .NET Framework’ünü kullanmaktadır.Ufak bir örnek vererek açıklamak gerekirse;

Yukarıda $No değişkenine 10 haneli bir numara değeri atanmıştır.

Bir sonraki satırda;

Komutunu çalıştırdığınızda çıktı aşağıdaki hale gelecektir.

Burada “{0:N0}” ile gerçekleştirilen formatlama incelenecek olursa;

  • 0 değeri ile formatlanacak öğenin indeks numarası belirtilmektedir.
  • N değeri uygulanacak format değerini belirtmektedir. N’nin açılımı “Numeric” tir. Diğer format değerleri aşağıdaki tabloda görülebilir.

  • Son bölümde bulunan 0 değeri formatlanan numaraya sağ baştan eklenecek 0 değerlerini belirtmektedir.
  • F parametresi ise –format parametresinin kısaltılmış halidir.

Bu takdirde;

Formatı aşağıdaki gibi bir çıktı elde edilmesini sağlayacaktır.

Bu kısa bilgiden sonra artık yukarıda elde edilen Byte değeri üzerinde işlem yapılmaya başlanabilir.

Formatlama işleminde öncelikle formatlama tipi belirtilmelidir. Yukarıdaki örnek için “{0:N2}” kullanılabilir.

Önceki bölümlerde değinildiği gibi PowerShell ile matematiksel işlemler rahatlıkla gerçekleştirilebilir. Aynı zamanda PowerShell matematik işlemler sırasında KB, MB, GB gibi önceden tanımlı değerlere sahiptir. Bu takdirde elde edilen değer 1 Mb değerine bölündüğünde gerekli matematiksel işlem gerçekleştirilerek istenilen çıktı elde edilebilir.

Yukarıda görüldüğü gibi, komuta eklenen + ” MB” ile çıktıya metin mesajı da eklenerek, son çıktının “0,53 MB” gibi oldukça okunabilir bir değere çevrilmesi sağlanmıştır.

PowerShell Öğreniyorum – Pipeline – Bölüm 8

Yazı dizisinin bu bölümünde PowerShell içerisinde Pipeline kullanımı incelenecektir.

Aslında PowerShell içerisinde tanımlı olmayan ancak PowerShell içerisinde Pipeline kullanımının mantığını kavrayabilmek için aşağıdaki örneği inceleyelim.

Adım adım süreci izleyelim.

Get-Araba metodu ile fabrika dâhilinde bulunan tüm arabaların listesi çekilmiştir. Dikkat ederseniz sadece Get-Araba metodu ile herhangi bir kıstas belirlenememekte, elde edilen nesneler üzerinde değişiklik gerçekleştirilememektedir. Bu sebeple | simgesi ile pipeline kullanımı başlatılmıştır.

İlk pipeline ile birlikte istenilen kıstas belirlenmiştir. Get-Araba metodu ile elde edilen tüm araçların içerisinden yalnızca kırmızı renge sahip olanların pipeline dışarısına çıkması, geri kalanların elenmesi sağlanmıştır.

İstenilen her değişiklik için pipeline kullanmaya devam edilebilmektedir.

Bir sonraki pipeline içerisine sadece Kırmızı renge sahip olan araçların geldiği unutulmamalıdır. Kırmızı araçlardan oluşan bu nesne grubunda ise, yapılacak değişiklik ile son ürün bir kez daha düzenlenebilir. Sort-Object metodunu kullanarak, sınırlandırılmış bu nesne grubunun Kilometre değerlerine göre sıralanması sağlanmıştır.

Eğer gerçek hayatta bu şekilde bir script çalıştırılabilseydi, aşağıdakine benzer çıktılar elde edilirdi;

Görüldüğü gibi son pipeline sonucunda sadece kırmızı renge sahip olan ve kilometre değerlerine göre azdan çoğa sıralanmış bir liste elde edilmiştir.

Buna benzer şekilde, gerçek PowerShell metodları kullanılarak, başta elde edilen nesneler üzerinde modifikasyonlar gerçekleştirilerek istenilen çıktılar elde edilebilir. Bu bölümde var olan PowerShell Scriptleri ile pipeline kullanım örnekleri üzerinde durulacaktır.


Get-Service metodu ile yerel makine üzerinde çalışan tüm servislerin listesi alınabilir. Pipeline kullanımı ile tek bir script satırı kullanılarak, yalnızca çalışan servislerin listesinin alınıp, bu listenin içerisindeki nesnelerin isim sütunlarına göre alfabetik sıralanmasının sağlanması için aşağıdaki adımlar izlenmiştir.

  • Get-Service ile yerel makine üzerinde çalışan tüm servislerin listesi alınmış ancak shell, pipeline kullanımını fark ettiği için, oluşturulan nesneler çıktı olarak verilmek yerine hafızada tutulmuştur.
  • İlk pipeline kullanımı ile hafızada tutulan tüm bu servisler içerisinde yalnızca “Status” sütunu “Running” olanların seçilmesi ve oluşan yeni nesnelerin diğer pipeline içerisine aktarılması sağlanmıştır.
  • Çıktıdan önceki son pipeline kullanımı ile, yalnızca “Running” durumda olan servisler “Name” sütunları dikkate alınarak alfabetik olarak dizilmiştir. Bu noktadan sonra başka bir pipeline kullanımı olmadığı için PowerShell konsolu, son düzenlenmiş hali çıktı olarak vermektedir.


PowerShell ile Windows İşletim Sistemi altında yer alan işlemlerin listeleri alınabilir ve istenilen işlemler Kill komutu ile de sonlandırılabilir.

Kimi zaman arka tarafta açık olan Internet Explorer pencereleri, hafızada kapladıkları yer sebebiyle paralel ilerleyen operasyonları sıkıntıya düşürebilecek seviyeye gelebilir. Bu noktada Grafik Kullanıcı Arabirimi kullanılarak bu pencereler tek tek sonlandırılabilir. Ancak hazırlanan basit bir PowerShell komut satırı ile pipeline kullanımına dikkat edildiği takdirde, aynı işlem çok kısa zaman içerisinde gerçekleştirilebilir. Aşağıdaki örnekte adım adım benzer bir scriptin hazırlanması incelenmektedir.

Get-Process metodu kullanılarak lokal makine üzerindeki tüm işlemlerin listesi alınabilmektedir.

Scriptin devamında istenen, hafızaya alınan tüm işlemler içerisinde yalnızca Internet Explorer pencerelerini yöneten işlemlerin çekilmesidir.Bu noktada pipeline kullanımı sağlanarak ilk kriter belirlenir.

Görüldüğü gibi Get-Process ile hafızaya alınan ve pipeline içerisine gönderilen tüm işlemler içerisinden, “Name” sütunu “iexplore” olan işlemler ayıklanmıştır. Geriye kalan tüm diğer işlemler elenmiştir.

Son pipeline içerisinde bulunan nesneler, yalnızca internet explorer pencerelerinin yönetiminden sorumlu olan iexplore.exe'dir. Son olarak kıstas dâhilinde filtrelenen tüm bu işlemlerin sonlandırılması için kill metodu kullanılır.

Pipeline kullanımı ile birlikte yukarıdaki script çalıştırıldığında PowerShell, varolan tüm Internet Explorer pencerelerini herhangi bir uyarı çıktısı vermeden sonlandıracaktır.

essay editing services