如何在PowerShell中进行条件替换?

时间:2018-11-01 12:05:40

标签: powershell

Powershell新手寻求帮助。

我有一个powershell脚本,它可以将文本文件中的优先级值更改为50:

if ($line.contains("Priority") ) 
{
   $LastComma = $line.LastIndexOf(",") +1
   $N = $line.Substring(0,$LastComma)
   $N = $N + "50"
   $lines[$counter] = $N

} 

这可以正常工作,并且完全可以实现我想要的功能,但是我现在需要对其进行修改,以便在还存在以下行的情况下将优先级值更改为45:

Provider = XYZ

如果此提供者值不是XYZ,则所有优先级值都将像以前一样设置为50。任何人都对如何实现此目标有任何建议?

谢谢

2 个答案:

答案 0 :(得分:0)

请下次尝试提供working example

没有提供比提供的更多信息,这是解决方案的草案:

foreach ($line in $lines) {
  $value = "XYZ"
  $check = $false
  if ($line.contains("Provider = $value")) {
    $check = $true
  }
  if ($line.contains("Priority")) {
    if ($check) {
      $priority = 45
    } else {
      $priority = 50
    }
    $LastComma = $line.LastIndexOf(",") +1
    $N = $line.Substring(0,$LastComma)
    $N = $N + "$priority"
    $lines[$counter] = $N
  }
}

备注:这是假设Provider标签位于Priority标签之前。

答案 1 :(得分:0)

此示例说明了使用Powershell的几个概念:

  1. 使用正则表达式匹配每一行

  2. 使用正则表达式替换每一行

  3. 使用switch语句

这是一个测试文件:

Set-Content test.txt "Provider=ABC,Priority=3                                                            
Provider=DEF,Priority=4
Not a provider                                                                                                                        
Provider=XYZ,Priority=5"

您可以使用逐行转换测试文件 switch声明(感谢@ TheIncorrigible1)

switch -Regex -File test.txt
{                                                                                                                                        
   'Provider=XYZ.+Priority='
   {
       $_ -replace "Priority=\d+","Priority=45"
       continue
   }                                                                                                                                    

   'Priority='                                                                                                                          
   {                                                                                                                                    
       $_ -replace "Priority=\d+","Priority=50"
       continue
   }                                                                                                                                    

   default                                                                                                                              
   {                                                                                                                                    
       $_
       continue
   }                                                                                                                                    
}