Как передать пустой массив внутрь функции в Powershell?
Есть блок кода который раньше был в основном теле скрипта, потом я выделил его в отдельную функцию в этом же скрипте.
Функция принимает в качестве аргумента несколько переменных в том числе массив.
Внутри функции есть определенная логика завязанная в том числе и на количестве элементов массива и если массив пустой то внутри функции есть определенные действия при таком условии.
Когда вся эта логика была в основной части скрипта - все было норм.
Когда я выделил эту логику в отдельную функцию, то столкнулся с проблемой при передачи массива если он пустой.
Возникают ошибки: Не удается привязать аргумент к параметру "myArray", так как он представляет собой пустой массив.
либо Не удается привязать аргумент к параметру "myArray", так как он имеет значение NULL.
На данный момент, чтобы обойти эту ситуацию то мне пришлось добавить логику, чтобы если массив был пустой - в него добавлялась цифра -1 и потом внутри функции также необходимо это учитывать.
Либо часть логики функции снова выносить в основную часть скрипта.
Ни то ни другое решение, на мой взгляд, не является "элегантным".
Как передать пустой массив внутрь функции в Powershell чтобы при этом не возникало ошибок?
MaxKozlov, по мере знаний и "визуальной эстетики/чутья" пытаюсь отрефакторить этот код https://gist.github.com/Drovosek01/9d47068365ea0bc...
Основной код скрипта - блок try внизу файла и уже внутри try вызываются все остальные функции
.
Мне кажется, что условия if с последующими write-host внутри блока try выглядят не очень красиво, я выделил их в функцию
function HandleFoundPatternsIndexes {
param (
[Parameter(Mandatory)]
[string[]]$patterns,
[Parameter(Mandatory)]
[int[]]$foundPatternsIndexes
)
[string]$notFoundPatterns = ''
# fix is ($foundPatternsIndexes.Count -eq 0 -OR ($foundPatternsIndexes.Count -eq 1 -AND $foundPatternsIndexes[0] -eq -1))
if ($foundPatternsIndexes.Count -eq 0) {
Write-Host "No patterns was found"
}
elseif ($foundPatternsIndexes.Count -eq $patterns.Count) {
Write-Host "All hex patterns found and replaced successfully in $filePathArg"
}
else {
[int[]]$notFoundPatternsIndexes = (0..$patterns.Count).Where({$_ -notin $foundPatternsIndexes})
for ($i = 0; $i -lt $notFoundPatternsIndexes.Count; $i++) {
$notFoundPatterns += ' ' + $patterns[$notFoundPatternsIndexes[$i]]
}
Write-Host "Hex patterns" $notFoundPatterns.Trim() "- not found, but other given patterns found and replaced successfully in $filePathArg"
}
}
а в блоке try на их месте выполняю HandleFoundPatternsIndexes $patterns $foundPatternsIndexes и при этом получаю указанные выше ошибки