Недавно у меня была эта проблема.После многочасовых исследований я, наконец, обнаружил, что проблема заключается в использовании той же переменной для:
- Сохранения значения, возвращаемого функцией
- Передача его в качестве параметра вfunction
Таким образом, учитывается следующая функция:
Function Create-Filter($filter)
{
$filter.Split(',') | ForEach-Object {"*.$($_.Trim())"}
return
}
(Вышеупомянутая функция получает строковую переменную, такую как "csproj, vbproj", и преобразует ее в * .csproj * .vbproj.)
... приведенный ниже код не работает, переменная $ filter, используемая для параметра -Include, не любит 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 это не работает, если используется одна и та же переменная?