Mam plik tekstowy w pewnym miejscu na serwerze. Ten plik zawiera wartość ciągu i znacznik czasu. Chcę zastąpić tę konkretną linię najnowszym znacznikiem czasu przy użyciu PowerShell.Zamień ciąg w pliku tekstowym przy użyciu PowerShell
Poniżej dane plik Notatnika za:
Test Service|05-09-2017 01-09-41
Tutaj 09/05/2017 09.1.41 jest MM-dd-rrrr GG-mm-ss i chcę zastąpić ten zgodnie z najnowszymi znak czasu.
Tak więc, jeśli po dwóch minutach powinno być
Test Service|05-09-2017 01-11-41
Oto co robię:
$ReplaceString = "$ServiceName + "|" + (Get-Date).ToString('MM-dd-yyyy HH-mm-ss')"
Get-Content Path -Replace($ServiceName + "|" + $StringLastRunTime,$ReplaceString) | Set-Content Path
Ale to nie generuje oczekiwany wynik.
UPDATE
Przepraszam za nie jest tak oczywiste wymagania
chcę do monitorowania krytycznych usług zainstalowanych na serwerze za pomocą skryptu PowerShell. Wymieniłem wszystkie usługi, które mają być monitorowane w jednym pliku tekstowym i ta ścieżka została wymieniona w skrypcie. Ten skrypt będzie wykonywany co 5 minut, a jeśli usługa nie zostanie zainstalowana lub usługa zostanie zatrzymana, wygeneruje powiadomienie e-mail. Aby zapobiec powodzeniu wiadomości e-mail, myślę o aktualizacji znacznika czasu z nazwą usługi w pliku tekstowym. Tak więc, jeśli znajdę jedną usługę w trybie zatrzymania lub nie zainstalowałem, wyślę powiadomienie i zaktualizuję sygnaturę czasową ostatniego wysłania. Mam interwał ponownego wysłania, który będzie sprawdzany co pięć minut i jeśli ten interwał zostanie miniony, muszę ponownie wysłać powiadomienie i chcę zaktualizować znacznik czasu.
Code (usunąłem część wysyłania wiadomości e-mail, aby uczynić go mniej skomplikowane):
$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."
}
}
}
Jaki jest faktyczny wynik, który jest generowany przez to? – Seth
Czy możesz wkleić cały skrypt? – 30000MONKEYS
@ 30000MONKEYS zaktualizowano –