计划任务 2008 R2-cmd 行需要 unix utc 时间-如何动态获取它?

计划任务 2008 R2-cmd 行需要 unix utc 时间-如何动态获取它?

这些论坛非常棒,我希望能得到一些帮助,解决我在手动执行过程中遇到的头痛问题,而我发现,这个过程应该比自动化更容易。

我有一个来自供应商应用程序的命令行工具,它可以上传应用程序的日志。不过,该工具仅采用 Unix UTC 时间,我需要每天运行 3 到 4 次计划任务来上传应用程序日志。我可能只需上传当天的所有日志,但这仍然是一个问题,因为我不知道如何在脚本中做到这一点。所以我可以上传一整天的所有日志,而不必担心只上传最新的日志。

该命令位于我启动的 powershell 脚本中,如下所示,但如果使用批处理文件执行此操作更容易,我只是想避免添加类似 blat 的东西来发送电子邮件,而且我无法弄清楚如何在批处理脚本中获取任务结果,而这正是我需要在电子邮件中发送的。

下面的“IEX”是完整命令,我需要在其中填充当天的 UTC 时间,如果这比尝试获取上次运行计划任务的时间更容易,那么无论如何这都是最安全的选择。然后最后的“1 1”是供应商需要的参数,用于添加上传选项。

我如何填充日志上传的当前日期和时间?如果每天填充的时间是 12:01am (东部时间) 至 11:59pm (东部时间),应该没问题吧?

# "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

要查找两个特定的时间实例(示例中为前一天的 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")

相关内容