PowerShell好不好?确实好,能帮助运维提升工作效率,让工作变得轻松而且高效。但是很遗憾的是,PowerShell的重要性,在国内的认知度并不够高,去看看各大招聘网站,很少有对PowerShell能力进行要求的。或者即使有要求,高薪职位也很少。
那么问题来了,这么小众的市场,还有必要学么?浪费这时间做什么?
这个问题问得好,一看就是没经过大脑。通常这类人人正直、豪爽、干活肯吃苦耐劳,简直是人格正能量的代言人。
关于PowerShell我只说一句。一群人天天走路上班,突然在你面前摆了一个机会,你只要简单的学一下,就可以骑自行车上班了。重要的是,自行车我还白送。那我问你,你是愿意继续走路还是骑车?事实是,很多人总是担心骑车怕摔,还在安心的走路。
在上一篇分享中(点击这里),我们大致了解了一下PowerShell的图形界面编程,很容易就可以将一段脚本改变成GUI程序。比如我们今天要做的程序是这样的。
高逼格计算器
这个程序和走路也有很大的关系,因为各种原因,我买了辆自行车。我只是想简单的算一下,如果我每天骑自行车上班,这个节省下来的钱,要几个月才能追的上之前坐地铁和公交的钱。这种看起来简单的问题,才是细思极恐。
需求分析
不管是写脚本还是做什么,稍微复杂一点的时候,千万不要相信自己的记忆力,西安把事情捋一捋,后面会省事很多。首先我们来看看计算公式:
- 北京坐公交刷卡1元起步,永不打折
- 北京坐地铁3元起步,100以内不打折,100到150之间打8折,150到400打5折,400之后没折扣。
- 每年的每个月,除了2月之外,其他月的天数都是固定的,但是4年一闰跑不掉
- 每年的每个月,公休日(周六周日)的天数是不一样的(法定节假日又是一个巨麻烦的计算器,这里先不考虑。)
所以说,想要计算个大概还凑合,但是想要计算的精准,不容易。
比如说,因为有折扣的存在,如果一个人单程地铁5元,和单程地铁10元,他们的交通费差距,一年是多少。你可以拍脑袋就出来么?
不写代码,谈谈实现
可能很多人一想到写程序,就得大谈特谈代码。这确实没错,但是光说代码,文章的阅读性就差了很多。这个计算器的核心在于算法,基本没有用到什么令人惊喜的编程方法。
首先,上一个小结我们提到,怎么算一个月有多少天,这个月有多少公休日。
PowerShell里面并没有直接提供当月有多少天的命令和参数,所以我用了一个方法:
#计算当月多少天,计算方式是先跳到下个月,然后天数减少一天,就是当月的最后一天,取天数
$dangyuetian=$dangyue.Date.AddMonths(1).AddDays(-1).Day
至于计算一个月有多少公休日,可以通过获取当前日期的属性查询得出,PowerShell有直接得到当前日期是星期几的方法,我们只要简单做一个检查就可以了。
if ($xingqiji-ne"Sunday"-and$xingqiji-ne"Saturday")
针对用户的输入数据,其实也要做一个限定,比如年份是4位数,月份是1到12。地铁起步价3块等等。下面的正则部分是一个叫做大表哥的网友提供的。很好用:
if ([int]$textbox6.text -match'd{4}') { $global:nian=$textbox6.text} if (([int]$textbox5.text -match'd{1}'-or[int]$textbox5.text -match'd{2}') -and ([int]$textbox5.text -le12-and[int]$textbox5.text -ge1)) {$global:yue=$textbox5.text } if (([int]$textbox8.text -match'd{1}'-or[int]$textbox8.text -match'd{2}') -and ([int]$textbox8.text -le30-and[int]$textbox8.text -ge0)) { $global:ditie=$textbox8.text } if (([int]$textbox7.text -match'd{1}'-or[int]$textbox7.text -match'd{2}') -and ([int]$textbox7.text -le20-and[int]$textbox7.text -ge0)) { $global:gongjiao=$textbox7.text }
算完单月花多少钱,当然计算一下一年花多少钱会显得比较专业,这块也很好实现,只是一个简单的叠加。
写点东西,超出预期
随便说说题外话。如果说今天这个问题,让你自己计算器/Excel计算器算,都是个很麻烦的事情。写脚本可以把这个事情做的更漂亮一些。同样一件事情,能解决和解决的漂亮,其实会产生两种结果,工作中也是如此。在Windows的运维工作中,不用脚本在多数情况下都是可以完成日常工作的,但是要让工作更有价值,可以尝试下PowerShell。
还是之前说的那句话,走路还是骑车,看你。