我希望从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行文本字符串中确定服务器名称。
由于
答案 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