2013-09-30 4 views
0

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

[string]$name = 'Scripting Guy' 
[string]$statement = 'PowerShell rocks' 
$s = "The {0} thinks that {1}!" -f $name, $statement 
write-host $s 

производства:

The Scripting Guy thinks that PowerShell rocks! 

В то время как внутри функции он делает что-то другое:

function myFunc([string] $iname, [string] $istatement) { 
    $s = "The {0} thinks that {1}!" -f $iname, $istatement 
    write-host $s 
} 

[string]$name = 'Scripting Guy' 
[string]$statement = 'PowerShell rocks' 
myFunc($name, $statement) 

производит:

The Scripting Guy PowerShell rocks thinks that ! 

Я пытался играть с ним, чтобы узнать, что он делает:

function myFunc([string] $iname, [string] $istatement) { 
    $s = "The {0} thinks that {1}! {2} {3}" -f $iname, $istatement, "=====", $iname 
    write-host $s 
} 

[string]$name = 'Scripting Guy' 
[string]$statement = 'PowerShell rocks' 
myFunc($name, $statement) 

Это дает:

The Scripting Guy PowerShell rocks thinks that ! ===== Scripting Guy PowerShell rocks 

Так что теперь я не знаю, что думать об этом.

ответ

3

Вы должны вызвать функцию следующим образом:

myFunc -iname "Scripting Guy" -istatement "Powershell Rocks!!" 

или

myFunc $name $statement 

Текущий метод вы используете проходит один объект массива, поэтому элементы получить печатные последовательно

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