PowerShell实现时间管理小秘书

2019-09-30 11:13:22刘景俊

观察

整个时间记录的思路比较简单。电脑反正不怕麻烦,可以每过半分钟就来看看你在干啥。等一天结束的时候再把报表拿给你看就好。

可是问题来了,电脑怎么知道你是在上网,在写文档还是在写代码呢?哈,对于PowerShell来说,这个可简单了。还记得PowerShell中传递的是一个个对象吗?其中每个命令返回的都是含有丰富信息的对象,我们可以大加利用。至于怎么知道每个对象有哪些属性,可以用get-member这个函数来查看。比如Get-process可以得到当前所有进程,我们可以用get-process | get-member来查看“进程”有哪些属性属性。当然由于ps是get-process的alias,我们也可以用ps | get-member来查看。


Name                       MemberType     Definition
----                       ----------     ----------

... ...

MainModule                 Property       System.Diagnostics.ProcessModule M...

MainWindowHandle           Property       System.IntPtr MainWindowHandle {get;}

MainWindowTitle            Property       System.String MainWindowTitle {get;}

MaxWorkingSet              Property       System.IntPtr MaxWorkingSet {get;s...

MinWorkingSet              Property       System.IntPtr MinWorkingSet {get;s...

... ...

好多...一共有90个呢。注意到其中的MainWindowTitle了吗?这个就是该进程主窗口的标题。让我们用ps | ? {$_.MainWindowTitle} | select MainWindowTitle来看看当前系统主窗口的标题是什么:

MainWindowTitle

---------------

Start Page - Microsoft Visual Studio

Computing Life - 博客园 - Windows Internet Explorer

你的C:>能干啥?(1) -- 用PowerShell打造时间管理小秘书 - Microsoft Office One...

Untitled - Message (HTML)

Windows PowerShell

Windows Task Manager

Document1 - Microsoft Word

恩恩,能看出来不少东西呢。比如说在用IE浏览博客园,在用Word写文档,在用Visual Studio写代码等等。还真得感谢这些软件的设计者,把软件的名字都放在窗口的标题上了,否则我们的统计还挺有难度。下面的事情就简单了,我们可以用正则表达式匹配每个标题,比如含有Internet Explorer的就是在上网,含有Visual Studio的说明在写代码等等。只要定时来统计一下,一天有多长时间上网,多长时间写代码就很容易算出来了。