
Esses fóruns são ótimos e espero obter ajuda com uma dor de cabeça que tenho ao fazer um processo manualmente que deveria ser mais fácil de automatizar do que achei.
Eu tenho uma ferramenta de linha de comando de um aplicativo de fornecedores que fará upload de logs para o aplicativo. A ferramenta leva apenas o tempo UTC do Unix e preciso executar a tarefa agendada 3 a 4 vezes por dia para fazer upload dos logs do aplicativo. Provavelmente eu poderia simplesmente carregar todos os logs do dia, mas isso ainda é um problema, pois não consigo descobrir como fazer isso em um script. Assim, eu poderia simplesmente fazer upload de todos os logs do dia inteiro e não me preocupar em enviar apenas os logs mais recentes.
O comando está no script do PowerShell que iniciei abaixo, mas se for mais fácil fazer isso com um arquivo em lote eu poderia, só estava tentando evitar adicionar algo como blat para enviar o e-mail e também não consegui descobrir como para obter o resultado da tarefa em um script em lote que é o que preciso enviar por email.
O "IEX" abaixo é o comando completo, e é aí que preciso preencher o horário UTC do dia, se isso for mais fácil do que tentar obter o horário da última vez que a tarefa agendada foi executada, é a opção mais segura de qualquer maneira. Em seguida, o "1 1" no final são os parâmetros exigidos pelo fornecedor e que adicionam opções para o upload.
Como posso preencher o dia e a hora atuais para o upload do log? Se for o horário das 12h01 (leste) às 23h59 (leste) que é preenchido todos os dias, tudo bem?
# "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)
}
Responder1
Para obter a data/hora atual como um carimbo de data/hora Unix, calcule o número de segundos passados desde o início doépoca 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 (00h01 - 23h59 do 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")