Печать отметки времени остановки и запуска служб в файл .txt - PullRequest
1 голос
/ 24 июня 2019

Мне нужна метка времени, когда службы останавливаются / перезапускаются, а затем выводятся в файл. Файл станет прикрепленным и отправлен в службу поддержки.

Я не могу вывести в файл, так как мой запрос ниже получил ошибку.

$hostname = $env:computername
$smtpServer = 'smtpServer' 
$from = "from" 
$recipients = 'recipients'
$Subject = "Services Restarted Successfully on $hostname $ipv4" 
$body = "This mail confirms that the service on $hostname $ipv4 is now running." 
$ipv4 = (Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString
$natip = Invoke-WebRequest ifconfig.me
$timestamp = (Get-Date)
$output = D:\Testing\Restart.txt
$attachment = $output
$service = 'Apache' 

Остановить обслуживание

Stop-Service -name $service -Verbose 

do { 
    Start-sleep -s 5 | Write-Output "$timestamp Services is stopped" | Out-file $output
    }  
        until ((get-service $service).Status -eq 'Stopped') 

Запустить сервис

    start-Service -name $service -Verbose 
do { 
    Start-sleep -s 5 | Write-Output "$timestamp Services is restarted" | Out-file $output
    }  
        until ((get-service $service).Status -eq 'Running') 

Отправить подтверждение успешного перезапуска службы

Start-Sleep -s 5 

Send-MailMessage -To $recipients -Subject $Subject -Body $body ((gsv Apache) | out-string) -From $from -SmtpServer $smtpServer -Attachments $attachment

1 Ответ

1 голос
/ 24 июня 2019

Как указано в комментариях выше, измените код на

Stop-Service -name $service -Verbose
do { 
      Start-sleep -s 5 
      Write-Output "$timestamp Services is stopped" | Out-file $output 
  } until ((get-service $service).Status -eq 'Stopped')

На самом деле ваш Start-Sleep вывод вызовов cmledt отправляется в конвейер (Start-sleep - s 5 |...).Я предполагаю, что Start-sleep ничего не возвращает, поэтому ничего не отправляется в конвейер.Исходя из этого Write-Output не называется.

Другое предположение: назначение на $output не выполняется, поскольку ваш путь не является строкой, Powershell может интерпретировать назначение в командном режиме.Измените его на:

  $output = "D:\Testing\Restart.txt" 
...