学到很多东西的诀窍,就是一下子不要学很多。 出自(洛克)

主要探讨下如何学习PowerShell和学习过程中可能会遇到的一些情况讨论,原因还是因为我发现大部分人还是处于想要了解PowerShell和用好PowerShell范围的。对了,之前我在我的微信公共订阅号做了一个投票调查,上次的投票结果出来了,从投票结果可以看出这一点,希望【关于更多PowerShell入门基础类的文章】占了绝大多数。所以我觉得特别有必要写一篇文章讨论下关于学习PowerShell的一些建议和一些理解误区。

新手学习PowerShell可能产生的问题

写这篇文章时,我脑海里已经出现了几个方面来讨论,而为了一目了然,我用QA问答的内容形式排版。

Q1: 学习PowerShell需要有编程开发背景吗?

A1: 我多次在一些技术群以及媒介论坛上看到有新人问没有编程经验,学习PowerShell的话有必要去学习下开发吗?不少回答都显得多少有些误人子弟。他们的建议是询问者去学习C#甚至.NET这样才能很好的使用PowerShell。

而我的回答是,完全不用。

从学习角度来说,对于一个初学者,或者说可能之前并没有多少接触过编程概念的人而言,建议他去学习C#开发这是反其道而行的做法。往远的说,学习的首要目的是使自己所学的东西尽快产生乐趣,那么去学习.NET等编程知识,增加了学习的曲线陡峭,甚至很有可能在还没开始学习PowerShell时已经半途而废了。

从学习角度来说,对于一个初学者,或者说可能之前并没有多少接触过编程概念的人而言,建议他去学习C#开发这是反其道而行的做法。往远的说,学习的首要目的是使自己所学的东西尽快产生乐趣,那么导反其道而行去学习.NET等编程知识,甚至很有可能在还没开始学习PowerShell时已经半途而废了,因为。

从PowerShell本身而言,很多人认为PowerShell是基于.NET内核为基础,以及一些C#类似的语言,所以学习C# 和 .NET非常有必要。实则不然,如果你能对于PowerShell有一些表面上的观察就应该发现PowerShell最基本的命令都是以【动-名词】的方式构成,这难道不是有意为之吗?PowerShell从一开始的面世,微软对于PowerShell战略角度的定位、学习曲线等可都是经过深思熟虑的,而不是简单的为了模仿Linux Shell和为了替代Windows CMD而生。早先我在第一篇【我们为什么应该学习PowerShell】中曾就提到过,PowerShell具备平顺的学习曲线,它是一门易学易理解的一门脚本语言,所以请直接去学习它吧,微软可不想开发一个让很多人都望而退步的脚本语言,何况原来大批GUI操作者让他们转向自动化脚本是多么的困难,所以微软已经帮你降低了学习门槛了。但是,我也并不完全否认关于学习了.NET和C#的好处,如果你具备其它开发语言背景当然能够更好的帮助你去理解PowerShell,但仅仅是辅助而并非必要,由于对于刚入门的新手。

Q2: 如何学习PowerShell,有哪些宝典,神器吗?

A2: 这也是很多人时常会问到的一个问题,并没有什么所谓的宝典和神器,如果真的有的话,大家都知道了,也就根本不会出现这个问题。那么到底怎么学习呢?每个人的学习方法都是不同的,我只能给出我的建议,我认为最好的就是去看微软官方的说明文档建立基础之后再去看一些相关书籍。我是有幸国内较早第一批接触PowerShell的人,从最初打开那个蓝色窗口到现在经历的11个年头我始终认为官方文档是最好的入门教程,尤其对于上一个问题提到没有编程基础的人而言文档也清晰的说明了每个功能和命令的用法。曾经带过不少新手给他们的建议做法都是直接看文档,之后随着你对PowerShell的基本使用了解后可以看一些PowerShell实战的书籍,随着时间的积累,现在市面上已经有不少PowerShell经典的书籍了。当然到底是先看文档还是先看书又或者看视频完全都随个人的学习方式,这个就属于仁者见仁智者见智了。

Q3: 怎么样才算写好PowerShell,会写脚本会用命令就算吗?

