• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >PowerShell > PowerShell实现时间管理小秘书

PowerShell实现时间管理小秘书

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了powershell,windows powershell,powershell是什么,powershell下载,powershell怎么打开等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

引言

是不是觉得同样是活着,别人为啥就能做这么多事呢?

是不是经常8小时班上下来,却不晓得自己干了些啥?

是不是习惯于在Email, BBS, Google Reader间切换,感觉也挺忙的呢?

你需要时间管理!

你知道自己一天写了多少代码吗?

你了解自己一周有多少时间在网上游荡吗?

你能说出一个月有几天陪着家人吗?

你需要PowerShell!

管理?先记录!

时间管理就是用最少的时间做最多的事。和优化程序的性能一样,为了提升时间的利用率,得先知道自己的时间都花在什么地方。如果上班时间有50%都浪费在琐事上,剩下的一半时间再集中精力,一天的成效也好不到哪去。相应的,如果90%的时间都在干活,相比于竭力缩小剩下的走神时间,反不如稍稍提高一点效率。射箭强调有的放矢,治病讲求对症下药。知晓瓶颈所在是优化的前提。

那么如何知道自己的弱点在什么地方?记录,养成记录的习惯。

试想当一周结束,你看到一张统计表:这周加班5小时,所有工作时间中,27%写代码,22%开会,16%写文档,35%偷菜。写了3600行代码,出现了75个bug,自查出69个。是不是觉得时间管理一下子简单了很多?多写代码少偷菜,少生孩子多养猪呗。当然这个“偷菜”可以是很多东西,办公室政治,信息上瘾,搭公交上下班...如果没有这个表,恐怕很多时候自己都意识不到有这样多的时间浪费在了琐事上,还在苦恼怎么提高效率呢。

记录不仅可以为管理服务,这个行动本身就能给人带来动力。“吾日三省吾身,则知明而行无过矣。”记录不仅仅是动动笔,当回顾过去所为的时候,它更是一个“省”的过程。为什么前两周每周都是3000+行代码这周只有1500-?为什么昨天老婆发了3次火而此前3周一共才生两次气?为什么...?声色犬马,光影浮华,我们太容易忽略一些就发生在我们身边的变化,而随手的记录,说不定就会让我们即时警醒。

可是...难道要我每次上网都要记下来上了几分钟,每次老婆发火都要立马翻个小本子出来记个陈年烂芝麻帐吗?

记录太烦人,秘书来帮忙

当然不,你需要的只是一个秘书。这个人心隔肚皮的世界小蜜可要不起,不过电脑,手机这些冷冰冰的塑料家伙倒真可以成为你的伙伴。我没有能力搜罗出一系列神通广大的软件来一下告诉你上个月偷了几棵菜上了多少网,但也许可以启发你打造自己的电脑秘书。

让电脑这个不怕麻烦的家伙说出你用电脑干了什么事可是他的拿手好戏。我们就从这里开始吧!可是...用什么工具呢?PowerShell呀!就像我们上次介绍的,这个全新的命令行工具可以轻松地获取系统信息,接合.NET对象,管理后台任务,还能调用Excel等高级数据分析工具。数据记录、处理、呈现、挖掘一条龙服务,舍我其谁呢?

观察

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

可是问题来了,电脑怎么知道你是在上网,在写文档还是在写代码呢?哈,对于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...

... ...
</div>

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

记录

至此“观察”这一步算是解决了。可是怎么“记录”呢?这个也挺简单,用个数组就搞定,每次查看如果发现Internet Explorer就把上网+1,发现Microsoft Word就把文档+1就好了呀。好在PowerShell早就想到了这一切,就算不动用.NET中强大的数据结构,它也内置了Hash-Table这一数据类型,非常适合我们完成统计任务。

比如我们想监测上网,写代码和写文档的时间,只要编写这样的脚本就好:
$timeInterval = 30  #每30s监测一次
$record = @{"上网" = 0; "编程" = 0; "文档" = 0}
$count = 0
while ($true)
{
    $titles = ps | ? {$_.MainWindowTitle} | select MainWindowTitle
    $titles | % { #这部分用来匹配窗口标题并进行统计,可以自由定义
        if ($_ -match "Internet Explorer") {$record["上网"]++}
        if ($_ -match "Visual Studio") {$record["编程"]++}
        if ($_ -match "Microsoft Word") {$record["文档"]++}
        if ($_ -match "Microsoft Office OneNote") {$record["文档"]++}
        if ($_ -match "Microsoft PowerPoint") {$record["文档"]++}
    }
    sleep($timeInterval) #将线程转入睡眠,每30秒唤醒一次
    $count = ($count + 1) % 10 #为了防止数据丢失,每10次记录写入文件一次
    if ($count -eq 0) {$record > d:\temp\timeRecord.txt}
}
</div>

代码非常简单,大意就是把每个窗口的标题进行匹配并统计。执行起来也很快,在毫秒量级。由于每30秒才执行一次,所以对系统几乎没有影响。

您可能想查找下面的文章:

  • PowerShell使用match操作符来筛选数组
  • PowerShell连接SQL SERVER数据库进行操作的实现代码
  • powershell远程管理服务器磁盘空间的实现代码
  • Powershell 之批量获取文件大小的实现代码
  • 用PowerShell删除N天前或指定日期(前后)创建(或修改)的文件
  • PowerShell因为在此系统中禁止执行脚本的解决方法
  • Powershell 查询 Windows 日志的方法
  • Powershell 查找用户的主SMTP地址
  • powershell解决win10开始菜单和通知中心无法打开
  • Powershell 获取特定的网页信息的代码

相关文章

  • Windows Powershell调用静态方法
  • PowerShell使用枚举变量定义带智能提示功能的函数参数
  • 浅谈CMD和win powershell的区别
  • Powershell Profiles配置文件的存放位置介绍
  • Powershell小技巧之使用Update-TypeData扩展类型系统
  • Powershell学习笔记--使用正则表达式查找文件
  • PowerShell小技巧之获取Windows系统密码Hash
  • PowerShell实现查询打开某个文件的默认应用程序
  • 详解Linux使用shell+expect远程登录主机
  • Shell实现程序造死循环的几种方法示例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • PowerShell String对象方法小结
    • PowerShell小技巧之执行SOAP请求
    • Powershell小技巧之使用Jint引擎在PowerShell中执行Javascript函数
    • PowerShell因为在此系统中禁止执行脚本的解决方法
    • PowerShell单行注释、多行注释、块注释的方法
    • PowerShell使用match操作符来筛选数组
    • PowerShell中查询错误编号信息的2个方法
    • PowerShell获取Windows用户列表、用户信息的方法
    • PowerShell中使用Filter来创建管道输入函数
    • PowerShell实现动态获取当前脚本运行时消耗的内存

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有