Powershell:从String中提取第二行

时间:2013-12-23 23:09:25

标签: powershell substring

我希望从powershell中的sting中选择第三行文本。

我的字符串来自电子邮件正文:

  $olFolderInbox = 6
  $outlook = new-object -com outlook.application;
  $ns = $outlook.GetNameSpace("MAPI");
  $inbox = $ns.GetDefaultFolder($olFolderInbox)

   foreach ($email in $inbox.items){

         if($email.Subject -eq "PASSED") {

         $Body = $email.Body 

         write-host  $emailSentOn
         write-host  $email.Body 

        } 
 }

$ Body字符串的格式如下:

<BLANK LINE>
Queue Cleared!
Server Name
Username

我希望从4行文本字符串中确定服务器名称。

由于

4 个答案:

答案 0 :(得分:2)

假设格式一致

if ($Body[2] -match '(?m:^Server (?<server>\w+))' ) {
    # do something with $matches.server
}

答案 1 :(得分:1)

使用多行正则表达式:

$body = @"

Queue Cleared!
Server Name
Username
"@

#$regex = '(?ms).+?$(.+)?$.+?$.+' #Capture second line.
$regex = '(?ms).+?$.+?$(.+)?$.+' #Capture third line.
$body -replace $regex,'$1'

Server Name

每个。+?$代表身体的一条线。第三行被捕获并用于-replace操作。

标题与帖子中的描述(第二行与第三行)不完全匹配,所以我将两者都包括在内。

答案 2 :(得分:0)

您可以使用-split运算符分割字符串:

$foo -split "`n"

你会得到一个阵列。然后,您可以使用索引从该数组中获取元素:

($foo -split "`r?`n")[2]

答案 3 :(得分:0)

这将仅将数组的第3项(服务器名称)发送到Body。计数从零开始,这就是为什么[2] =第三。

 $Body[2] = $email.Body 

身体结果

Server Name