我希望能够减少脚本的输出,然后如果可能的话,查询结束代码,以便在结束代码正确时写入用户。
这是我目前使用的代码:
foreach ($line in $contentt) {
Write-Host $line -BackgroundColor DarkGray -ForegroundColor Black
$date = Get-Date -format "MMM dd"
$yday = (Get-Date).AddDays(-1).ToString("MMM dd")
$output = Get-Content -Path "$line" |
Select-String -Pattern $date -SimpleMatch |
Select-String -Pattern "End Code"
$youtput = Get-Content -Path "$line" |
Select-String -Pattern $yday -SimpleMatch |
Select-String -Pattern "End Code"
if ($output -eq $null) {
Write-Host "No content in the file for today"
} else {
Write-Host $output
}
if ($youtput -eq $null) {
Write-Host "No content in the file for yesterday"
} else {
Write-Host $youtput
}
}
这是我目前正在接收的输出:
Jan 26, 2015 7:34:37 AM JobName - ID = 15 , End Code = 0 , time (ms) = 2046
我希望能够将输出修剪为:
EndCode = 0
答案 0 :(得分:2)
你的朋友是Substring()和IndexOf()的混合:
$a = "Jan 26, 2015 7:34:37 AM JobName - ID = 15 , End Code = 0 , time (ms) = 2046"
$a.Substring($a.IndexOf("End"),$a.IndexOf(" , time") - $a.IndexOf("End"))
它产生End Code = 0
答案 1 :(得分:1)
使用正则表达式替换:
$output -replace '.*(End Code = \d+).*', '$1'
或者,因为您已经在使用Select-String
:
... | Select-String -Pattern '(End Code = \d+)' | ForEach-Object {
$_.Matches.Groups[0].Value
}
如果字符串在=
之前和/或之后包含多个空格,则将分组表达式更改为(End Code += +\d+)
。