PowerShell添加其他值以返回函数

时间:2017-03-02 10:38:37

标签: function powershell return

PowerShell似乎在函数的返回值中添加了一个额外的变量。

函数subfoo2本身提供正确的值,但只要PowerShell跳回到我调用函数的位置(在foo1中),value就包含另一个变量的值({ {1}})

(看看代码中的评论)

$msg

Realcode:

writeMessageLog($msg){
   ...
   Add-Content $msg
   ...
}
   subfoo2{
   writeMessageLog($msg)
   return $UserArrayWithValues #During Debug, $Array is fine (1)
}
   foo1{
   $var = subfoo2 $UserArray # $var has now the value of $msg and $UserArrayWithValues (2)
   #do something with var
}

我是否使用了错误的函数/返回值?什么可能导致这种行为?如果我在函数中调用函数,这是一个问题吗?

如果我删除function WriteLog { param ( [string] $severity , $msgNumber, [string] $msg ) ... $msgOut = $date + ... + $msg Add-Content $msgout ( $msgOut ) ... } function getFeatures { writelog 'I' 1002 $true $true "Load Features" $Features = importCsv -pPath $FeatureDefintionFilePath Writelog 'I' 1000 $true $true "Features Loaded" return $Features # $Features has value as expected (1) } function GetUserFeatures ($pUserObject) { $SfBFeatures = "" $SfBFeatures = getFeatures #SfBFeaures has Value of $msg and $Features (2) ... } 中的$msgOut = $date + ... + $msg,则值很好。

我现在很迷茫,并且不知道这是从哪里来的。欢迎任何想法。

2 个答案:

答案 0 :(得分:1)

这就是powershell的工作原理,基本上你打印出来的所有内容都将作为函数输出返回。所以不要输出额外的东西。要强制某些东西不输出你可以做的东西:

$null = some-command_that_outputs_unwanted_things

因为每个人都对Out-Null着迷,所以我会添加link来展示其他几种方法。

答案 1 :(得分:1)

在一个函数中,您未分配或管道到消费cmdlet的所有内容都将被放入管道并从函数返回 - 即使您没有明确return它。事实上,return关键字在PowerShell中不起作用,因此以下内容是等效的:

function Test-Func
{
   "Hello World"
}

function Test-Func
{
   return "Hello World"
}

所以看起来你的writeMessageLog会在管道上放置任何内容,因此你必须将值赋给任何东西:

$notUsed = writeMessageLog($msg)

或(首选)将其传递给Out-Null cmdlet:

writeMessageLog($msg) | Out-Null