2013-06-27 29 views
12

Bir dosyayı ayrıştıran ve belirli bir desen algıladığında bir e-posta gönderen bir powershell komut dosyasına sahibim. Bir işlev içinde e-posta kodu kurulumuna sahibim ve ISE'den çalıştırdığımda her şey düzgün çalışıyor, ancak ben bir hizmet olarak betiği çalıştırabilmek için PS2EXE kullandım ama "e-posta" işlevini tanımıyor. Ben exe ve bu hatayı alıyorum çalıştırmak dönüştürmek ne zaman kod buPowershell betiği işlevimi tanımıyor

#Do things | 
foreach{ 
    email($_) 
} 

function email($text){ 
    #email $text 
} 

benzer: düzen (yukarıdan aşağıya) içinde

The term 'email' is not recognized as teh name of a cmdlet, function, script file, 
or operable program. Check the spelling of the name, or if a path was included, 
verify that the path is correct and try again. 

cevap

22

Powershell süreçleri böylece fonksiyon tanım olması gerekir işlev çağrısı önce: bir önceki seferden veya testinden hala bellekte işlev tanımı var çünkü

function email($text){ 
    #email $text 
} 

#Do things | 
foreach{ 
    email($_) 
} 

muhtemelen İMKB'de çalışıyor. o işlev-çağrıyı gelince

+0

Teşekkürler şimdi çalışıyor! – laitha0

0

, PowerShell aşağıdaki yollarla diğer programlama-dillerden oldukça farklıdır:

    bir işleve argümanlar geçirmeden, parantez karakterleri (ve içinde ayrıştırma hatası yükseltir DEĞİLDİR
  1. Ancak, Set-StrictMode, -version 2.0 veya üstü/En Son) olarak ayarlanmışsa, bir yöntem çağırmak için Parenthesised bağımsız değişkenler kullanılmalıdır; bu, .NET yöntemi veya kullanıcı tanımlı bir yöntem (Sınıf içinde tanımlanmış) olarak tanımlanabilir. 5.0 veya üstü).
  2. Parametreler, boşlukla ayrılmış ve virgülle ayrılmamış.
  3. İşlevi tanımladığınız yerde dikkatli olun. PowerShell sırayla satır-satır yukarıdan aşağıya sırayla işler gibi, bu nedenle fonksiyonu önce meydan gereken fonksiyonu olarak adlandırılır:

    Function func($para1){ 
          #do something 
        } 
        func("arg1") #function-call 
    
  4. İMKB olarak

, fonksiyonu fonksiyonu ara aşağıda tanımlanan may çalışıyormuş gibi görünür ancak (dikkat), önceki bir çalışmadan belleğin önbelleğe alınmış işlev tanımlamasıdır, bu nedenle işlevi güncellediyseniz, vidalanırsınız.