我在服務器上的某個位置有一個文本文件。該文件包含一個字符串值和一個時間戳。 我想用PowerShell替換這個特定的行和最新的時間戳。使用PowerShell替換文本文件中的字符串
下面是記事本文件中的數據:
Test Service|05-09-2017 01-09-41
這裏2017年5月9日41年1月9日是MM-DD-YYYY HH-MM-SS,我想與最新的替換此行時間戳。
所以,如果兩分鐘後它應該是
Test Service|05-09-2017 01-11-41
下面是我在做什麼:
$ReplaceString = "$ServiceName + "|" + (Get-Date).ToString('MM-dd-yyyy HH-mm-ss')"
Get-Content Path -Replace($ServiceName + "|" + $StringLastRunTime,$ReplaceString) | Set-Content Path
但它不會產生預期的輸出。
UPDATE
對不起,我不是符合要求
我想監控安裝使用PowerShell腳本在服務器上的關鍵服務,以便清楚。我在一個文本文件中列出了要監視的所有服務,並且該腳本中提到了該路徑。該腳本每5分鐘執行一次,如果未安裝服務或停止服務,則會生成電子郵件通知。爲了防止電子郵件氾濫,我正考慮使用文本文件中的服務名稱來更新時間戳。 因此,如果我發現一個服務處於停止模式或未安裝,我將發送通知並更新最後發送時間的時間戳。我有一個重發間隔,每隔五分鐘檢查一次,如果間隔時間已過,我必須再次發送通知,我想更新時間戳。
代碼(我已刪除的電子郵件發送部分,使其不太複雜):
$ServicesList = Get-Content E:\ServiceReports\Services.txt
$ResendEmailInterval = 10 #In Minutes
foreach ($Service in $ServicesList) {
$ServiceName = $Service
$Service = Get-Service -Display $Service -ErrorAction SilentlyContinue
$serviceDisplayName = $Service.displayname
if (-Not $Service) {
#Service is not installed. So need to send an email alert and update the timestamp.
Write-Host $ServiceName.IndexOf("|")
if ($ServiceName.IndexOf("|") -gt 0) {
$ServiceName,$StringLastRunTime = $ServiceName.Split('|')
$LastRunTime = [datetime]::ParseExact($StringLastRunTime, "MM-dd-yyyy HH-mm-ss", $null)
Write-Host $ServiceName
Write-Host $LastRunTime
Write-Host (Get-Date).AddMinutes($ResendEmailInterval)
if ($LastRunTime -lt (Get-Date).AddMinutes($ResendEmailInterval)) {
Write-Host "time to run"
$ReplaceString = $ServiceName + "|" + (Get-Date).ToString('MM-dd-yyyy HH-mm-ss')
Write-Host $ServiceName"|"$StringLastRunTime
Write-Host $ReplaceString
#$ServiceName = "Test Service";
$ReplaceString = "{0}|{1}" -f $ServiceName, (Get-Date).ToString('MM-dd-yyyy HH-mm-ss');
(Get-Content -Path $ServicesListPath) -replace ('([^|]+).*', $ReplaceString) | Set-Content $ServicesListPath;
$ServicesList -replace ($ServiceName + "|" + $StringLastRunTime, $ReplaceString) | Set-Content $ServicesListPath
}
} else {
$ReplaceString = $ServiceName + "|" + (Get-Date).ToString('MM-dd-yyyy HH-mm-ss')
$ServicesList -replace ($ServiceName, $ReplaceString) | Set-Content $ServicesListPath
$i = $i+1;
}
} else {
if ($Service.Status -eq "Stopped") {
Write-Host "Service is stopped"
#Time to send email and update the time stamp
$i = $i+1;
} else {
#Write-Host "Service is running. Nothing to do."
}
}
}
這是由什麼產生的實際輸出? – Seth
你可以粘貼整個腳本嗎? – 30000MONKEYS
@ 30000MONKEYS更新 –