Sistem adminlerinin vazgeçilmezi, yakinen bildiğiniz Logon Scriptler, sunucu ürün ailesinde kullanıcıların oturum açtıktan sonra bazı işlerin otomatik olarak yapılmasını sağlayan küçük yazılımsal komut satırlarıdır. Kullanıcı için sürücü bağlama, printer gibi aktif cihazların otomatik kullanılabilir hale getirilmesi, paylaşım alanlarının otomatik erişimlerinin sağlanması veya bunlara ekleme çıkartılma yapılması gibi işlemlerinin otomatik olarak yapılmasını sağlarlar. Daha ileri düzey işlevler için kullanımıda mümkündür.
Geçenlerde hizmet verdiğimiz bir şirkette bu kullanılan logon scriptleri üzerine bir çalışma yaptım. Hemen her yerde standart Batch sctipt kullanıyordum. Bazı yerlerde VBScrtip’te kullandığım da olmuştu. Yeni standart olarak logon script’leri powershell’de yazmayı düşündüm. Birçok işlemlerin otomatikleştirilmesi için kullandığımız scriptler neden yeni standart powershell olmasın diyerek böyle bir karar vermiştim. Ve kurum için gerekli script’leri powershell ile hazırladım, ardından kullanmaya başladık. Fakat sistem yöneticileri, powershell scriptlerin uygulandığı sistemlerde logon ve logoff işlemlerinde agresif performans sorunları yaşadıklarını ilettiler. Hatta bazı son kullanıcılar da şikayette bulumuşlar. Ilk başta aklıma scriptler gelmemişti, biraz incelediğimde poweshell ile hazırlanan scriptlerin buna sebep olduğunu gördüm.
Benimde aklıma script türerine göre bir karşılaştırma tablosu yapmak geldi. Hazır canlı test ortamınıda yakalamışken performans değerlerini çıkarıp sizlerle paylaşmak istedim. Testleri yaparken uberAgent kullandım.
Bu işlemleri yaptığım ortamı biraz anlatmam gerekirse, bir Windows 2012R2 AD yapısı mevcut. Sunucuda 4 ethernet kartı var. Iki Ethernet kartı team şeklinde. Sunucu 16GB RAM’a sahip tek işlemcili bir HP DL380 G8 sunucuydu. Kullanıcı bilgisayarlarının çoğunda Windows 10 Professional koşuyor. Ortamdaki değerleri ölçmek için belirttiğim üzere uberAgent kullandım. Testleri aşağıdaki script tiplerinde gerçekleştirdim. Script’ler desktop’a bir txt dosyası oluşturup logon olmuş kullanıcının adını yazıyor.
Bu işlemleri GPO üzerinden tesbit ettiğimiz test kullanıcılarına uyguladım. Işte script içerikleri,
Powershell
$env:username > “$env:userprofile\desktop\whoami.txt”
VBScript
Set wshShell = CreateObject( “WScript.Shell” )
username = wshShell.ExpandEnvironmentStrings(“%username%”)
outFileName = wshShell.ExpandEnvironmentStrings(“%USERPROFILE%\desktop”) & “\whoami.txt”
Set outFile = CreateObject(“Scripting.FileSystemObject”).OpenTextFile(outFileName,2,true)
outFile.WriteLine(username)
outFile.Close
Batch Script
echo %username% > %USERPROFILE%\desktop\whoami.txt
Öncelikle script’in başladığı ve bittiği zaman kapsamına göre değerlendimesini yapalım. Bu işlem system açıldıktan sonra servislerin başlaması ve script’in çalışmasına kadar olan sürenin dahil edilmemesi gereken bölüm. Yani Script’e gelene kadar yapılması gereken herşeyin yapılmış olması lazım. Zaman ölçüsüde bu aşamada devreye giriyor. Yani Script’in tam başladığı ve operasyonu tam bitirdiği zaman aralığ ölçülmeli. Ve sonuçta türe göre aşağıdaki zaman aralıkları ortaya çıktı.
Peki sonraki ölçü birimi?, tabiki script’in CPU’ya bindirdiği yük ölçülmeli. Script türüne göre CPU yükü aşağıdaki gibi çıktı.
En son RAM durumunu ölçtük. Çalışma zamanı CPU ve RAM performans anlamında major değerler olduğundan bu şekilde ölçtük. RAM anlamında da diğerleri gibi hatrı sayılır değer farklılıkları çıktı.
Sonuç olarak,
Neden olmasın dediğim PowerShell açılış değerlerini altüst etti. Düşünsenize normal zamanlarda windows açıldıktan sonra eğer ilk defa powershell’I çalıştırıyorsanız tüm library’leri load ederken bile yüksek değerler elde eden powershell açılış değerlerini adeta komaya soktu. Eğer spesifik değerlerle bir güçlü bir açılış script’i uygularsanız büyük ihtimalle sistemin beyin ölümü gerçekleşecektir. Şimdilik en güzeli herzamanki gibi batch scrtip. Aynen klasik batch scriptle devam…