"Enter"a basıp içeriğe geçin

PowerShell Modül komutu oluşturma

Last updated on 26 Şubat 2019

Function (İşlev) Nedir?

Technet’te yazan tanım şöyledir:

Bir işlev, atadığınız bir ada sahip Windows PowerShell deyimlerinin bir listesidir. Bir işlevi çalıştırdığınızda, işlev adını yazarsınız. Listedeki ifadeler, komut satırına yazmış gibi çalışıyor.

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-5.1

Mesela: Bir fonksiyonda kodlar, deyimler, parametreler ve benzeri bilgileri yerleştirebilirsiniz. Bu fonksiyonun bir adı vardır. Ve bu isim fonksiyonunuzu başlatmak için kullanılır.

İşte burada bir örnek: Microsoft Docs

function Get-PowerShellProcess {Get-Process PowerShell}

İşlev çalıştırıldıktan sonra yeni bir komut kullanılabilir: Get-PowerShellProcess. Ve bu komut Get-Process PowerShell’i çalıştırır.

Bu yazıda bir function (işlev) oluşturacağız ve sonra bu işlevi bir PowerShell Modülü olarak kaydedeceğiz. İlk olarak, bir modülün ne olduğuna hızlı bir şekilde gözden geçelim.

PowerShell Modülü Nedir?

Bir modül, uygun bir birim olarak (genellikle tek bir dizinde kaydedilen) gruplandırılmış ilgili Windows PowerShell işlevlerinin bir kümesidir. Bir dizi ilgili betik dosyalarını, derlemeleri ve ilgili kaynakları bir modül olarak tanımlayarak kodunuzu, aksi halde kullanmaktan çok daha kolay, atayabilir, yükleyebilir, devam ettirebilir ve paylaşabilirsiniz.

Bu, PowerShell Oturumumuza bir dizi komut gönderebileceğimiz anlamına gelir. Eski PowerShell Sürümlerinde bu modülün komutlarını kullanmak için modüllerinizi elle oturumunuza yüklemelisiniz. Örneğin – uzun zaman önce – Active Directory PowerShell komutlarını kullanmak için Modül Active Directory’yi almak zorunda kaldınız.

Ayrıntılı Mod’da çalıştırdığınızda, PowerShell tüm içe aktarılan komutları sunar:

Import-Module ActiveDirectory -Verbose

Yüklü ve yüklenebilecek tüm modülleri göstermek için;

Get-Module -ListAvailable

 

Modüller bir klasöre kaydedilir.

Windows ile birlikte gönderilen modüller için Varsayılan Klasör şu şekilde tespit edilebilir.

cd $PSHome\Modules

 

Hazırlamış olduğunuz modülünüzü buraya kaydetmeniz önerilmez.

 Tüm kullanıcılar için Modüller Klasörü

cd $Env:ProgramFiles\WindowsPowerShell\Modules

Bu klasör bir sonraki adımlarda kullanılacaktır.

Geçerli Kullanıcı için Modüller Klasörü

cd $Home\Documents\WindowsPowerShell\Modules

Functions (İşlevler)

İşlev No: 1: Bilgisayarın IPv4 Adresini Alma

Konuyla başlamanıza yardımcı olmak için 2 örnek hazırladım.

Windows PowerShell ISE’yi açın.  Aşağıdaki kodu PowerShell ISE oturumunuza kopyalayın. Her tek maddeyi tartışacağız.

function Get-IPv4Address {Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias “Ethernet” | Select-Object IPAddress}

function :  İşinizin başlangıcını tanımlar ve başlangıcı işaretler.

Get-IPv4Address: İşlevin adı. Bu komut, kodunuzu yürütmek için kullanılacaktır

Get-IPv4Address’i çalıştırırsanız function içeriğinde yazmış olduğunuz aşağıdaki kodunuz çalışacaktır.

{Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias “Ethernet” | Select-Object IPAddress} 

Yeşil simgeye (çalıştır) basın ve bir sonraki olarak Get-IPv4Address’i çalıştırın.

 

