亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PowerShell > 正文

PowerShell實現時間管理小秘書

2020-10-29 20:58:14
字體:
來源:轉載
供稿:網友

引言

是不是覺得同樣是活著,別人為啥就能做這么多事呢?

是不是經常8小時班上下來,卻不曉得自己干了些啥?

是不是習慣于在Email, BBS, Google Reader間切換,感覺也挺忙的呢?

你需要時間管理!

你知道自己一天寫了多少代碼嗎?

你了解自己一周有多少時間在網上游蕩嗎?

你能說出一個月有幾天陪著家人嗎?

你需要PowerShell!

管理?先記錄!

時間管理就是用最少的時間做最多的事。和優化程序的性能一樣,為了提升時間的利用率,得先知道自己的時間都花在什么地方。如果上班時間有50%都浪費在瑣事上,剩下的一半時間再集中精力,一天的成效也好不到哪去。相應的,如果90%的時間都在干活,相比于竭力縮小剩下的走神時間,反不如稍稍提高一點效率。射箭強調有的放矢,治病講求對癥下藥。知曉瓶頸所在是優化的前提。

那么如何知道自己的弱點在什么地方?記錄,養成記錄的習慣。

試想當一周結束,你看到一張統計表:這周加班5小時,所有工作時間中,27%寫代碼,22%開會,16%寫文檔,35%偷菜。寫了3600行代碼,出現了75個bug,自查出69個。是不是覺得時間管理一下子簡單了很多?多寫代碼少偷菜,少生孩子多養豬唄。當然這個“偷菜”可以是很多東西,辦公室政治,信息上癮,搭公交上下班...如果沒有這個表,恐怕很多時候自己都意識不到有這樣多的時間浪費在了瑣事上,還在苦惱怎么提高效率呢。

記錄不僅可以為管理服務,這個行動本身就能給人帶來動力。“吾日三省吾身,則知明而行無過矣?!庇涗洸粌H僅是動動筆,當回顧過去所為的時候,它更是一個“省”的過程。為什么前兩周每周都是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...

... ...

好多...一共有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的說明在寫代碼等等。只要定時來統計一下,一天有多長時間上網,多長時間寫代碼就很容易算出來了。

記錄

至此“觀察”這一步算是解決了。可是怎么“記錄”呢?這個也挺簡單,用個數組就搞定,每次查看如果發現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}
}

代碼非常簡單,大意就是把每個窗口的標題進行匹配并統計。執行起來也很快,在毫秒量級。由于每30秒才執行一次,所以對系統幾乎沒有影響。

如果要求不高的話,只要在開著電腦的時候后臺運行這個腳本就好了。每天下班的時候去看看記錄文檔,時間如何花費自然一目了然。但是這樣畢竟要占用PowerShell的會話窗口,同時無法實時得知當前的統計結果。因此下面將試圖演示如何讓這個腳本在后臺執行,同時使我們能及時看到當前的時間利用率。如果你對這方面內容不感興趣的話可以直接跳到下一節,這部分不會影響后面的閱讀。:-)

PowerShell提供了強大的后臺任務管理,使用起來也一樣簡單。我們可以把這個腳本存成一個腳本文件,比如Motinor.ps1,然后在PowerShell中鍵入start-job {c:/users/grapeot/Monitor.ps1}就可以在后臺運行它了。我們可以看到PowerShell返回以下文字之后就又回到了命令行,于是可以繼續處理其他事務:

復制代碼 代碼如下:

Id              Name            State      HasMoreData     Location

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

5               Job5            Running    True            localhost

而在此過程中,我們可以通過get-content d:/temp/timeRecord.txt命令來了解時間使用情況。也可以用job管理命令如stop-job來停止任務,get-job來觀察任務,receive-job來接收輸出等。

等下等下,不對呀,我們難道不能直接顯示$record嗎?讓我們來試一下。鍵入$record,回車,咦?怎么沒有結果?

