2013-12-23 51 views
0

我希望從PowerShell中選擇第三行文本。Powershell:從字符串中提取第二行

我已經從電子郵件的身體來的字符串:

$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 

     } 
} 

的$車身字符串格式如下所示:

<BLANK LINE> 
Queue Cleared! 
Server Name 
Username 

我想從4確切的服務器名稱行文本字符串。

感謝

回答

0

可以使用-split運營商分割字符串:

$foo -split "`n" 

你會得到一個數組回來。然後你可以從這個數組索引使用的元素:

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

輝煌!坦克你的快速反應! :) –

1

使用多行正則表達式:?

$body = @" 

Queue Cleared! 
Server Name 
Username 
"@ 

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

Server Name 

每個+ $代表身體的一行。第三行被捕獲並用於替換操作。

標題與帖子中的描述(第二行vs第三行)不完全匹配,所以我包含了這兩個。

2

假設格式保持一致

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

這將只發送陣列(服務器名)的第3項的身體。計數從零開始,所以這就是爲什麼[2] = 3。

$Body[2] = $email.Body 

車身結果

Server Name