Güzel. İlk PowerShell işlevinizi oluşturdunuz.

İşlev No: 2: Localhost’un Varsayılan Ağ Geçidinin ve Uzak Sunucu’ların erişilebilirliğini test etmek için Test-Gateway

Başka bir örnek. Bunu daha ayrıntılı bir şekilde açıklamalıyım. Hedef, Test Geçidi komutunu kullanarak Varsayılan Ağ Geçidinin erişilebilirliğini sınamaktır. Yerel bilgisayarda ve uzak bilgisayarlarda. İlk örneğe göre fark Parametreleri ve bir if – else koşulunu kullanıyorum.

functionTest-Gateway{
param($Computer= $null,
 $Count= "1")
If($Computer-eq$null)
{Test-Connection-Destination(Get-NetRoute-DestinationPrefix0.0.0.0/0 | Select-Object-ExpandPropertyNexthop)-Count$Count}
 else
 {$Route=Invoke-Command-ComputerName$Computer{Get-NetRoute-DestinationPrefix0.0.0.0/0 | Select-Object-ExpandPropertyNexthop}; Test-Connection-Source$Computer-Destination$Route-Count$Count}
 }
İşlevin adı Test-Gateway’dir. Param ifadesine dikkat edin. İki parametre sunuyoruz: Bilgisayar ve Sayım. Ve kullanıcının bilgisayar ve sayım için değer sağlamaması durumunda bu parametreler için standartlar belirledim.
Kullanıcı Bilgisayar için bir değer sağlamazsa, bu değerler $ null olduğundan, Test-Gateway localhost üzerinde yürütülür. Kullanıcı bir bilgisayar adı sağlıyorsa, else deyimi etkin durumdadır. Ardından, uzaktaki bir bilgisayarın varsayılan ağ geçidi test edilir. Kullanıcı bir count sağlamazsa ping yalnızca bir kez çalıştırılır. (Bir ICMP Echo İsteği)
Neden Get-NetRoute’den Varsayılan Ağ Geçidi’ni çağırayım? Eh, Yönlendirme Tablosundan okunan Varsayılan Güzergah (0.0.0.0/0) daima Varsayılan Ağ Geçidi Adresini verir. Ağ Geçidi Adresinin hangi birinde bulunabileceği birden fazla ağ kartınız varsa?
Şimdi bir bilgisayar adı veriyorum. Uzak bilgisayarın aynı etki alanında olması ve genellikle Komutanlığı Etki Alanı Yöneticileri üyesi olarak çalıştırmanız gerektiğini unutmayın. Client01 varsayılan Ağ Geçidine erişebilir.
Bu ikinci örnek, parametrelerle işlevlerin nasıl oluşturulacağı ile ilgili bir genel bakış sunmalıdır. Son adıma geçelim. Bu işlev için bir modül oluşturmak istiyoruz.
İşlevinizi Komut Dosyası Modülü Olarak Kaydedin
PowerShell ISE’de Dosya’ya tıklayın ve Kaydet’i seçin. İşlevinizi tüm kullanıcılar için kullanılabilir kılmak için ProgramFiles\WindowsPowerShell\Modules\Test-Gateway’e kaydedin. Bunun anlamı, dosyanızla aynı adı taşıyan bir klasör oluşturmanız gerektiğidir. dosya türünü psm1‘i seçin.
Kaydet’i tıklayın. Tüm PowerShell Oturumlarınızı kapatın. PowerShell’i tekrar açın ve yeni Komut Dosyası Modülünüzü görüntülemek için Get-Modülünü çalıştırın.

Get-Module -ListAvailable

İşte yeni Modülünüz ve işlevi:
Başka bir yazımızda görüşmek üzere,

2 Yorum

  1. Ahmet
    Ahmet 1 Şubat 2020

    Eline sağlık. Faydalı bir makale olmuş.

    • onurbabur
      onurbabur 4 Şubat 2020

      Teşekkür ederim,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir