SORU
7 Ocak 2010, PERŞEMBE


PowerShell sonlanan bir script

Bir şekilde kurtarılamaz bir işlev içinde hata oluştuğunda (PS1) PowerShell komut sonlandırmak için aradım. Örneğin:

function foo() {
    # Do stuff that causes an error
    $host.Exit()
}

Elbette $host.Exit() diye bir şey yok. 4**, ama bu gerçekte olan konsol penceresini kapatır. bu benim istediğim değil. Bir şey Python eşdeğer ihtiyacım olan şey sadece fazla bekletmeden geçerli komut dosyası yürütme duracak sys.exit().

Düzenleme:Evet, sadece exit. Yaa.

CEVAP
16 Mayıs 2014, Cuma


Bu eski bir yazı olduğunu biliyorum ama çok fazla bu konu için arama yaparken en iyi arama sonuçları biri olarak bu konuya geri gelirken buluyorum. Ancak, ben her zaman daha fazla çelişkili bilgiler nedeniyle geldiğimde o zaman bırakın karıştı. Sonuçta ben her zaman kendi testlerimi çözmeye gerçekleştirmek zorunda. Bu sefer benim bulgular yayınlayacağız.

TL;DRÇoğu kişi Exit çalışan bir komut sonlandırmak için kullanmak isteyecektir. Eğer script sadece fonksiyonları daha sonra bir kabuk için kullanılacak ilan ediyor, ancak sonra dedi fonksiyonların tanımları Return kullanmak isteyeceksiniz.

İade vs vs Aradan çıkın

  • Çıkış:Bu "" şu anda çalışan içerik. çıkılacak Eğer bir komut bu komutu ararsan senaryo çıkar. Eğer kabuk bu komut ararsan kabuk çıkar.

    Eğer bir fonksiyon Çıkış komutu ararsa, çalışan ne çıkar. Eğer öyleyse bu fonksiyonu çalıştıran bir betik içinden çağrılırsa sadece bu komut çıkar. Ancak, eğer senaryonu sadece beyan işlevi olması kullanılan mevcut kabuk ve çalıştırma fonksiyonu kabuk olacak çıkış kabuk çünkü kabuk bağlam içinde hangi işlevi contianing Exit komut çalışıyor.

    Not:Doğru komut çalıştırma yapıldıktan sonra PowerShell çalıştırmak için bir komut dosyasını tıklatın, varsayılan olarak, PowerShell otomatik olarak kapanacak. Bu Exit komutu ile ilgisi veya komut dosyası içinde başka bir şey vardır. Komut koştu olmak için sadece varsayılan bir davranış, bir PowerShell komut dosyası çalıştıran bu özel yöntemi kullanıyor. Toplu iş dosyaları ve Komut Satırı penceresi için de geçerlidir.

  • Dönüş:Bu önceki Ara noktaya dönecektir. Eğer bir komut dosyası (herhangi bir fonksiyon dışında) bu komut ararsan kabuk dönecektir. Eğer kabuk bu komut ararsan kabuk tek bir komut satırından koştu önceki Ara nokta) döner. Eğer bir işlevi bu komut ararsanız işlevin çağrıldığı yere döndürür.

    Geri çağrı noktadan sonra tüm komutları yürütme bu noktadan itibaren devam edecektir. Eğer bir komut dosyası adı verilen kabuk ve içerdiği Return komut dışında herhangi bir fonksiyon ne zaman döner, kabuk yok daha fazla komutları çalıştırmak böylece yapma Return kullanılan bu yol aslında aynı gibi Exit.

  • Ara:Bu döngüler patlak ve durumlarda geçecektir. Eğer döngü veya switch case sırasında bu komut ararsanız senaryonun dışarı kıracak. Eğer Break içinde sadece çemberin dışında kıracak bir döngü içinde iç içe bir döngü çağrısı denir.

    Orada da ilginç bir özelliği Break bir önek bir döngü ile bir etiket ve daha sonra patlak o etiketli döngü bile Break komut çağrılır içinde birden fazla iç içe geçmiş gruplar içinde etiketli döngü.

    While ($true) {
        # Code here will run
    
        :myLabel While ($true) {
            # Code here will run
    
            While ($true) {
                # Code here will run
    
                While ($true) {
                    # Code here will run
                    Break myLabel
                    # Code here will not run
                }
    
                # Code here will not run
            }
    
            # Code here will not run
        }
    
        # Code here will run
    }
    

Biliyorsun

Her iki Return Break yerleşik PowerShell parçası olan anahtar kelimeler ise ilgi çekici, ilginç sözdizimi, Exit değildir. Exit ne bir çalıştırın ne de bir diğer adıdır. Powershell.exe yürütülebilir tanıdığı bir özelliktir. Bu cmd.exe çok gibi yürütülebilir exit bir komut olarak algılar ancak her yere sisteminizde exit.exe yok hayır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • LinusTechTips

    LinusTechTip

    25 Kasım 2008
  • Ty Moss

    Ty Moss

    20 Kasım 2007