21
Jul
2009

使用PowerShell自动化您的工作

PowerShell是Microsoft推出的自动化CLI终端及其对应脚本语言,它最早出现在03年9月的开发者大会(PDC)上。PowerShell虽说是脚本语言,有点像UNIX的Bash脚本,但其远远超过Bash脚本(个人感觉),因为PowerShell是完全对向对象的,而且与.NET高度集成,也就是说你可以轻松访问.NET库。因此,使用PowerShell不仅可以自动化一些常见的过程,而且甚至可以编写.NET程序,这一点也不夸张。PowerShell的cmd-let可以轻易对PowerShell进行扩展,而且由于面向对象的原因也易于编写。


PowerShell的主界面


PowerShell最新的版本是2.0.只有Windows 7 Professional以上及Windows Server 2008 R2才附带,Windows XP SP3, Windows Server 2003 SP2,!Windows Vista SP1与Windows Server 2008您需要手动下载,其地址:http://support.microsoft.com/kb/968929,当然,你先要安装.NET。

当然,您如果想对PowerShell进行进一步的了解的话,可以去Wikipedia上的专题,地址为:http://en.wikipedia.org/wiki/Powershell。现在我们就来做一个自动清除下载文件的脚本,假设我们的下载文件都储存在“D:\tp”中。由于我们需要使用事件功妮,因此我们得给启动命令上加上“-sta”,至于为什么可以去百度一下。如下图。

给启动命令加上-sta


启动自带的PowerShell ISE开发环境来进行开发。出于安全方面的考虑,现在你还不能进行本地脚本,须要更换安全级别,详见:http://technet.microsoft.com/en-us/library/ee176949.aspx。下面我讲述一下几个关键步骤,文章尾部附带有源代码,大家可以自行研究。我们设计系统会给用户一个提示,如果用户没有在规定的时间来取消,就进行清除工作,然后显示该盘的剩余空间。那么首先我们须要加载.NET的Form库。

## Load the window lib
[void] [System.Reflection.Assembly]
::LoadWithPartialName("System.Windows.Forms")
对于对用户进行提示这块,我们当然想到了最友好的气泡提示窗口。我们就要创建几个对象,依次为下载地址、所在盘、与气泡窗口,如下:
## This is the!location of your download files
unregister-event *
$fileLocation = "D:\tp"
$diskLabel = "D:"
$notification = new-object System.Windows.Forms.NotifyIcon
然后注册一个事件,来监听NotifyIcon的Click事件。
## Register a click event
register-objectevent $notification BalloonTipClicked
 -sourceIdentifier click_event
这里的register-objectevent是关键字,$notification是我们的窗口变量,BalloonTipClicked是要监听的事件,最后一个是该次监听的ID,以后会用。我们等15秒来让用户解决是否要取消本次操作。
## Wait for the onClick event
wait-event -sourceIdentifier click_event -timeout 15
然后看看消息队列是有没有我们要要的东东。
## Chech if the event occurs
$flag = get-event -sourceIdentifier click_event |
 where-object {$_.sourceIdentifier -match "click_event"}
。之后我们就可以根据〈b>flag的内容来决定是否要进行删除了。有时候我们要保留一些文件,那就把他们放在“saved”中,用以下删除命令就可以了。
rm $tp_1 -r -fo -exclude "saved"

那么最终效果就是这样的了。 Windows 7及Vista用户须要以管理员的身份运行。

当然,PowerShell的功能远不止这点而已,还有更多功能等待你去开发。

-->上例的源代码<--

附上几个关于PowerShell的网址:
TechNet:technet.microsoft.com/en-us/scriptcenter/dd742419.aspx
PowerGUI.org :http://powergui.org/index.jspa
MSDN:http:/-msdn.microsoft.com/en-us/library/cc281945.aspx

28
Feb
2007

是给交互设计下定义的时候了

近年来,随着交互设计的走红,越来越多的软件开发者嘴边挂起了“交互设计”这个东西,他们认为,交互设计就是为了提高他们所谓的“用户体验”(权威的叫法应该是“可用性”或“易用性”即Usability)。说实话,我实在忍受不了这种荒谬的事情了,所以我得向大家说明一下。

首先,我们得知道什么是“交互”。交互说白了就是指两个物体之间信息的交流,然后根据信息做出反馈。还有吗?没有了!就这么简单!那么交互设计是不是对信息之间的交流做出设计呢?不全对。因该是对可以预见的交互过程做出设计,以达到期望的目的。注意两点,一个是可预见的,也就是说这个交互过程是我们可以人为规定的,一旦我们规定好,那么就得这么做,不能出现不可预料的事情。如果你还不明白的话,我就给你举个例子。相信大家都能手机查过自己的话费吧,回想一下,你除了做出已经规定好的动作以外,你还能做什么?你能给自己的卡充钱吗?或都你给问今天的天气吗?不能,你只有几个选项:1、当前话费2、当前余额……。那么到底有几个选项那就是交互设计的工作了。你有没有想过,为什么1是当前话费,2是什么余额之类的?为什么不能2是当前话费,1是余额。二是期望的目的,目的一定是提高易用度吗?或者说一定是为了让用户用得顺手吗?我觉得那可未必,试想一下ATM机为什么要先取钱才能取卡?为什么不能先取卡再取钱?银行输密码的东西为什么要用一个罩子罩起来?你觉得那样好用吗?我非常不方便!那为什么还是要那样呢?原因很简单,安全性。因为在银行方法,安全性也比易用性重要得多!所以交互设计的目的也就自然成了安全性,能过这个,我只想说,交互设计的目的并不是一般人想象的那样只是为了提高易用性,它完全可以实现其它目的,交互设计只是一种方法而已。不过一般在电脑上它就是为了提高“易用性”。

如果大家想学习交互设计相关的知识,那可以看看Cooper写的书,其中我认为最好的当数《交互设计之路——让高科技回归人性》,真的,绝对值得你看。

1 2 3 4