A3: 这个问题存在不确定性,但是却有一定标准性,所以我还是想说说怎么样才能算写好一个基本算的上合格的PowerShell脚本。我曾经遇到过,也面试过不少编写脚本的人们,他们都具备多门高级编程语言学习的背景,但都出现过一个共性问题那就是会用A类语言去思考B类语言,我们都知道在编程世界中,所有编程语言就像人类真实世界的自然语言一样都是能够“互通”的,这样的就出现了一个结果,我看到不少PowerShell脚本里充斥着C#等其它编程语言思维的代码写法和编码风格,明明可以一个PowerShell内置命令配合一个参数能解决的问题,为什么要写一个函数附加引入dll库去解决呢?以及编码风格上并不是纯粹的PowerShell Style,就像一个人说了一口浓重中式英语的味道,这算会英语但不算英语好,虽然功能是达到了,但是这并不是合格的PowerShell脚本或者说写好了PowerShell,很容易就可以看出脚本开发者的PowerShell水平程度。

Q4: 我已经能写PowerShell脚本,但是为什么还是感觉不会用很多PowerShell命令?

A4: 即便是我已经用了多年PowerShell的人一样会遇到很多没见过的PowerShell命令,而且要知道PowerShell最重要包括现在依然最主要的使命是服务于所有微软产品,所以你会用PowerShell并不代表你能在某个微软产品上用好PowerShell,有Exchange版本的PowerShell, 有SharePoint版本的PowerShell,有Azure版本的PowerShell,有Windows Server版本的PowerShell等等等等,数百个大大小小的产品数万个命令,据不完全统计多年前PowerShell内置的命令库早已接近5位数,可想而知,这个地球上没有人能会用所有的PowerShell命令,这是极为正常不过的事了。另外要说的是,如果想以PowerShell为工作,那么你必须基于你所熟悉的产品为核心,然后利用PowerShell去辅助它,使它成为你高效的工具。

Q5: 我想用PowerShell解决一个问题,但是并没有找到可以解决这个问题的命令,是不是代表PowerShell做不了,或者我装的PowerShell版本太低?

A5: 目前大部分使用PowerShell的人我想都是基于Windows系统和微软产品为依托的架构环境,那么现在PowerShell百分之九十九都是能解决涉及微软系统的管理和微软产品的应用,如果你找不到相关针对性命令那也是十分正常,但这并不代表无法用PowerShell去解决,换个思路就能很好理解PowerShell的这一个个命令都是微软帮你封装好了,如果没有相关命令怎么办呢?那就自己写一个,在Windows PowerShell 早期版本的时候几乎没有多少内置系统管理的命令,那时候想要写一个修改系统时钟的脚本话,没有专门的命令可以从解刨问题,从原理角度出发,我了解到系统的时钟修改涉及到注册表键值,那么可以用注册表命令写一个修改注册表的小脚本就做到了,甚至你可以封装成一个命令给别人用。如果还不行呢,你可以引入.NET类库去做,随着PowerShell版本的迭代发布,调用PowerShell去做各种各样的事已经变的越来越方便。但是请相信我,绝大部分问题你几乎不会涉及更深层的开发,只是你没找到更好的解决方法而已。

回头看看写了不少,时钟的指针马上要指向第二天了,永远觉得时间不够用,许多事没有完成,不过如果能解答一些人心中的困惑和疑问那这些时间便是值得的。

其实还有各种各样的疑问问题没有归类,你可以在评论区一起与我和大家探讨当然也欢迎加入我们的微信群,但归根结底我认为很多新手遇到问题的原因在于过急,而没有一步步去学习和了解,当你了解后会发现很多问题属于很基础的问题,所以不要跨越性去学习,或许可以临时为了解决一个问题去临时翻阅下资料,但并不建议长期以往。我也曾遇到不少这类PowerShell使用者,他会使用PowerShell Level3技能的一些东西,却完全不知道Level1的技能,在一个Level1上的问题卡了很久,最后才发现越来非常简单帮助文档里都有说明,这就是长期以往用到哪现查资料而忽略了系统性循序渐进的学习后果。

相关文章: