Powershell断言管道返回的不是数组

时间:2019-06-20 17:01:03

标签: powershell

背景:

我正在尝试从本地分支过滤特定的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”`执行

谢谢。

2 个答案:

答案 0 :(得分:2)

好吧Select-Object -First 1是恕我直言的完美解决方案,但是您可以通过强制其始终返回数组来扭转它:

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

if ($branches.Count -ne 1)
{
    throw "Something went wrong..."
}

答案 1 :(得分:0)

$result = git branch --all | where { $_ -match 'MySpecificBranchRegex' } 
$result.count

我不会在上面使用findstr(甚至带引号)而不是在哪里。 / i不区分大小写。

$result = git branch --all | findstr /i MySpecificBranchRegex