Platformlar Arası PowerShell Komut Dosyaları Nasıl Oluşturulur

0
27

Platformlar Arası PowerShell Komut Dosyaları Nasıl Oluşturulur

Hataları önlemek için, kodun istenmeyen bir platformda çalışmasını engelleyen PowerShell komut dosyaları yazmak önemlidir. Neyse ki, bunu yapmak göründüğünden daha kolay.

Birkaç yıl öncesine kadar, PowerShell komut dosyaları yalnızca Windows makinelerinde çalışabiliyordu. Kuşkusuz, bu kulağa gerçekten açık ve önemsiz bir ifade gibi geliyor, ancak bunun ne anlama geldiğini bir düşünün: O zamanlar, betiğin sonunda ne tür bir makinede çalışacağını düşünmeden bir PowerShell betiği oluşturmak mümkündü.

Bugün, durum böyle değil. Bir Windows makinesi için tasarlanmış bir PowerShell betiği muhtemelen bir Linux makinesinde düzgün çalışmayacaktır. Elbette bunun tersi de doğrudur.

Aslında bundan biraz daha kötü. Bir PowerShell komut dosyasını tasarlandığından farklı bir platformda çalıştırmayı denerseniz, komut dosyası içindeki bazı komutlar büyük olasılıkla çalışır, diğerleri desteklenmez ve bu nedenle hatalar oluşturur. Nihai sonuç tamamen tahmin edilemez olacaktır. Bazı durumlarda, komut dosyası zarar görebilir.

Bu durumda, çapraz platform olan veya kodun istenmeyen bir platformda çalışmasını engelleyen PowerShell betikleri oluşturmak önemlidir. İster inanın ister inanmayın, bunu yapmak göründüğünden daha kolaydır.Hemen hemen hiçbir şey yapmayan gerçekten basit bir senaryo ile başlayayım. Daha sonra, daha fazla kavram sunarken bu senaryoyu geliştireceğim. İşte senaryo:

Bu komut dosyası, RunOn-Windows adlı bir işlev oluşturur. Daha önce de belirttiğim gibi, işlev pek bir işe yaramıyor. Yalnızca komut dosyasının bir Windows makinesinde çalıştığını belirten bir mesaj görüntüler. Senaryonun gövdesi de aynı derecede basit. İşlevi çağıran tek bir komut içerir.

Yazıldığı gibi, bu komut dosyasının bir Windows makinesinde çalışıp çalışmadığı hakkında hiçbir fikri yoktur. Peki ya komut dosyasının Windows’ta çalışıp çalışmadığını belirlemek için bir test gerçekleştirmek ve işlevi yalnızca Windows işletim sistemi algılandığında çağırmak mümkün olsaydı? Yapması o kadar da zor değil, ancak PowerShell sürüm 6 veya üstünü çalıştırdığınızdan emin olmanız gerekecek. Aksi takdirde bu teknik işe yaramayacaktır.

Microsoft, hangi işletim sisteminin kullanıldığını görmek için kullanabileceğiniz bir dizi değişken sağlar. Örneğin, Windows’ta bir komut dosyasının çalışıp çalışmadığını görmek istiyorsanız, $ IsWindows değişkenini kullanabilirsiniz. Bu değişken, sistem Windows tabanlıysa True veya işletim sistemi başka bir şeyse False olarak ayarlanır. Değişkeni, fonksiyon çağrısının bir parçası olarak kolayca değerlendirebiliriz. Komut dosyası şöyle görünebilir:

Gördüğünüz gibi, fonksiyonun kendisine dokunmadım. Bununla birlikte, yaptığım şey, işlev çağrısını yalnızca $ IsWindows değişkeni true olduğunda çalıştırılacak şekilde yeniden yapılandırın. Bu, Windows kodunun Windows olmayan bir sistemde çalışmasını önlemenin harika bir yoludur.

Ancak Windows olmayan sistemlerin kullanıcılarını komut dosyasının yalnızca Windows’ta çalıştığı konusunda bilgilendirmek isterseniz ne olur? Yapmamız gereken tek şey bir Else ifadesi eklemektir. İşte böyle bir ifade nasıl görünebilir:

Bu kod satırı, komut dosyasının Windows’ta çalışıp çalışmadığını kontrol eder. Windows’ta çalışıyorsa, RunOn-Windows işlevini çağırır. Komut dosyası başka bir platformda çalışıyorsa, komut dosyasının yalnızca Windows sistemlerinde çalıştığını belirten bir mesaj görüntüler.

Bu teknik, bir komut dosyasının istenmeyen bir platformda çalışmasını engellemek için ne kadar kullanışlı olsa da, aslında bir komut dosyası çoklu platform oluşturmak için genişletilebilir. İşte böyle bir komut dosyası nasıl görünebilir:

Bu komut dosyası üç farklı işlev içerir. Unutmayın, bir işlev açıkça çağrılmadıkça asla çalıştırılmaz. Bir işlev, bir Windows makinesinde kullanılması amaçlanan kodu içerirken, diğer işlevler Mac ve Linux için kod içerir.

Komut dosyasının ana gövdesi üç If ifadesi içerir. Komut dosyasının bir Windows makinesinde çalıştığı tespit edilirse, kodun Windows sürümünü içeren bir işlevi çağırır. Komut dosyası bir Linux makinesinde çalışıyorsa, Linux’a özgü komutlar içeren bir işlevi çağırır. Benzer şekilde, komut dosyası bir Mac’te çalışıyorsa, komut dosyası, Mac’te kullanılması amaçlanan kodu içeren bir işlevi çağırır.

Yazar Hakkında