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.

image

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

(more…)

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)

zp8497586rq

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.

1.Örnek

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.

2.Örnek

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

765qwerty765

PowerShell Öğreniyorum – Döngüler – Bölüm 7

Bu bölümde PowerShell içerisindeki foreach döngüsü ile envanter raporu, Do-While döngüsü ile de Sayı Tahmin Oyunu hazırlanacaktır.

ENVANTER ÖRNEK SCRIPT

Sistem yöneticileri için tanımlanan en önemli ve zaman ayırılması gereken operasyonel işlerin başında envanter yönetimi gelmektedir. Hali hazırda organizasyonda kullanılan bir envanter yönetimi çözümü bulunmuyor ise, PowerShell ile WMI veritabanı kullanılarak bilgisayarların donanım ve yazılım bilgileri elde edilebilir.

Aşağıdaki örnekte Get-WmiObject ve foreach döngüsü kullanılarak temel düzeyde donanım bilgisinin nasıl alındığı gösterilmiştir.


  • Read-Host komutu kullanılarak kullanıcının $Isim değişkenine değer ataması sağlanır.
  • $donanimlar değişkeni tanımlanarak Win32_ComputerSystem WMI class bilgisinin ilgili bilgisayar için çekilmesi sağlanır.
  • Foreach döngüsü kullanılarak önceden tanımlanan bu veri koleksiyonunda döngü başlatılır ve çıktı olarak sunulması sağlanır.

Bilgisayar ismi girildikten sonra çıktı aşağıdaki gibi olacaktır;


SAYI TAHMİN OYUNU ÖRNEK SCRIPT

PowerShell konsolu içerisinde Get-Random komutu çalıştırıldığı takdirde konsol size 1 ile 2,147,483,647 arasında bir değeri rastgele üretecektir.


Aynı zamanda rastgele üretilecek rakam aralığında minimum ve maksimum değerler belirtilebilir.


Rakam dışında string değerlerde kullanılabilir;


String ya da integer rastgele değer seçme işlemi aynı zamanda bir metin dosyası okutularak da gerçekleştirilebilir.



Yukarıdaki komut satırı her çalıştırıldığında ilgili text dosyası içerisinden rastgele gün seçimini gerçekleştirecektir.

Get-Random komutu ve Do-While döngüsü kullanılarak aşağıdaki basit rakam oyunu PowerShell ile hazırlanabilir.


Hazırlanan bu sayı oyunu ile her döngüde PowerShell 'den 1 ile 20 arasında bir sayı üretmesi ve bunu hafızada tutması istenmiştir. Ardından kullanıcıdan bu sayıyı tahmin etmesi ve ekrana durum bilgisi iletilmesi sağlanmıştır.

PowerShell Öğreniyorum – Döngüler – Bölüm 6

“font-family:Segoe UI; font-size:10pt”>PowerShell Öğreniyorum serisinin bu bölümünde PowerShell içerisinde döngü kullanımı incelenecektir.

Döngü (Loop) kullanımı diğer programa dillerinde olduğu gibi PowerShell içerisinde de belirlenmiş bir kod bloğunun belli bir sayıda ya da şarta bağlı olarak tekrar eder şekilde çalıştırılmasıdır. Bu temel programlama işlemi sayesinde yüklü verilerin komut içerisinde tekrar edilerek işlenmesi sağlanabilir.

Bu bölümde PowerShell içerisinde kullanabileceğiniz 2 farklı döngü tipi incelenecektir. For, ForEach.

For Döngüsü:

For döngüsü kullanımındaki temel amaç herhangi bir kod bloğunun belirlenen kez çalıştırılabilmesidir.

Kullanım Biçimi:

For (baslangic; kıstas; tekrar)

{kod bloğu}

Görüldüğü gibi ilk parantez içerisinde 3 farklı opsiyonel parametre tanımlaması yaptıktan sonra köşeli parantez ile ilgili kod bloğu çalıştırılabilir. Bu opsiyonel parametreler;

Baslangic: Virgül ile ayrılmış komutlar zinciridir ve döngü başlangıcından önce çalışırlar. Daha çok döngü öncesinde değişken atamaları için kullanılır.

Kriter: Her döngü çalışmasında PowerShell tarafından çalıştırılan kıstastır ve konsola True / False Boolean değerlerini döndürür. Eğer kıstas True değerini döndürürse ilgili kod bloğu çalıştırılacaktır.

