2009-09-10 36 views

Trả lời

63

Bạn sẽ thường "chấm" kịch bản vào phạm vi (toàn cầu, kịch bản khác, trong vòng một scriptblock). Nằm rải rác một kịch bản sẽ cả tải và thực thi kịch bản trong phạm vi đó mà không cần tạo một phạm vi lồng nhau mới. Với các hàm, điều này có lợi ích mà chúng bám sát sau khi tập lệnh đã được thực hiện. Bạn có thể làm những gì Tomer cho thấy ngoại trừ việc bạn sẽ cần phải rải rác trên kịch bản ví dụ:

powershell -command "& { . <path>\script1.ps1; My-Func }" 

Nếu bạn chỉ muốn thực hiện chức năng từ phiên PowerShell hiện tại của bạn sau đó làm điều này:

. .\script.ps1 
My-Func 

Chỉ cần lưu ý rằng bất kỳ tập lệnh nào không có trong một hàm sẽ được thực thi và bất kỳ biến tập lệnh nào cũng sẽ trở thành biến toàn cục.

+0

+1, đoạn mã thứ hai là chỉ là những gì tôi cần, để làm một debug đơn giản các chức năng riêng biệt trong một tập tin kịch bản từ ISE –

+1

Trong đoạn mã thứ hai, bạn có thể bao quanh mã với '& {...} 'như trong' & {. . \ script1.ps1; My-Func} 'để tránh ô nhiễm phạm vi. –

+0

Nếu bạn có các tham số trên hàm, hãy đặt chúng sau tên hàm, ví dụ: powershell -command "& {." C: \ script.ps1 "; MyMethod" arg1 "" arg2 "}" – HockeyJ

2

Có lẽ cái gì đó như

powershell -command "& { script1.ps; My-Func }" 
0

Hướng dẫn sẽ gửi thông báo lỗi bên dưới. Dấu chấm là cần thiết trước tên của tên tập tin để tải nó vào bộ nhớ, như Keith Hill đề xuất.

MyFunction: The term 'MyFunction' is not recognized as the 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.

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