
Эти форумы замечательные, и я надеюсь получить помощь с моей головной болью, связанной с выполнением процесса вручную, который, должно быть, проще автоматизировать, чем я обнаружил.
У меня есть инструмент командной строки из приложения поставщика, который будет загружать журналы для приложения. Инструменту требуется только время Unix UTC, и мне нужно запускать запланированную задачу 3-4 раза в день, чтобы загрузить журналы приложения. Я, вероятно, мог бы просто загрузить все журналы за день, но это все еще проблема, так как я не могу понять, как сделать это в скрипте. Поэтому я мог бы просто загрузить все журналы за весь день и не беспокоиться о загрузке только последних журналов.
Команда находится в скрипте PowerShell, который я запустил, он приведен ниже, но если это проще сделать с помощью пакетного файла, я мог бы это сделать. Я просто пытался избежать добавления чего-то вроде blat для отправки электронного письма, а также не мог понять, как получить результат задачи в пакетном скрипте, который мне нужно отправить в электронном письме.
"IEX" ниже — это полная команда, и именно здесь мне нужно заполнить время UTC для дня, если это проще, чем пытаться получить время с последнего времени выполнения запланированной задачи, это в любом случае самый безопасный вариант. Затем "1 1" в конце — это параметры, требуемые поставщиком, которые добавляют опции для загрузки.
Как мне заполнить текущий день и время для загрузки журнала? Если это время, например, с 12:01 утра (восточное) до 11:59 вечера (восточное), которое заполняется каждый день, это должно быть нормально?
# "iex" is an alias for the invoke-expression cmd
iex c:\path_to_exe\myprog.exe -a 1379300570 1379300570 1 1
# $? lets us know if the previous command was successful or not
# $LASTEXITCODE gives us the exit code of the last Win32 exe execution
if (!$? -OR $LASTEXITCODE -gt 0)
{
$smtpServer = "smtp.mydomain.com"
$fromAddress = "[email protected]"
$toAddress = "[email protected]"
$subject = "FAILURE"
$msgBody = "Trouble with Task"
# Use these variables if auth for the SMTP server is required!
$senderCreds = new-object System.Net.networkCredential
$senderCreds.UserName = "senderusername"
$senderCreds.Password = "senderpwd"
$smtpClient = new-object Net.Mail.SmtpClient($smtpServer)
$smtpClient.Credentials = $senderCreds
$smtpClient.Send($fromAddress,$toAddress,$subject,$msgBody)
}
решение1
Чтобы получить текущую дату/время в виде временной метки Unix, вычислите количество секунд, прошедших с началаэпоха unix:
$Now = [DateTime]::UtcNow
$Epoch = Get-Date -Year 1970 -Date 01/01
$unixTime = [int](New-TimeSpan $epoch $now).TotalSeconds
Чтобы найти его для двух конкретных моментов времени (00:01 - 23:59 предыдущего дня в примере):
$StartTime = (Get-Date "00:01:00").AddDays(-1)
$EndTime = (Get-Date "23:59:00").AddDays(-1)
$Epoch = Get-Date -Year 1970 -Date 01/01
$unixStart = [int](New-TimeSpan $epoch $StartTime).TotalSeconds
$unixEnd = [int](New-TimeSpan $epoch $EndTime).TotalSeconds
iex("c:\path_to_exe\myprog.exe -a $unixStart $unixEnd 1 1")