這是因為PowerShell這種腳本語言中變量也是有作用范圍(scope)的。腳本中的$record只在腳本中有效,我們在全局(global)范圍內當然就看不到它啦??墒悄_本就不能寫入全局變量了嗎?當然可以。我們可以將調用命令做一點小小的改動,變成. c:/users/grapeot/Monitor.ps1,注意前面的這個點和空格,以及這里暫時沒有用start-job而是直接執行。等運行一會以后按Ctrl+C結束腳本,鍵入$record看看,結果出來了吧~這個". "叫做dot sourcing,利用它我們可以讓腳本或函數直接讀寫全局變量。當然還有一種方法是用set-variable命令加上-scope參數來讀寫。具體使用方法可以用help set-variable -parameter scope命令查詢。

但是這兩個特性在后臺job中似乎有點失效。如果用dot sourcing啟動腳本的話這個job直接就吊死了,狀態是Running但實際上得不到運行。Microsoft說這是由于叉叉過程造成死鎖搗的鬼。如果用set-variable對全局變量賦值的話還是無法用$record觀察到結果。據推測可能是后臺運行的會話和當前會話是彼此獨立的,因此沒有辦法共享變量??磥硪朐诤笈_任務和當前會話中傳遞數據,還只能通過Receive-Job或者臨時文件了呢。如果各位有什么高招的話還請賜教呀~

呈現與挖掘

一天結束了,我們也拿到了一個統計表,比如

復制代碼 代碼如下:

Name                           Value

----                           -----

編程                           5869

文檔                           3217

上網                           3078


我們可以利用上篇文章中介紹的腳本把它畫成一個餅圖,當然也可以把每天的記錄保存下來,畫成一周狀態走勢圖。

你可以做更多…

每個人都有自己的生活自己的電腦自己的習慣,根據自己的需求動手打造自己的工具其實也是挺有成就感的一件事。而PowerShell很適合作為打造的基礎。除了用電腦監控時間利用情況以外,你當然可以做得更多。比如更詳細的統計瀏覽器記錄,看自己經常去哪些網站;觀看Google Reader的閱讀率統計,退訂那些不必要的Feed;甚至用手機做一些簡單的工作,比如用計步器軟件統計一天運動了多少,用GPS軟件統計自己在上班路上耽擱了多久,看看自己和誰打電話的時間是不是太長了等等。有時候很簡單甚至很裸的算法都能帶來神奇的發現。

其實這篇文章的目的并不在于炫耀PowerShell怎樣能干,而是想強調“記錄”這個習慣的重要性。只是用PowerShell來實現相對簡單而已。對于追求完美或者不喜歡命令行的人,當然也可以自己寫個系統服務,效果都是一樣的。

