Powershell 函数未按预期执行

Powershell function not executing as expected

我有以下函数显示 array 中的任何单词是否包含在 string 中:

function AnyOf ([string] $line, [string[]] $list)
{
    Write-Output "AnyOf!"
    foreach($item in $list)
    {   
        if($line.Contains($item))
        {
            Write-Output "Found: $item" 
            return $true
        }
    }
    return $false
}

这是为了测试它:

function main
{   
    [string[]]$a = @("user1", "user2")
    $str = "user1 and user2"
    $res = AnyOf($str, $a)
}

我希望它能看到 user1user2 都被打印出来,但什么也没有打印出来。似乎该函数没有被调用,因为 Write-Output "AnyOf!" 从未执行过。

然而,当我执行时:

AnyOf($str, $a)

而不是:

$res = AnyOf($str, $a)

我可以看到调用了函数,但迭代似乎没有发生...我做错了什么?

几件事,

首先,powershell 中的函数不是使用 () 调用的,您可以将函数调用为

AnyOf $str $a

标准约定是$<<nameOfFunction>> <<param1>> <<param2>>

其次,您的输出在 $res 中被捕获,因此不会打印到屏幕上,如果您在 main function 的末尾添加 $res,它将输出。

所以你的主要功能变成了:

function main
{   
    [string[]]$a = @("user1", "user2")
    $str = "user1 and user2"
    $res = AnyOf $str $a
    $res #or just don't assign it to $res..
}


#to call main:
main

Output:

AnyOf!
Found: user1
True

正如您在上面的输出中看到的,它永远不会找到 User2,因为一旦找到匹配项,您就使用 return $true,退出函数。

另一件需要注意的事情是,当您 return $false$true 这些实际上成为输出流的一部分,这可能不是您想要的,因为它可能导致意外行为。