Repeat: Virgül ile ayrılmış komutlar zinciridir ve her döngüde çalışırlar.

 

Çok sık kullanılan bir örnek ile başlayalım;



 

 

For döngüsündeki ilk parantezde, tüm parametreler (;) ile ayrılıyor.

  • İlk parametre ile $i değişkenine başlangıç değeri atanıyor.
  • İkinci parametre ile değişkenin döngü sonucunda ulaşacağı değer belirtiliyor. Bu değere ulaşıldığında False değeri döndürülerek döngü durduruluyor.
  • Son parametrede ise değişkenin artış değeri belirtiliyor.

Benzer diğer bir örnek;


Yukarıdaki For döngüsünde aynı şekilde $i değişkeni 5 değeri ile 10 değeri arasında döngüye sokulmuştur. Kod bloğunda ise $ekle isimli bir değişken oluşturularak $i'nin string değerinin ip adresinin son oktetine eklenmesi sağlanmıştır.

For döngüsünden bağımsız olarak ping komutu döngü ile her seferinde yeniden şekillenen $ekle değişkenini kullanarak konsola yansıtılmıştır.

Bu döngü sonucunda sırası ile döngüdeki aralıkta bulunan ip adresleri birer kez pinglenecektir.


Yukarıdaki for döngüsünde ise;

  • $input değişkeni boş string olarak atanmıştır.
  • Kriter kısmında $input değişkeni geçerli bir mail adresi içerip içermediğine dair kontrole sunulur. Kullanıcıdan alınan veride @ işareti olması sonrasında da (.) işareti olması istenir. (Örneğin anlaşılır olması için bu geçerlilik kontrolü temel seviyede tutulmuştur)
  • Read-Host komutu ile kullanıcının $input değişkeninin içeriğini doldurması istenir.
  • ! işareti ile sonuç ters çevrilir, True değeri döndürülürse mail adresinin geçersiz olduğu bilgisi konsola iletilir ve Write-Host ile hata metni yansıtılır.

Yukarıdaki döngü “geçerli bir mail adresi” girilene kadar devam edecektir.

For, PowerShell içerisinde bulunan en temel döngü biçimidir. Diğer döngü tipleri ile gerçekleştirilebilen karmaşık senaryolar sebebi ile sıklıkla başvurulmamaktadır.

For-Each Döngüsü:

For-Each döngüsü ile bir dizi içerisinde bulunan tüm öğeler üzerinde komutlar koşturulabilir. Bir önceki bölümde incelendiği gibi For döngüsü ile sınırlarını kendimizin belirlediği bir döngü oluşturup, özel oluşturulmuş bu sınırlar içerisinde döngünün ilerlemesini sağlıyorduk.

For-Each ile hali hazırda sahip olduğumuz bir sınıf ya da dizinin içerisindeki öğe ve alt öğelere müdahale edebilme imkanı bulunmaktadır.

Kullanım Biçimi:

Foreach ($ in $)

{kod bloğu}

Kullanım biçiminde de görüldüğü gibi bir koleksiyon içerisinde bulunan tüm öğelerde ilgili kod bloğunu çalıştırabilme imkânına sahip olunmaktadır.

For döngüsünde kullanılan ilk sayı örneği For-Each için uygulanmak istenirse;


Şeklinde bir döngü kullanılabilir. Bu döngüde 1'den 5' e kadar olan rakamları konsolda çıktı olarak verecektir. Foreach döngüsünü tanımlarken kullandığımız ifadeler üzerinden yukarıdaki örneği açıklamak istersek; var olan bir dizi içerisindeki tüm öğeleri tek tek okuyarak ekrana yansıtmaktadır.

Bu noktada yalnızca integer değerler kullanma zorunluluğu yoktur;



Görüldüğü gibi string değerler de koleksiyon içerisinde öğe olarak kullanılabilir.

Klasik For-Each döngüsünün yanında Pipe kullanımı ile de döngüler elde edilebilir. Sıklıkla kullanılan bu yöntem ile altyapı sistemleri üzerindeki operasyonel aksiyonlar rahatlıkla alınabilir.


Yukarıda iki farklı foreach döngü kullanımı örneklendirilmiştir.

İlk örnekte;

  • Pipeline kullanımı ile öncelikle tamamı alınan process listesinden, ismi iexplore olanlar ayıklanmıştır.
  • Son pipeline ile birlikte ayıklanan bu değerlerin oluşturduğu küme üzerinde foreach döngüsü kullanılmış ve her bir öğe için ekrana Name ve Cpu sütunlarının yansıtılması sağlanmıştır.
  • $_. Konsoldaki sütun isimlerini belirtmek için kullanılan özel karakterdir.