所以說,數據就是價值。讓我們用DIY精神去發掘生活中與我們擦肩而過的價值吧!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久成人av| 亚洲视频欧洲视频| 亚洲精品在线不卡| 精品国产一区二区三区在线观看| 色婷婷综合成人| 成人av在线亚洲| 97在线视频免费播放| 国产精品久久久久久一区二区| 久久久www成人免费精品| 久久久久久中文字幕| 国产精品日韩欧美| 欧美成aaa人片在线观看蜜臀| 国产免费一区视频观看免费| 中文字幕亚洲综合| 亚洲精品白浆高清久久久久久| 久久久精品在线观看| 欧美日韩国产中文精品字幕自在自线| 日韩天堂在线视频| 欧美色另类天堂2015| 亚洲国产精品一区二区三区| 岛国视频午夜一区免费在线观看| 综合激情国产一区| 日韩视频一区在线| 亚洲国产精彩中文乱码av| 美女国内精品自产拍在线播放| 欧美做受高潮1| 91精品国产沙发| 亚洲一区av在线播放| 69视频在线免费观看| 成人黄色激情网| 91成人天堂久久成人| 亚洲精品美女视频| 色偷偷88888欧美精品久久久| 91最新在线免费观看| 亚洲国产精品国自产拍av秋霞| 最近2019免费中文字幕视频三| 欧洲亚洲免费在线| 中国china体内裑精亚洲片| 国产欧美日韩中文| 麻豆国产va免费精品高清在线| 亚洲人午夜精品| 久久精品视频网站| 成人免费大片黄在线播放| 在线视频精品一| 国产精品免费一区二区三区都可以| 亚洲人成77777在线观看网| 伊人男人综合视频网| 久久激情五月丁香伊人| 久久在线免费视频| 欧美在线国产精品| 中文字幕日韩有码| 亚洲国产精品久久久久秋霞不卡| 成人激情黄色网| 午夜精品久久17c| 亚洲人成免费电影| 中文字幕日韩精品有码视频| 91在线|亚洲| 日韩中文字幕在线观看| 亚洲第一中文字幕在线观看| 日本久久久久久久久| 国产精品欧美日韩一区二区| 亚洲一区第一页| 成人福利免费观看| 国产精品自产拍高潮在线观看| 国产精品成熟老女人| 久久色在线播放| 欧美视频不卡中文| 欧美日韩中文字幕在线| 欧美刺激性大交免费视频| 国产精品扒开腿做| 欧美性xxxxx极品娇小| 激情成人中文字幕| 亚洲aⅴ男人的天堂在线观看| 欧美午夜精品久久久久久浪潮| 91精品国产777在线观看| 精品爽片免费看久久| 久久久之久亚州精品露出| 亚洲国产精品va在线看黑人动漫| 欧美激情视频给我| 懂色aⅴ精品一区二区三区蜜月| 色悠久久久久综合先锋影音下载| 欧美高清在线视频观看不卡| 日本一区二区三区在线播放| 国内精品久久久久久中文字幕| 国产精品美女主播| 欧美激情视频在线免费观看 欧美视频免费一| 91精品国产电影| 日韩av影视综合网| 日韩在线中文字| 国产成人精品最新| 国产精品爽黄69| 欧美一区二区色| 久热精品视频在线观看| 亚洲国产成人精品一区二区| 久热国产精品视频| 91九色国产社区在线观看| 久久精品99久久久久久久久| 国产午夜精品麻豆| 国产亚洲欧美日韩一区二区| 亚洲成人精品视频| 久久大大胆人体| 亚洲大尺度美女在线| 在线观看亚洲区| 午夜伦理精品一区| 国产成人在线亚洲欧美| 欧美日韩综合视频网址| 亚洲精品国产免费| 日韩av一区二区在线观看| 国产精品日韩电影| 欧美最近摘花xxxx摘花| 97国产suv精品一区二区62| xxav国产精品美女主播| 精品偷拍一区二区三区在线看| 在线观看欧美成人| 51ⅴ精品国产91久久久久久| 欧美精品中文字幕一区| 国产精品pans私拍| 亚洲色图校园春色| 奇米成人av国产一区二区三区| 亚洲久久久久久久久久| 久久色精品视频| 日韩精品黄色网| 欧美成人精品h版在线观看| 亚洲天堂av在线免费| 2019中文字幕在线观看| 亚洲最新视频在线| 亚洲jizzjizz日本少妇| www.99久久热国产日韩欧美.com| 成人欧美一区二区三区黑人孕妇| 日韩精品免费在线| 精品国内亚洲在观看18黄| 九九精品在线观看| 亚洲第一精品夜夜躁人人爽| 91成人在线播放| 亚洲天堂成人在线视频| 久久视频免费观看| 岛国av午夜精品| 欧美—级a级欧美特级ar全黄| 亚洲美女自拍视频| 超碰91人人草人人干| 亚洲欧美精品伊人久久| 亚洲国产成人av在线| 久久香蕉精品香蕉| 日韩在线视频网| 中文字幕av一区| 国产一区二区三区在线播放免费观看| 国产裸体写真av一区二区| 日韩国产欧美精品在线| 亚洲夜晚福利在线观看| 91丨九色丨国产在线| 午夜免费在线观看精品视频| 孩xxxx性bbbb欧美| 日韩在线资源网| 大桥未久av一区二区三区| 在线免费观看羞羞视频一区二区| 免费av一区二区| 国产精品www色诱视频| 亚洲精品美女在线观看播放| 国产精品女视频| 欧美大秀在线观看| 在线视频欧美日韩| 亚洲伊人第一页| 91久久精品视频| 国产精品女主播|