Schedule Task 2008 R2 - строка cmd требует времени unix utc - как получить его динамически?

Schedule Task 2008 R2 - строка cmd требует времени unix utc - как получить его динамически?

Эти форумы замечательные, и я надеюсь получить помощь с моей головной болью, связанной с выполнением процесса вручную, который, должно быть, проще автоматизировать, чем я обнаружил.

У меня есть инструмент командной строки из приложения поставщика, который будет загружать журналы для приложения. Инструменту требуется только время 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")

Связанный контент