
これらのフォーラムは素晴らしいです。自動化する方が簡単だと思っていたプロセスを手動で実行する際に頭を悩ませている問題に対して、助けが得られることを期待しています。
ベンダー アプリのコマンド ライン ツールがあり、アプリのログをアップロードします。ただし、このツールは Unix UTC 時間のみを使用し、アプリ ログをアップロードするには、スケジュールされたタスクを 1 日に 3 ~ 4 回実行する必要があります。おそらく、1 日分のログをすべてアップロードするだけで済むでしょうが、スクリプトでそれを実行する方法がわからないため、それでも問題があります。そのため、1 日分のログをすべてアップロードするだけで、最新のログのみをアップロードする必要はありません。
コマンドは、私が開始した 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
特定の 2 つのインスタンス (例では前日の 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")