İkinci örnekte;

  • Get-process çıktısı içerisindeki tüm öğeler kümesi tanımlanmış ve her bir öğe $oge değişkenine atanmıştır.
  • If statement'ı kullanılarak ismi iexplore olanlar çekilmiş ve bu grup içerisindeki tüm öğelerin Name ve Cpu bilgilerinin ekrana yansıtılması sağlanmıştır.

Bu noktada dikkat edilmesi gereken nokta, ilk örnekte pipeline ile birlikte kullanılan foreach'in Foreach-Object komutunun kısaltması olduğudur.

ForEach-Object kullanıldığında her bir sonuç, komut işleyişi sırasında gerçek zamanlı döndürülür.

Foreach döngüsü ise tamamıyla kullanılabilir bir oge koleksiyonuna sahip olunmasını gerektirir.

PowerShell Öğreniyorum – Fonksiyonlar – Bölüm 5

Bu bölümde Fonksiyon yönetim özellikleri ile birlikte COM objelerinin kullanılması da incelenecektir.

Fonksiyon içerisinde statementlar kullanılabileceği gibi aynı zamanda COM objeleri de oluşturulabilir. Aşağıda oluşturulan fonksiyon ile Internet Explorer COM objesi oluşturulmuş ve fonksiyon içerisinde kullanılmıştır.

Fonksiyon içerisinde statementlar kullanılabileceği gibi aynı zamanda COM objeleri de oluşturulabilir. Aşağıda oluşturulan fonksiyon ile Internet Explorer COM objesi oluşturulmuş ve fonksiyon içerisinde kullanılmıştır.


WikiArama fonksiyonu içerisinde kullanıcıdan yalnızca search değişkeni istenmiştir. Kullanıcı bu değişkeni parametre kullanımı ile ya da direk fonksiyon isminin yanına ilgili değeri girerek doldurabilir.

Fonksiyon içerisindeki kod döngüsü ise bir adet Internet Explorer objesi oluşturarak ilgili sayfaya gitmesini sağlamaktadır. Yalnızca sayfa URL'nin sonundaki değişken kullanıcıdan istendiği için fonksiyon her çalıştırıldığında dinamik Wikipedia sayfasına gidilmektedir.


 

 

 

Fonksiyonların değiştirilmesi ve kaldırılması

Script içerisinde kullanılan fonksiyonlar istenildiği takdirde değiştirilebilir ya da tamamen kaldırılabilir.

Değiştirilmek istenen fonksiyon için yapılması gereken aynı fonksiyonun değiştirilen kısımları ile birlikte tekrardan oluşturulmasıdır.


Test fonksiyonu konsol içerisinde çağrıldığında güncelleştirilmiş ikinci sürümün çıktı olarak verildiği görülmektedir.


Fonksiyonların kaldırılması için ilgili PowerShell oturumunun kapatılması sağlanabilir. PowerShell konsolundan ya da çalıştırılan script içerisinden çıkıldığında fonksiyon ve fonksiyona atanan değerler kaldırılacaktır.

Ayrıca Del komutu kullanılarak ilgili fonksiyon aynı oturum içerisinde silinebilir.



buy research paper online

765qwerty765

PowerShell Öğreniyorum – Fonksiyonlar – Bölüm 4

Bu bölümde diğer yazılım dillerinden aşina olunan ve karmaşık scriptleri basitleştiren bir yöntem olan fonksiyon kullanımına değinilecektir.

Fonksiyonun temel amacı script içerisinde kullanacağınız kod bloğuna bir isim vermektedir. Bu sayede değişkenlerde olduğu gibi, oluşturulan fonksiyon yine sizin belirlediğiniz isim ile scriptin içerisinde bir veya birden fazla kez çağırılabilir.

PowerShell içerisinde fonksiyon oluşturabilmek için gerekli olan Kullanım Biçimi bilgisi aşağıdaki gibidir;

Function
FonksiyonIsmi
(Parametreler) {Script Bloğu}

Yukarıdaki Kullanım Biçimi bilgisinde görüldüğü gibi herhangi bir fonksiyonu oluşturmak için Function anahtar kelimesinin kullanılması gerekmektedir. PowerShell içerisinde girilen bu anahtar kelime ile konsol bir fonksiyon oluşturma aşamasında olduğunu anlayacak ve fonksiyon ismi bilgisi girilmesini bekleyecektir.

