Назад | Перейти на главную страницу

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

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

У меня есть инструмент командной строки из приложения поставщиков, который загружает журналы для приложения. Однако этот инструмент использует только время Unix в формате UTC, и мне нужно запускать запланированную задачу 3-4 раза в день для загрузки журналов приложения. Возможно, я мог бы просто загрузить все журналы за день, но это все еще проблема, поскольку я не могу понять, как это сделать в скрипте. Таким образом, я мог просто загрузить все журналы за весь день и не беспокоиться о загрузке только последних журналов.

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

«IEX» ниже - это полная команда, и именно здесь мне нужно указать время в формате UTC для дня, если это проще, чем пытаться получить время с последнего запуска запланированной задачи, в любом случае это самый безопасный вариант. Затем «1 1» в конце - это параметры, которые требует поставщик, которые добавляют параметры для загрузки.

Как я могу указать текущий день и время для загрузки журнала? Если это время, такое как 12:01 (восточное время) до 23: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 = "sender@mydomain.com"
    $toAddress = "recipient@mydomain.com"
    $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)
}

Чтобы получить текущую дату / время как отметку времени 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")