在 powershell 中调用函数时使用相同的变量作为参数和存储

Using the same variable as parameter and storage when calling a function in powershell

最近我遇到了 问题。调查了很多小时后,我终于发现问题出在对以下变量使用相同的变量:

所以考虑到以下功能:

Function Create-Filter($filter)
{    
    $filter.Split(',') | ForEach-Object {"*.$($_.Trim())"}
    return
}

(以上函数获取一个字符串变量如"csproj, vbproj"并转换成*.csproj *.vbproj)

...下面的代码不起作用,用于 -Include 参数的变量 $filter 不喜欢 Get-ChildItem 并且它不返回任何内容:

$filter = "csproj, vbproj"
$filter = Create-Filter ($filter)
Get-ChildItem "D:\Path\To\My\Root\Folder" -Include $filter -Recurse

下面的一个是使用不同的变量来存储并将其作为参数传递:

$filter = "csproj, vbproj"  
$formattedfilter = Create-Filter ($filter)
Get-ChildItem "D:\Path\To\My\Root\Folder" -Include $formattedfilter -Recurse

...现在 Get-ChildItem 起作用了。

在其他语言中,可以使用相同的变量将其作为参数传递并存储函数返回的值。那么你能解释一下为什么在 powershell 中如果使用相同的变量这不起作用吗?

不确定为什么您的代码不起作用,因为您的 return 是多余的,结果放在输出流中。

所以相同的代码但是重构了:

function New-Filter
{    
    param (
        [Parameter(Mandatory=$true)]
        [String[]] $filter
    )

    return $filter.Split(',') | ForEach-Object {"*.$($_.Trim())"}
}

$filter = @("csproj, vbproj")
$filter = New-Filter $filter
Get-ChildItem -Path "D:\Path\To\My\Root\Folder" -Include $filter -Recurse