FonksiyonIsmi script içerisinde sınırları belirlenmek istenen kod bloğuna verilecek isimdir. Bu noktada ilgili kod bloğunu anlaşılır biçimde tanımlayacak isimler verilmesi, fonksiyonun karmaşık scriptlerde kullanılmasını kolaylaştıracaktır.

Parametreler seçeneğe bağlı olarak fonksiyonlar ile birlikte kullanılabilir. Herhangi bir parametreye sahip olmayan bir fonksiyon oluşturulduğunda yalnızca fonksiyon isminin kullanılması ilgili kod bloğunun olduğu gibi çalıştırılmasını sağlayacaktır. Örneğin statik bir ip numarasının pinglenmesi için bir fonksiyon yazılabilir. Böylece yalnızca fonksiyonun ismi PowerShell konsolunda girilerek ilgili ip'nin pinglenmesi sağlanır. Ancak parametre kullanımı ile fonksiyon içerisinde kullanılan ip numarasına bir değişken atanır ve fonksiyon bu parametre ile çalıştırılabilir. Böylece ping işlemini gerçekleştirecek fonksiyon ismi ve ardından ip numarası yazılarak istenilen ip numarasına ping atılabilir.

Script Bloğu fonksiyon içerisinde kullanılmak istenen kodları barındıran bölümdür. Fonksiyon oluşturulurken köşeli parantez içerisine yerleştirilen tüm değerler, fonksiyon ismi çağrıldığında parametreleri ile birlikte çalıştırılacaktır.

Fonksiyon kullanımının genel özellikleri incelendiğine göre başlangıç seviyesi örneklere geçilebilir;


İlk örnekte temel bir fonksiyon oluşturulmuştur. Geri ismi verilen bu fonksiyona köşeli parantez kullanımı ile PowerShell konsolunun tanımlayabileceği script bloğu yerleştirilmiştir. Bilindiği gibi cd.. komutu PowerShell içerisinde de desteklenmekte ve konsol içerisinde bir geri dizine geçiş yapmak için kullanılmaktadır.

Örnek üzerinde görüldüğü gibi PowerShell konsolu içerisinde bir fonksiyon tanımlandığında size herhangi bir çıktı verilmeyecektir. Bu andan itibaren yalnızca fonksiyon ismi kullanılarak ilgili script bloğu çağırılır.

PowerShell içerisinde fonksiyona atanabilecek tüm değerleri içeren varsayılan bir argument bulunmakta ve $args değişkeni içerisinde saklanmaktadır.


şeklinde oluşturulan bir fonksiyonda $args değişkeni belirtildiği için kullanıcı bu değeri fonksiyon ismi ile birlikte kullanabilir durumda olacaktır.


Birden Fazla Argument Kullanımı

Fonksiyon içerisinde argument kullanarak kullanıcıdan değer alınabileceğinden bahsetmiştik. Bu noktada birden fazla argument kullanıldığı takdirde bu argumentlerin fonksiyon içerisinde tanımlanması için virgül-liste kullanılabilir.

Aşağıdaki örnekte iki değişken (argument) kullanılarak kullanıcıdan fonksiyon içerisinde kullanılmak üzere iki farklı değer istenmektedir.


Carpma isminde oluşturulan fonksiyonda iki farklı değer tanımlanmıştır. Fonksiyon içerisinde ki kod bloğunda ise bu iki değerin çarpılması gerektiği belirtilerek fonksiyon tamamlanmıştır. Fonksiyon kullanıldığı takdirde aşağıdaki gibi bir çıktı üretecektir.


 

Fonksiyon kullanımı sırasında gerekli parametreler oluşturularak kullanıcının bu parametreleri kullanarak değişkenlere değer atamaları sağlanabilir. Aşağıdaki örnekte parametre kullanımı incelenmiştir;


Parametreler isminde oluşturulan fonksiyon içerisindeki kod bloğunda param kullanılarak parametre tanımlaması başlatılmıştır.

Param kullanımı sonrasında parantez içerisinde yer verilen değişkenler, script çalıştırıldığında parametre olarak kullanılabilecektir.

Bu örnekte aynı zamanda değişkenlere statik değerler atanarak parametre kullanımı olmadan da fonksiyonun döndüreceği sonuçlar incelenecektir.

Yukarıdaki fonksiyon hiçbir parametre olmadan çalıştırıldığı takdirde aşağıdaki çıktı elde edilir;


