Конвейер утверждений Powershell возвращает не массив - PullRequest
1 голос
/ 20 июня 2019

Справочная информация:

Я пытаюсь отфильтровать определенную ветку GIT из моих локальных веток.Поэтому я использую git branch --all.

Вопрос, специфичный для Powershell:

Я выполняю конвейерную фильтрацию через Where-Object и хочу убедиться, что только один объект, а не массив возвращается изтрубопровод.

У меня есть например:

  $branch = Invoke-Expression "git branch --all" | % { $_.Trim('*').Trim() | ? { $_ -match "MySpecificBranchRegex" }

Если я испорчу мой специальный фильтр, регулярное выражение $branch может быть массивом, а не string.

Есть лиэлегантный способ обеспечить возвращение только одной строки.Возможные решения, которые мне не нравятся:

  • Вызов Select-Object -First 1 в конце конвейера
  • Выполните, если '$ arr.GetType (). BaseType.Name -eq "Array"`

Thx.

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Ну, Select-Object -First 1 - элегантное решение imho, но вы можете изменить его, заставив всегда возвращать массив:

$branches = @(Invoke-Expression "git branch --all" | % { $_.Trim('*').Trim() | ? { $_ -match "MySpecificBranchRegex" })

if ($branches.Count -ne 1)
{
    throw "Something went wrong..."
}
0 голосов
/ 20 июня 2019
$result = git branch --all | where { $_ -match 'MySpecificBranchRegex' } 
$result.count

Я бы не стал использовать findstr (даже с кавычками) вместо where. / I не чувствителен к регистру.

$result = git branch --all | findstr /i MySpecificBranchRegex
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...