2011-12-14 27 views
32

Tôi bắt đầu sử dụng PowerShell và tạo chức năng trong tệp 'thư viện' để cải thiện khả năng đọc mà tôi gọi từ 'nhân viên' của tôi kịch bản.Cách gọi hàm trong kịch bản PowerShell khác khi thực thi kịch bản PowerShell bằng cách sử dụng 'Chạy với PowerShell'

=================== Library file ========================== 
function ShowMessage($AValue) 
{ 
    $a = new-object -comobject wscript.shell 
    $b = $a.popup($AValue) 
} 
=================== End Library file ========================== 


=================== Worker file ========================== 
. {c:\scratch\b.ps1} 

ShowMessage "Hello" 
=================== End Worker file ========================== 

Chạy tập lệnh 'worker' hoạt động tốt khi trong PowerShell IDE nhưng khi tôi nhấp chuột phải vào tệp công nhân và chọn 'Chạy bằng PowerShell', bạn không thể tìm thấy hàm 'ShowMessage'. Cả hai tệp đều nằm trong cùng một thư mục. Điều gì có thể xảy ra ở đây?

+0

Cũng lưu ý rằng hãy gọi tập lệnh bằng cách sử dụng '&', ví dụ: '&" c: \ scratch \ b.ps1 "' không nhập các hàm. – ashes999

Trả lời

53

Cố gắng thêm kịch bản như thế này:

=================== Worker file ========================== 
. "c:\scratch\b.ps1" 

ShowMessage "Hello" 
=================== End Worker file ========================== 
+2

Điều đó hoạt động tốt, thankyou. –

+1

Chú ý khi sử dụng đường dẫn tương đối: Đừng quên thêm một dấu chấm trước đường dẫn '. ". \ b.ps1" '. Rất mới đối với psh, tôi không biết rằng dấu chấm đầu tiên là toán tử để sửa đổi phạm vi và trong ngữ cảnh đó không liên quan gì đến đường dẫn. Xem [Ký hiệu mã nguồn] (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes). –

11

Trong tập công nhân, dot-nguồn của bạn tập tin thư viện, điều này sẽ tải tất cả nội dung (các chức năng, các biến, vv) với phạm vi toàn cầu, và sau đó bạn sẽ có thể gọi các hàm từ tệp thư viện.

=================== Worker file ========================== 
# dot-source library script 
# notice that you need to have a space 
# between the dot and the path of the script 
. c:\library.ps1 

ShowMessage -AValue Hello 
=================== End Worker file ====================== 
+5

Đó là an toàn hơn để kèm theo đường dẫn trong dấu ngoặc kép, trong trường hợp sẽ có không gian, như Program Files –

+0

Đồng ý, nhưng đường dẫn này không có dấu cách :). Tôi có xu hướng loại bỏ dấu ngoặc kép khi họ không cần thiết. –

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