Platformlar Arası PowerShell İstemiyle Cuma Eğlencesi


Bu yıl benim için her şey platformlar arası olacak gibi görünüyor. Bu tartışmaya devam edersek bugün eğlenceli ve basit bir şeyim var. Platformlar arası çalışacak ve zarif olduğunu düşündüğüm bir şekilde bazı anlamlı bilgiler sağlayacak bir PowerShell istem işlevi. İşleve ihtiyacınız olmayabilir ancak platformlar arası uyumluluğu göz önünde bulunduran bir PowerShell işlevini nasıl oluşturduğumu görmek isteyebilirsiniz.

Amaç

Tasarımın amacı, kullanıcı adını ve mevcut konumu renkli bir kutuda görüntüleyecek bir bilgi istemi oluşturmaktı. Kutu çizgisi rengi, kullanıcının yükseltilmiş bir PowerShell oturumunda çalışıp çalışmadığını gösterir. Bilgi istemi daha sonra geçerli tarih ve saati ve PowerShell sürümünü görüntüler. Ancak işlevi gerçekten bir kavram kanıtı veya şablon olarak düşünmelisiniz. Sizinle alakalı herhangi bir bilgiyi değiştirebilirsiniz. Bununla birlikte, platformlar arası uyumluluğu aklınızda tutmanız gerekir.

Çapraz Platform İşlevi Geliştirme

İstemin bir parçası olarak mevcut kullanıcı adını göstermek istediğimi biliyordum. Kullanabileceğiniz birkaç teknik var. $env:Username'in tanımlanıp tanımlanmadığını test etmeye karar verdim. Bu değişken Windows dışı platformlarda TANIMLANMAMIŞTIR. Linux'ta bir LOGNAME ortam değişkeni bulunmalıdır. Herhangi bir nedenle bu değerlerden herhangi birini bulamazsam, son çare varsayılanını kullanacağım.

if ($env:userdomain -AND $env:username) {
        $me = "$($env:userdomain)\$($env:username)"
    }
elseif ($env:LOGNAME) {
        $me = $env:LOGNAME
    }
else {
        $me = "PSUser"
    }

Linux üzerindeki testlerimin sınırlı olduğunu ve Mac'e erişimim olmadığından hiçbir şeyi Mac üzerinde test etmediğimi belirtmeliyim. Bu değeri bir kutunun içinde göstermeyi düşündüğüm metinde kullanıyorum.

$text = "[$me] $($executionContext.SessionState.Path.CurrentLocation)"

Bu metin dizesine ek bilgiler ekleyebilirsiniz. Mevcut konumu ekliyorum. Ana bilgisayar adını, IP adresini, boş alanı veya ihtiyacınız olan her şeyi ekleyebilirsiniz. Değerleri PowerShell sürümüne ve platforma göre türetmek için kod yazmanız gerektiğini unutmayın.

Örneğin kullanıcı (ben) yükseltilmiş bir PowerShell oturumunda çalışıyorsa kutu renginin Kırmızı olmasını istiyorum. Aksi takdirde Yeşil olmalıdır. Windows platformlarında System.Security.Principal.WindowsPrincipal .NET sınıfını kullanabilirim. Ancak bu sınıf, Windows dışı platformlardaki PowerShell Core'da mevcut değildir. PowerShell Core veya Windows PowerShell'deki bazı yeni değişkenleri test etmek için If/ElseIf/Else yapısını kullandım.

if ($IsLinux) {
        if ($(id -g) -eq 0 ) {
            #running as SU
            $lineColor = "Red"
        }
        else {
            $lineColor = "Green"
        }
    }
    elseif ($isWindows -or $psEdition -eq 'desktop') {

        $IsAdmin = [System.Security.Principal.WindowsPrincipal]::new([System.Security.Principal.WindowsIdentity]::GetCurrent() ).IsInRole("Administrators")
        if ($IsAdmin) {
            $lineColor = "Red"
        }
        else {
            $lineColor = "Green"
        }
    }
    else {
        #for everything else not tested
        $lineColor = "Yellow"
    }

Diğer tüm durumlarla başa çıkmak için bir Else cümleciğimin olduğuna dikkat edin. Projenize bağlı olarak bir istisna atmak isteyebilirsiniz. Ancak bu bir istem işlevi olduğundan bunu yapmak istemiyorum.

PowerShell İstemi İşlevi

Fonksiyonun tamamını GitHub'da özet olarak bulabilirsiniz.

:

Diğer PowerShell bilgi istemi işlevleri gibi, betiği nokta kaynak olarak kullanmanız gerekir.

. C:\scripts\boxprompt.ps1

Bunu her zaman kullanmak istiyorsanız bu satırı PowerShell profil komut dosyanıza ekleyin.

Çeşitli PowerShell oturumlarındaki istemin bir örneğini burada bulabilirsiniz.

Sonuç olarak, herhangi bir PowerShell örneğinde çalışan, biraz daha fazla bilgi sağlayan basit bir PowerShell komut istemi işlevine sahibim. Ve gerekirse kutudaki metin dizisine başka bilgiler ekleyebileceğim için büyümeye yer var.

Umarım bunu bir kenara bırakırsın ve bana ne düşündüğünü söylersin. Harika bir hafta sonu geçirin.

İlgili makaleler