专栏首页华来四Azure混合云用PowerShell做点实用的东西--GUI设计第二弹

用PowerShell做点实用的东西--GUI设计第二弹

PowerShell好不好?确实好,能帮助运维提升工作效率,让工作变得轻松而且高效。但是很遗憾的是,PowerShell的重要性,在国内的认知度并不够高,去看看各大招聘网站,很少有对PowerShell能力进行要求的。或者即使有要求,高薪职位也很少。

那么问题来了,这么小众的市场,还有必要学么?浪费这时间做什么?

这个问题问得好,一看就是没经过大脑。通常这类人人正直、豪爽、干活肯吃苦耐劳,简直是人格正能量的代言人。

关于PowerShell我只说一句。一群人天天走路上班,突然在你面前摆了一个机会,你只要简单的学一下,就可以骑自行车上班了。重要的是,自行车我还白送。那我问你,你是愿意继续走路还是骑车?事实是,很多人总是担心骑车怕摔,还在安心的走路。

在上一篇分享中(点击这里),我们大致了解了一下PowerShell的图形界面编程,很容易就可以将一段脚本改变成GUI程序。比如我们今天要做的程序是这样的。

高逼格计算器

这个程序和走路也有很大的关系,因为各种原因,我买了辆自行车。我只是想简单的算一下,如果我每天骑自行车上班,这个节省下来的钱,要几个月才能追的上之前坐地铁和公交的钱。这种看起来简单的问题,才是细思极恐。

需求分析

不管是写脚本还是做什么,稍微复杂一点的时候,千万不要相信自己的记忆力,西安把事情捋一捋,后面会省事很多。首先我们来看看计算公式:

  1. 北京坐公交刷卡1元起步,永不打折
  2. 北京坐地铁3元起步,100以内不打折,100到150之间打8折,150到400打5折,400之后没折扣。
  3. 每年的每个月,除了2月之外,其他月的天数都是固定的,但是4年一闰跑不掉
  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。

还是之前说的那句话,走路还是骑车,看你。

本文分享自微信公众号 - 华来四Azure混合云(sysinternal),作者:MVP 张鹏亮

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么是容器,Docker和Kubernetes?

    要参加微信课堂以及日常技术交流,请给我们发微信(微信号:markpah),请注明加入以下哪个群:

    盆盆
  • 干货分享-Win2019上的Linux容器和Azure Stack上的K8

    这是上个周末刚闭幕的微软Tech Summit大会,笔者在课堂上提出的两个问题。

    盆盆
  • 干货分享-Win2019上的Linux容器和Azure Stack上的K8

    要参加微信课堂以及日常技术交流,请给我们发微信(微信号:markpah),请注明加入以下哪个群:

    盆盆
  • 突破Java面试(47)-分库分表的实践

    现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?

    JavaEdge
  • Python3 怎么将Unicode转中文,以及GBK乱码ÖйúÉÙÊýÃñ×åÌØÉ«´åÕ¯

    原理: 如果***type(text) is bytes***, 那么text.decode('unicode_escape') ? 如果type...

    学到老
  • ASP.NET Core & Docker 零基础持续集成

    晓晨
  • 如何在Singularity中运行NVIDIA GPU云容器以配置HPC开发环境(中文字幕)

    在共享系统上安装HPC应用程序需要系统管理员为上百个应用程序构建环境模块,这是一项复杂、维护难度大、耗时长的工作。此外,将应用程序升级到最新版本需要仔细更新环境...

    GPUS Lady
  • Java Web中pageContext的20个实用方法——开发常用

    pageContext属性默认在当前页面是共享的 pageContext表示一个javax.servlet.jsp.PageContext对象。pageCont...

    用户1289394
  • 万能近似定理

    版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

    Steve Wang
  • Linux 下的source命令学习

    前些天在装opencl的beignet实现版本时,发现wiki中里面有个点命令.,不知道具体含义就百度了下,结果学了一些相关的知识,记录如下。

    王云峰

扫码关注云+社区

领取腾讯云代金券