
Diese Foren sind großartig und ich hoffe, dass ich dort Hilfe bei den Kopfschmerzen bekomme, die mir die manuelle Durchführung eines Prozesses bereitet, der eigentlich leichter zu automatisieren sein sollte, als ich festgestellt habe.
Ich habe ein Befehlszeilentool von einer Anbieter-App, das Protokolle für die App hochlädt. Das Tool benötigt jedoch nur Unix-UTC-Zeit und ich muss die geplante Aufgabe drei- bis viermal am Tag ausführen, um die App-Protokolle hochzuladen. Ich könnte wahrscheinlich einfach alle Protokolle für den Tag hochladen, aber das ist immer noch ein Problem, da ich nicht herausfinden kann, wie das in einem Skript geht. Ich könnte also einfach alle Protokolle für den gesamten Tag hochladen und muss mir keine Gedanken darüber machen, nur die neuesten Protokolle hochzuladen.
Der Befehl steht in dem Powershell-Skript, das ich gestartet habe und das unten aufgeführt ist. Wenn es aber einfacher ist, dies mit einer Batchdatei zu tun, könnte ich das tun. Ich wollte nur vermeiden, etwas wie „blat“ zum Senden der E-Mail hinzuzufügen und konnte außerdem nicht herausfinden, wie ich das Aufgabenergebnis in einem Batch-Skript erhalte, das ich zum Senden in der E-Mail benötige.
Das „IEX“ unten ist der vollständige Befehl, und dort muss ich die UTC-Zeit für den Tag eingeben, wenn das einfacher ist, als zu versuchen, die Zeit vom letzten Ausführungszeitpunkt der geplanten Aufgabe abzurufen. Das ist sowieso die sicherste Option. Die „1 1“ am Ende sind dann Parameter, die der Anbieter benötigt und die Optionen für den Upload hinzufügen.
Wie kann ich den aktuellen Tag und die aktuelle Uhrzeit für den Protokoll-Upload angeben? Wenn die Uhrzeit beispielsweise von 0:01 Uhr (Ostküstenzeit) bis 23:59 Uhr (Ostküstenzeit) jeden Tag angegeben wird, sollte das kein Problem sein?
# "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)
}
Antwort1
Um das aktuelle Datum/die aktuelle Uhrzeit als Unix-Zeitstempel zu erhalten, berechnen Sie die Anzahl der Sekunden, die seit dem Start desUnix-Epoche:
$Now = [DateTime]::UtcNow
$Epoch = Get-Date -Year 1970 -Date 01/01
$unixTime = [int](New-TimeSpan $epoch $now).TotalSeconds
So ermitteln Sie es für zwei bestimmte Zeitpunkte (im Beispiel 00:01 - 23:59 am Vortag):
$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")