2012-02-23 2 views
7

Я чувствую, что я делаю что-то глупо, но вот вопрос:Powershell аргумент прохождения функционировать, казалось бы, не работает

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

Если я прохожу $ а, $ b, $ C переменные, которые подходят к функции, он не говорит, что

Ошибка вызова метода, потому что [System.Object []] не содержит метода с именем «GetDetailsOf». »

Однако, если я непосредственно заменяю $ a, $ b, $ c аргументами, которые я передавал, а затем попытаюсь запустить их, он отлично работает.

Что, черт возьми, происходит?

Примечание: Я использую powershell ISE и вводя функцию в powershell путем копирования/вставки ее в консоль. Я также работал в предположении, что если я введу новую функцию с тем же именем, она будет перезаписана. Есть ли лучший способ просто прочитать PS из .ps1?

Редактировать: Я пытаюсь обернуть ответ на this question в функции.

Edit 2:

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

Дает Missing function body in function declaration. At line:1 char:28 ошибку.

+2

Вам нужно показать код, который вы проходящее функции .. Но попробуйте: $ a [0] .GetDetailsOf ($ b, $ c) ' –

+0

Я передаю $ shellfolder, $ shellfile, переменные, которые были определены в сообщении, с которым я связан, а свойство - всего лишь число – soandos

+0

См. Редактировать сообщение – soandos

ответ

13

Функции в PowerShell называются похожими на командлеты, поэтому вам не нужно разделять аргументы запятыми.

Ваш вызов, вероятно, выглядит следующим образом:

getPropertyOfFile($foo, $bar, $baz) 

, что приводит к $a, имеющее значение $foo, $bar, $baz (массив) во время $b и $c являются $null.

Вы должны назвать это так:

getPropertyOfFile $foo $bar $baz 

, который, как уже отмечалось, является идентичным тому, как вы называете командлеты. Можно даже сделать

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

в этот момент вы, вероятно, заметили, что ваши аргументы функции не названы очень хорошо ;-)

EDIT: Как было отмечено выше ваша декларация функции штраф. Проблема в коде вы не отправили, но легко доступны для людей с опытом PowerShell. А именно, вызов вашей функции.

+0

Если я удалю запятые, он говорит: «Отсутствует») в списке параметров функции. – soandos

+0

Возможно, это преступник ... если только '$ a' создается как массив. –

+1

* Вызов *, нет * заявление *. Ваша декларация в порядке (кроме странных имен аргументов). – Joey

3

Вам нужно отделить свои аргументы при вызове функции с пробелами, а не с запятыми, т.е.

getPropertyOfFile $arg1 $arg2 $arg3 

вместо

getPropertyOfFile $arg1, $arg2, $arg3 

Вторая форма будет проходить один массив, содержащий $arg1, $arg2 и $arg3 в качестве параметра $ а

+0

Я получаю: Отсутствует тело функции в объявлении функции. В строке: 1 char: 28 – soandos

+0

См. Редактирование сообщения – soandos

+0

@soandos - Я имею в виду, когда вы вызываете функцию, а не в декларации – Lee

 Смежные вопросы

  • Нет связанных вопросов^_^