2017-01-23 70 views
-2

这是一个稍微开放式的问题,但是我正在寻找如何处理这个问题的一般性指导,因为我真的不知道从哪里开始:建议程序/脚本登录小时

对于我现在的雇主,我需要每周登录我的工作时间。所以我有兴趣编写一个程序(我最适合使用C++)或脚本,每次登录到我的机器并进入睡眠状态时都会“无形”捕获。社区可以推荐如何做到这一点的方法吗?

我将介绍我的工作环境多一点:

我登录到Windows中,我主要使用电子邮件和网页浏览,但我大部分开发工作都是由VNC'ing做一个Linux框。因此,登录到Windows后几乎立即登录Linux框。 Linux机器是我自己的,所以我可以自由地编写二进制/脚本守护进程来运行它。

我的第一个想法是编写一个程序,以某种方式“困住”Windows登录和睡眠事件,类似于如何捕获SIGINT等 - 但我不知道这是否可行。我很新,天真的Linux环境,所以我不知道为什么会发生这种情况:但当我恢复我的VNC会话时,我通常不会提示输入密码(我通常会看到有关x-screensaver发生崩溃)。我是很少有提示输入我的密码,但我还不知道当我被问及什么时候没有。我之所以提到这一点,是因为如果存在“陷入登录”这样的事情,那么在Linux机器上执行它似乎是不可行的,因为这种密码提示不一致。

再次说明:我的目标是让我的登录/注销/睡眠活动捕获我的没有我每次登录/注销或将系统置于睡眠状态时都会启动一个命令/脚本。如果编写/编写这样做的守护进程是不合理的,那么现成的(和免费的)解决方案可以做到这一点吗?如果不是这样 - 即如果唯一的解决方案是每次登录/注销或让我的系统进入睡眠状态时手动运行某些内容 - 那么我会很乐意协调一个程序来执行此操作。

谢谢指点和建议。

+0

VNC服务器可能会生成您可以处理的日志文件。如果登录系统可能登录登录,则失败。 – Galik

+0

@Galik:这看起来很有前途;谢谢。我必须使用VNC Viewer启用日志记录(默认情况下未启用),但它看起来是生成输出,从中我可以提取所需的信息。感谢这个想法。 – StoneThrow

回答

0

我找到了一个有趣的解决方案:Windows PowerShell中的Get-WinEvent命令。例如:

PS C:\Windows\system32> Get-WinEvent -FilterHashtable @{starttime='1/20/2017';endtime='1/21/2017';logname='security';id=4648,4634} 

TimeCreated        ProviderName                 Id Message 
-----------        ------------                 -- ------- 
1/20/2017 6:20:38 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 5:42:20 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 5:42:20 PM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 5:42:20 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 5:42:20 PM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 5:42:20 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 5:42:20 PM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 5:42:19 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 5:42:18 PM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 5:30:32 PM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 5:30:29 PM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 4:34:36 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 2:49:34 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 2:07:06 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 1:48:06 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 1:48:06 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 1:45:09 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 1:45:09 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 1:42:55 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 1:42:54 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 12:56:32 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 12:16:58 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 12:16:58 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 12:16:58 PM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 12:16:58 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 12:16:58 PM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 12:16:58 PM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 11:23:29 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 10:06:22 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:48:06 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:48:06 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:45:19 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:45:09 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:43:47 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:43:47 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:43:47 AM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 9:43:47 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:43:47 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:43:47 AM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 
1/20/2017 9:43:25 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:42:57 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:42:56 AM     Microsoft-Windows-Security-Auditing          4634 An account was logged off.... 
1/20/2017 9:42:52 AM     Microsoft-Windows-Security-Auditing          4648 A logon was attempted using explicit... 

其中4648代表登录事件,4634代表注销事件。

从这里我可以想象我期望的其余目标是将它包含在某种脚本中,用于计算第一次登录和最后一次登出之间的时间。

我想这可能已经超级用户,但我不知道问题/答案会导致哪里。

2

你可以看看“最后”的命令。在another stack overflow question这被列为登录/注销时间。在我的机器上,这个命令也给了我看起来像一个持续时间(:我认为)的值。

如果你想看看protocoling登录自己的可能性,添加命令进入“.bashrc中”允许您运行自定义命令每当外壳被打开。然而,这种方法对于运行每控制台命令你开,不只是当你登录。

我猜寻找到“最后”命令可以很容易地给你你想要的结果。

+0

这看起来很有前途;我不知道这个命令。我有一些关于如何使用这个命令的研究,因为登录列表与我所期望的不符,但这是一个很好的起点。 – StoneThrow

0

嗯,你总是可以采取以下简单的解决方案,如果情况紧急,然后移动到一个更复杂的一个后...写你是在任何工作环境中的脚本,测量时间从开始到行动。在输入任何输入之前,您可以简单地停止输入,并获取需要多长时间直到您提供此输入。

将这些结果输出到一些文本文件中,并将它们加载到某些代码中以将结果解析为可呈现的格式,这在DBMS中会很有趣。将脚本设置到调度程序中以自动启动...

我在这里看到的一个问题是工作环境。你说Windows机器是你自己的,但是你想记录工作时间吗?如果是这样,在阅读与工作相关的电子邮件时自动化脚本开始变得更加复杂......在Linux环境中设置脚本并且可能会增加大约花费在Windows机器做与工作有关的东西,但是你不提供Linux机器上的限制,这不是你自己的限制。也许你也可以编写一个脚本来加载机器,并在测量时间的功能中包装加载,直到关闭机器......当然,如果经常退出机器,这会变得很烦人。

确实有更合适的方法来完全自动化这个过程,尽管......取决于你想要什么以及你受限于什么,所以把它当作指针。

+0

在Linux环境中设置脚本应该没问题......它不需要在Windows中。为了澄清:Linux的盒子也是我自己的,所以对我来说,在这个盒子上编写脚本/代码也是非常完美的。我不太明白:有了你的想法,你认为哪个事件应该触发脚本将其开始时间写入文件? – StoneThrow