В моем скрипте ниже приведена функция, которая возвращает строку как "* .csproj", "* .vbproj", "* .sln". Предполагая, что я всегда передаю строку типа «csproj, vbproj, sln» в параметр $ filter:
Function Create-Filter($filter)
{
$str = $filter.Split(',') | ForEach-Object {"""*.$($_.Trim())"""}
$str = $str -join ', '
[string]$str
return
}
Позже в моем сценарии я выполняю:
$filter = Create-Filter($filter)
$myFiles = Get-ChildItem $source -Include $filter -Recurse
Но $ myFiles пуст, Get-ChildItem ничего не возвращает. Я знаю, что проблема заключается в параметре $ filter при передаче в Get-ChildItem, но я не знаю, как решить эту проблему.
В любом случае, с консоли powershell, если я сделаю это ниже, то это работает:
PS > $filter = "*.csproj", "*.vbproj", "*.sln"
PS > Get-ChildItem "D:\Path\To\My\Root\Folder" -Include $filter -Recurse
Так что я делаю не так?
Моя версия PowerShell, как показано на рисунке ниже:
ОБНОВЛЕНИЕ (РЕШЕНИЕ) :
Решение, предложенное AdminOfThings, работает.
В моем случае применение AdminOfThings не работало, потому что я допустил ошибку в своем коде. Я присваивал значение, возвращаемое функцией Create-Filter, той же переменной, что и передаваемый в качестве аргумента, как показано ниже:
$filter = Create-Filter ($filter)
Get-ChildItem "D:\Path\To\My\Root\Folder" -Include $filter -Recurse
Для того, чтобы заставить это работать, я сделал ниже:
$formattedfilter = Create-Filter ($filter)
Get-ChildItem "D:\Path\To\My\Root\Folder" -Include $formattedfilter -Recurse
... то есть, используя другую переменную для присвоения возвращаемого значения по функции, вместо того, чтобы использовать то же, что я передавал в качестве аргумента.