在功能上的PowerShell -match - 返回时获得额外的真/假(Powershell -

2019-10-21 07:58发布

为什么我得到的提取物“真”或“假”(当所有我想回去只是邮政编码)这个函数的结果:

Function GetZipCodeFromKeyword([String] $keyword)
{
   $pattern = "\d{5}"
   $keyword -match $pattern 
   $returnZipcode = "ERROR" 
   #Write-Host "GetZipCodeFromKeyword RegEx `$Matches.Count=$($Matches.Count)" 
   if ($Matches.Count -gt 0) 
      {
         $returnZipcode = $Matches[0] 
      }

   Write-Host "`$returnZipcode=$returnZipcode"
   return $returnZipcode 
}

cls
$testKeyword = "Somewhere in 77562 Texas "
$zipcode = GetZipCodeFromKeyword $testKeyword 
Write-Host "Zip='$zipcode' from keyword=$testKeyword" 

Write-Host " "
$testKeyword = "Somewhere in Dallas Texas "
$zipcode = GetZipCodeFromKeyword $testKeyword 
Write-Host "Zip='$zipcode' from keyword=$testKeyword" 

运行时间结果:

$returnZipcode=77562
Zip='True 77562' from keyword=Somewhere in 77562 Texas 

$returnZipcode=12345
Zip='False 12345' from keyword=Somewhere in Dallas Texas 

Answer 1:

该生产线$keyword -match $pattern返回$True ,如果该模式匹配, $False否则。 既然你没有做任何其他与该值是从功能输出。

尝试:

Function GetZipCodeFromKeyword([String] $keyword)
{
   $pattern = "\d{5}"
   $returnZipcode = "ERROR" 
   if ($keyword -match $pattern)
      {
         $returnZipcode = $Matches[0] 
      }

   Write-Host "`$returnZipcode=$returnZipcode"
   return $returnZipcode 
}

从功能输出的任何值变为结果是否具有显式地写它的部分Write-Output或返回它return ,或者只是含蓄地有一个管道输出的结果。

如果你不想管道输出到输出功能将其分配给一个变量。 例如

$m = $keyword -match $pattern

或重定向它:

$keyword -match $pattern >$null

要么:

$keyword -match $pattern | Out-Null

或将其发送到另一个输出流:

Write-Verbose ($keyword -match $pattern)

这让你适用范围,使其通过设置可见$VerbosePreference='Continue' (或让你的功能为cmdlet,并使用-Verbose调用它时标志)。 尽管在这最后的情况下,我仍然把它分配给一个变量第一:

$m = $keyword -match $pattern
Write-Verbose "GetZipCodeFromKeyword RegEx match: $m" 


文章来源: Powershell -match in function - gets extra true/false when returned