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
,则值很好。
我现在很迷茫,并且不知道这是从哪里来的。欢迎任何想法。
答案 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