2013-06-27 35 views
12

Tôi có tập lệnh PowerShell phân tích tệp và gửi email nếu phát hiện một mẫu nhất định. Tôi có thiết lập mã email bên trong một hàm và tất cả đều hoạt động tốt khi tôi chạy nó từ ISE, nhưng tôi đã sử dụng PS2EXE để có thể chạy tập lệnh dưới dạng dịch vụ nhưng không nhận ra chức năng "email". mã của tôi trông giống như nàyKịch bản Powershell không nhận ra chức năng của tôi

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

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

Khi tôi chuyển nó sang exe và chạy nó tôi nhận được lỗi này:

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. 

Trả lời

22

quá trình Powershell để (từ trên xuống) để định nghĩa hàm cần phải được trước khi gọi hàm:

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

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

Có thể hoạt động tốt trong ISE vì bạn có định nghĩa chức năng trong bộ nhớ vẫn còn trong lần chạy hoặc thử nghiệm trước.

+0

Cảm ơn nó hoạt động ngay bây giờ! – laitha0

0

Khi nói đến chức năng gọi, PowerShell là khá khác biệt so với lập trình các ngôn ngữ khác theo những cách sau đây:

  1. Khi đi qua các đối số cho hàm, ngoặc KHÔNG cho phép (và đặt ra một lỗi phân tích cú pháp trong nếu Set-StrictMode được đặt thành -version 2.0 hoặc cao hơn/Latest), các đối số được lồng tiếng phải được sử dụng để gọi phương thức, có thể là phương thức .NET hoặc phương thức do người dùng xác định (được xác định trong lớp - trong PS 5.0 trở lên).
  2. Các tham số được phân cách bằng dấu cách và không được phân cách bằng dấu phẩy.
  3. Hãy cẩn thận ở nơi bạn xác định hàm. Như PowerShell tuần tự xử lý line-by-line theo thứ tự từ trên xuống, do đó chức năng phải được thách thức trước hàm được gọi:

    Function func($para1){ 
          #do something 
        } 
        func("arg1") #function-call 
    

Trong ISE, chức năng định nghĩa dưới đây chức năng gọi có thể xuất hiện như là làm việc nhưng (hãy cẩn thận) đó là định nghĩa chức năng được lưu trữ trong bộ nhớ từ một lần chạy trước đó, vì vậy nếu bạn đã cập nhật chức năng bạn đang say.

Các vấn đề liên quan