Ваши разрывы строк для разделения однострочных команд используют экранирование новой строки вместо встроенной функции разрыва строки конвейера…
Есть ли причина, по которой вы не делаете что-то подобное вместо этого?
if ((isPsCustomObject $a) -and (isPsCustomObject $b)) { $inequalKeys = $a.psobject.Properties + $b.psobject.Properties | ForEach-Object Name | Sort-Object -Unique | Where-Object { -not (recursiveEquality $a.$_ $b.$_) } return $inequalKeys.Count -eq 0 }