首页 > 解决方案 > 如何将项目添加到函数中的数组作为Powershell上的脚本变量?

问题描述

我正在尝试将项目添加到我在函数之外声明的数组变量。

这是我的代码以非常简化的方式的想法:

function Test($NAME, $SPEED){
$fName = "testName"
$fSpeed = 100

if($status = ($fName -eq $NAME) -and ($fSpeed -eq $SPEED))
{}

else{
if($fName -ne $NAME)
{$errorMessages += "The name is not" + $NAME}

if($fSpeed -ne $SPEED)
{$errorMessages += "The speed is not" + $SPEED}
}
return $status
}

$script:errorMessages=@()
$result=@()

$result += Test -NAME "alice" -SPEED "100"
$result += Test -NAME "bob" -SPEED "90"
#result is an array of booleans that I need later on

$errorMessages

当我显示 $errorMessages 时,这是我想要的预期输出:

The name is not alice
The name is not bob
The speed is not 90

但是,当我尝试在函数之外显示变量时,甚至在“else”块之外,我什么也没有打印出来。如何正确地将错误消息添加到数组中?

标签: powershell

解决方案


您想errorMessages通过脚本范围调用。因此,您必须在函数中使用$script:errorMessage(而不是)。$errorMessage

function Test($NAME, $SPEED) {
   $fName = "testName"
   $fSpeed = 100
   $status = ($fName -eq $NAME) -and ($fSpeed -eq $SPEED)
   if (!$status) { 

       if ($fName -ne $NAME) { 
           $script:errorMessages += "The name is not" + $NAME 
       }

       if ($fSpeed -ne $SPEED) { 
           $script:errorMessages += "The speed is not" + $SPEED 
       }
   }
   $status
}

$errorMessages = @()
$result = @()

$result += Test -NAME "alice" -SPEED "100"
$result += Test -NAME "bob" -SPEED "90"
#result is an array of booleans that I need later on

$errorMessages

现在你得到了预期的输出:

The name is notalice
The name is notbob
The speed is not90

还要注意returnPowerShell -> stackoverflow 答案中的语句

希望有帮助


推荐阅读