Görüldüğü gibi parametre kullanımı olmadığı takdirde $ilksayı ve $sonsayi statik değerleri çarpma işlemine sokularak sonuç ekrana yansıtılmıştır.


Fonksiyon içerisinde param kullanıldığı için ilksayi ve sonsayi değerlerine, herhangi bir PowerShell komutuna parametre ekler gibi ( – işareti ile ) değer kullanıcı tarafından eklenebilir. Bu takdirde fonksiyon içerisindeki kod bloğu kullanıcıdan parametre yardımı ile alınan değerler üzerinde çarpma işlemi gerçekleştirecektir.


 

PowerShell Öğreniyorum – Değişkenler – Bölüm 3

PowerShell Öğreniyorum yazı dizimizde bu bölümde ön tanımlı değişkenlerin özelliklerini inceleyeceğiz.

PowerShell, kendi içerisinde bazı işlemleri gerçekleştirmek için önceden tanımlı, değiştirilemez, otomatik değişkenleri kullanmaktadır. Bu değişkenler istenildiği takdirde, kullanıcı tarafından kullanılabilir ve barındırdığı değerler sabit olarak kalır.

PowerShell içerisinde var olan otomatik değişkenlerin listesini almak için aşağıdaki komut satırı kullanılabilir.


PowerShell içerisinde sık kullanılan ön tanımlı otomatik değişkenler aşağıdaki tabloda incelenmiştir.


Var olan bu değişkenlere herhangi bir değer atanmak istendiği takdirde, Shell konsolu buna izin vermeyecektir.


Ön tanımlı otomatik değişkenlerin kullanımı ile ilgili örnekler aşağıda incelenmiştir.

$Home Değişkeni


$Home değişkeni, kullanıcı için belirlenen varsayılan başlangıç dizinidir. Yukarıdaki örnekte görüldüğü gibi varsayılan olarak değeri C:Users dizinidir. Hazırlanan scriptlerde, scripti çalıştıran kullanıcının, işletim sistemi içerisindeki profil dizininde bir görev gerçekleştirilmek istenirse, bu ön tanımlı değişken kullanılabilir.

$PID Değişkeni


Yukarıdaki örnekte, ilk olarak $Pid değişkeni ekrana yansıtılmıştır. Değişken çıktı olarak “6040” değerini vermektedir. Bu bilginin doğruluğunu teyit etmek için Get-Process komut satırı, PowerShell ismine sahip olan işlemi –Name parametresi ile çekmiştir. İncelenen çıktıda sadece PowerShell işlemi listelenmiş ve Id değerinin ilk çıktıda olduğu gibi “6040” değerine sahip olduğu gözlenmiştir.

$error değişkeni


$error değişkeni, shell içerisinde alınan son hata kodunu hafızasında tutan ön tanımlı bir değişkendir. Yukarıdaki örnekte get-hatalikomut şeklinde bir metot çalıştırılmak istenmiştir. Ancak PowerShell konsolu böyle bir metot referansı bulamadığı için hata mesajını çıktı olarak vermektedir. Bir sonraki aşamada ekrana yalnızca $error değişkeni yansıtılıp hafızasında tuttuğu değer öğrenilmek istendiğinde aynı hata mesajını yansıttığı görülmektedir.

 

$_. Değişkeni


$_. Değişkeni ile where-object ve foreach komutları kullanılarak çıktılar içerisinde filtreleme gerçekleştirilebilir. Yukarıdaki örnekte Get-Process komut satırı ile anlık çalışan tüm işlemler listelenmiştir. Ardından Pipeline kullanılarak bu işlemler içerisinde yalnızca name sütunu svchost olanların ekrana yansıtılması istenmektedir.$_. değişkeni ile çıktı içerisindeki sütunlar temel alınarak filtreleme gerçekleştirilebilir.

$$ değişkeni


.$$ değişkeni, Shell içerisinde son satır bilgisinin son girdisini içermektedir. Yukarıdaki örnekte dir komut satırı ile C:anilerduranSystemPowerShell dizini listelenmek istenmiştir.

Bir sonraki satırda ise Notepad uygulaması ile $$ dizini altındaki text.txt dosyası açılmak istenmiştir. $$ değişkeni, hafızasında bir önceki satırdaki son girdi olan C:anilerduranSystemPowerShell dizinini bulundurduğundan dolayı ilgili dosya sorunsuz şekilde Notepad uygulaması ile açılmıştır.