2012-02-23 32 views
7

Tôi cảm thấy rằng tôi đang làm một cái gì đó ngớ ngẩn, nhưng đây là vấn đề:luận Powershell đi qua thực hiện chức năng dường như không làm việc

Function getPropertyOfFile($a, $b, $c) 
{ 
    $a.GetDetailsOf($b, $c) 
} 

Nếu tôi vượt qua $ a, $ b, biến $ c đó là phù hợp với chức năng, nó không nói rằng

"Gọi phương thức không thành công vì [System.Object []] không chứa phương thức có tên 'GetDetailsOf'."

Tuy nhiên, nếu tôi trực tiếp thay thế $ a, $ b, $ c bằng các đối số mà tôi đã chuyển và sau đó thử chạy, nó hoạt động tốt.

Chuyện quái gì đang xảy ra?

Lưu ý: Tôi đang sử dụng powerhell ISE và đang nhập hàm để cấp quyền bằng cách sao chép/dán vào bảng điều khiển. Tôi cũng đã làm việc với giả định rằng nếu tôi nhập một hàm mới có cùng tên, nó sẽ ghi đè lên. Có cách nào tốt hơn để chỉ đọc PS từ .ps1 không?

Chỉnh sửa: Tôi đang cố gắng đưa câu trả lời vào this question vào các chức năng.

Chỉnh sửa 2:

Function getPropertyOfFile $a $b $c 
{ 
    $a.GetDetailsOf($b, $c) 
} 

Cung cấp cho một lỗi Missing function body in function declaration. At line:1 char:28.

+2

Bạn cần phải chứng minh mã bạn đang đi qua với chức năng .. Nhưng hãy thử: '$ a [0] .GetDetailsOf ($ b, $ c)' –

+0

Tôi đang chuyển $ shellfolder, $ shellfile, các biến đã được xác định trong bài đăng tôi đã liên kết đến, và thuộc tính chỉ là một số – soandos

+0

Xem chỉnh sửa để đăng bài – soandos

Trả lời

13

Các chức năng trong PowerShell được gọi tương tự như lệnh ghép ngắn, vì vậy bạn không cần tách riêng đối số bằng dấu phẩy.

gọi của bạn có thể trông như thế này:

getPropertyOfFile($foo, $bar, $baz) 

mà kết quả trong $a có giá trị $foo, $bar, $baz (một mảng) trong khi $b$c$null.

Bạn cần phải gọi nó như thế này:

getPropertyOfFile $foo $bar $baz 

đó, như đã nói, là giống với cách bạn gọi cmdlets. Bạn thậm chí có thể làm

getPropertyOfFile -a $foo -c $baz -b $bar 

lúc này bạn có thể nhận thấy rằng đối số chức năng của bạn không được đặt tên rất tốt ;-)

EDIT: Như đã đề cập trước khai của bạn của hàm là tốt. Vấn đề là trong mã số bạn đã không đăng nhưng dễ dàng gây khó chịu cho những người có trải nghiệm PowerShell. Cụ thể, yêu cầu chức năng của bạn.

+0

Nếu tôi xóa dấu phẩy, hãy nói: Thiếu ')' trong danh sách tham số chức năng. – soandos

+0

Đây có thể là thủ phạm ... trừ khi '$ a' đang được tạo thành một mảng ở đâu đó. –

+1

* Gọi *, không * khai báo *. Tuyên bố của bạn là tốt (ngoài các tên đối số kỳ lạ). – Joey

3

Bạn cần tách các đối số của mình khi gọi hàm bằng dấu cách thay vì dấu phẩy, tức là

getPropertyOfFile $arg1 $arg2 $arg3 

thay vì

getPropertyOfFile $arg1, $arg2, $arg3 

Hình thức thứ hai sẽ vượt qua một mảng duy nhất chứa $arg1, $arg2$arg3 như tham số $ a

+0

Tôi nhận được: Thiếu cơ quan chức năng trong khai báo chức năng. Tại dòng: 1 char: 28 – soandos

+0

Xem chỉnh sửa để đăng – soandos

+0

@soandos - Ý tôi là khi bạn gọi hàm, không phải trong khai báo – Lee

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