Programar Tarefa 2008 R2 - a linha cmd requer tempo unix utc - como obtê-lo dinamicamente?

1

Esses fóruns são ótimos, e eu espero conseguir alguma ajuda com uma dor de cabeça que eu tenho em fazer um processo manualmente, que deve ser mais fácil de automatizar do que eu acho que é.

Eu tenho uma ferramenta de linha de comando de um aplicativo de fornecedores que fará upload de registros para o aplicativo. A ferramenta só leva tempo Unix UTC embora, e eu preciso executar a tarefa agendada 3 a 4 vezes por dia para carregar os logs do aplicativo. Eu provavelmente poderia apenas fazer o upload de todos os logs do dia, mas isso ainda é um problema, pois não consigo descobrir como fazer isso em um script. Por isso, posso carregar todos os registos para o dia inteiro e não me preocupar em apenas carregar os registos mais recentes.

O comando está no script powershell que eu iniciei, que está abaixo, mas se é mais fácil fazer isso com um arquivo em lote que eu poderia, eu estava tentando evitar adicionar algo como blat para enviar o email e também não consegui descobrir como obter o resultado da tarefa em um script em lote, que é o que preciso enviar no e-mail.

O "IEX" abaixo é o comando completo, e é aí que preciso preencher a hora UTC do dia, se isso for mais fácil do que tentar obter o tempo da última vez que a tarefa agendada foi executada, é a opção mais segura. Em seguida, o "1 1" no final são parâmetros que o fornecedor exige que adicionam opções para o upload.

Como posso preencher o dia e a hora atuais para o upload do log? Se é o horário, como 12:01 (leste) às 23:59 (leste), que é preenchido todos os dias, o que deve ser bom?

# "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)
}
    
por Jakes 16.09.2013 / 05:08

1 resposta

4

Para obter a data / hora atual como data e hora do Unix, calcule o número de segundos decorridos desde o início da época do unix :

$Now   = [DateTime]::UtcNow
$Epoch = Get-Date -Year 1970 -Date 01/01

$unixTime = [int](New-TimeSpan $epoch $now).TotalSeconds

Para encontrá-lo para duas instâncias específicas no tempo (00:01 - 23:59 no dia anterior no exemplo):

$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")
    
por 05.10.2013 / 18:19