2007-06
20

前两天fcicq介绍给我这个东西, 微软的powershell。 连上去之后发现要正版验证,就懒得弄了。不过对于微软的东西向来没什么兴趣。

就说这个命令行,微软从DOS时代开始就在抄袭Unix,抄好了也就罢了, 抄得四不像,好多命令行选项和Unix系统都不相同。最明显的例子莫过于netstat命令, 配服务器时最常用的就是 netstat -lnt,到了Windows下就不得不使用

netstat -an | find "LISTEN"

一长串命令来代替,最让人受不了的是find的关键词还得加双引号。

估计微软也知道自己的命令行做得不怎么样,于是推出了WSH(Windows Script Host)来解决批处理脚本的问题, 还有那个貌似功能强大的WMI对象。可是人家Linux shell编程简单又好学,会命令的就会写程序,说句文话叫“知识可重用”, 在这一点上WSH弄巧成拙,貌似强大的JScript和VBScript由于学习门槛太高而鲜有人问津。

而现在又推出了这个powershell。以前看过一些介绍,说句心里话它还是有些比较实用的命令的。 但是,再实用也不过是个玩具,就像Resource Kit里面那些工具一样。




这篇文章有 14 条评论了,快来一起讨论讨论吧!
#1
fcicq
2007-06-20 22:13

一想到ie4linux能够通过正版验证就想笑.

VBScript好像离病毒的载体这层次不远了.

#2
charlee
2007-06-20 22:35

记得有谁说过微软其实也在用Apache做服务器,虽然有些偏激。

看看微软的这些聪明的技术吧,Office宏带来了宏病毒,VBScript带来了HappyTime,ActiveX上流氓泛滥,最近的AV终结者又在炒autorun.ini的冷饭……

#3
smalldust
2007-06-25 22:34

嘿嘿,很遗憾我是从去年Powershell还是Beta,第一次对外公开时就开始弄Powershell的了,所以我免不得要批评查理同学一下~

对于微软这个巨人的产品,不能一概而论,因为微软的员工实在太多了,从平庸之辈到C++大师级人物。同样,微软内部的部门,也有较弱的和较强的之分。这些不同的人、部门做出来的产品,最终当然也有天壤之别。

我倒不是非要说Powershell有多强大——事实上正好相反,它非常之弱。但是Powershell的潜力很强,原因只有一个,它是面向对象的,它对Windows的管理方式是基于对象的。

刚开始用Powershell会觉得很难用。那是因为你是在按照Unix/Linux,按照Win2k3的思路去用。等你熟悉了它,你就会发祥它的强大。

之所以说Powershell还很弱,是因为Powershell是基于.Net的对象的。而.Net框架其实目前还很弱,目前的主流程序还不是基于.Net的。如果有一天.Net成为了Windows上的主流,相信Powershell将会更加受到重用。

#4
fcicq
2007-06-26 20:14

楼上的同学批偶好了…
要不是因为n多年没正经用过windows,
才不会跟charlee说这种事情

看来全能的管理员需要多种思维,
一种面向对象,.net
另一种就是传统unix的思维了…

看来2-3年的时间就能把其中一种换成另一种

#5
charlee
2007-06-27 00:49

先谢谢smalldust的批评,我的言论确实比较激进,呵呵。

的确,说Windows是基于面向对象的管理这点我也赞成,VBScript中调用WMI对象的强大功能我也用过。我只是不喜欢Windows的两极分化——对使用者傻瓜,对管理者深不可测。管理者也是普通人,写脚本做管理远不如直接在命令行上敲几个命令来得痛快。

我想起另外一件事儿来。前一阵子我要做一个域名委任到我自己的DNS上,公司的DNS用的是w2k3,结果想尽办法也没找到在哪里设置委任(最后查资料解决了),而在linux下只需简单改改配置文件就可以了。

当然,Linux下配置文件的写法和相关命令等也需要花费大量的时间去学习,所以我也不是说Linux比windows好。

我猜测,微软尽量将它的软件的学习门槛降低,因此做了大量的图形界面,但为了满足GUI的要求于是就发展出了面向对象的WMI和.NET等。然而这种结构使它无法也没必要去像Linux那样通过配置文件来设置系统,其后果也就是导致高级管理的学习门槛提高。

Linux的GUI做得极其烂,也许就是在基于命令行和配置文件的结构上强行套用GUI的结果。

两种方法两种思路,不过对于我这种对系统略知一二又酷爱键盘的人来说,命令行更适合我。

#6
fcicq
2007-06-27 20:04

linux的GUI大概是这样的情况:
因为可调整的选项实在是太多,
又没有必要为了一个一个选项做出对应的选项框
所以就是这样了。
(主要还因为帮助就在手边,选项文件中的注释,而windows的帮助是纯粹的鸡肋,man-pages估计没几个人会删除)

windows奇怪的是注册表中有无数的所谓“隐藏选项”
而那些什么优化软件就是专门对准这些内置GUI没有涉及到的选项进行修改

#7
smalldust
2007-06-30 17:35

不大同意charlee的看法。

因为Linux和Windows完全是2种不同的思路,因此在一个Linux管理员看来Windows简直是“很奇怪”“难以理解”“非常难用”,可是实际上在一个习惯了Windows的Windows管理员来看Linux也是同样的“奇怪”“难以理解”“非常难用”。

此外WMI和.Net根本就不是管理界面,这是一个技术错误。
WMI是Instrumentation,不是Management;.Net是Class Library,更不是Management。这两个更类似Linux下的C函数库,属于API的范畴。

此外,关于所谓“高级管理”的门槛问题,其实Linxu也好Windows也好,既然是“高级”了,就没有那么容易掌握的。Linux不也要记忆很多配置文件的使用方法,各个命令的语法吗?在Windows下也需要记忆,只不过记忆的不是配置文件的语法,而是各个工具的使用方法(当然也包括一些命令行工具)。

此外,Windows的各种文档是极其完善的。以我的经验,要管理Windows,只要多下功夫读一下文档,我想还没有那么难。

最后还有一点,Windows上病毒泛滥正式Windows广泛利用的结果。Linux难道就天生比Windows更能抵抗病毒吗?我看并不然——从Linux OS的根本原理上讲,Linux OS似乎并没有比Windows更能抵抗病毒的理由。只不过是因为Linux OS应用得少(尤其是前几年),所以才比较少有病毒、破解等等。

#8
smalldust
2007-06-30 17:50

To fcicq

你所说的“注册表中的隐藏选项”,

第一,其实它们绝大多数都不是隐藏的——在Technet的文档中都有详细的记述。

第二,那么你为什么会觉得他们是隐藏的呢?其实这跟你说Linux中“因为可调整的选项实在是太多,又没有必要为了一个一个选项做出对应的选项框”是一样的。为了简化UI,不至于让用户看见数十个的checkbox, radiobox而立刻晕掉,这些比较minor的选项就没有表现在UI上。

但是虽然没有表现在UI,依然还是非常工整地做了Document。否则那些所谓的优化软件怎么可能知道这些?

#9
fcicq
2007-06-30 18:39

呵呵,确实多数人不会去看这些文档。
就算有的话,来源也大不相同。

隐藏选项确实不是隐藏的,这偶也清楚。
因为这一份文档不在手边的缘故吗?
偶尔用windows的时候,修改注册表是针对问题而来的,
linux下偶基本可以定向的找到问题的位置,windows就不太容易,至少要动用google :)

同样是对“隐藏选项”的修改,国内的优化软件和国外Tweak-XP的差距,估计就在这文档来源上了(后者的作者肯定是看第一手的资料,不排除前者的作者用监视器去探测后者的行为,然后抄来)。

不过换句话想,如果注册表管理器的旁边附带着许多配置的简短说明,
体积又是个大问题,或许还是没人接受.

#10
koxx
2007-12-27 00:09

我认为这个很大程度上都是个味口问题,然后再是应用领域问题.
没有谁好谁坏,各有所长,用的时候我们各取其精华就行了.
呵呵
以上只是个人拙见.

#11
Johnny tu
2008-06-12 23:17

“但是,再实用也不过是个玩具,就像Resource Kit里面那些工具一样。”
易用性是根本。
PS没有你想象的那么幼稚,因为你完全不懂的她的精髓,甚至PS能做什么你都不知道。
或许你看不到脚本自动化管理的优势,你的观点太果断了。
我挺喜欢你的站点的,虽然我不懂太多WEB的东西,但是我用PS简化了我的工作,帮我处理了很多之前无法完成的任务。

#12
LanEast
2008-07-09 16:59

我也不太喜欢 powershell, 刚看到在 powershell 里面可以直接使用 1 + 2 这样的命令进行数学运算的时候把我吓了一跳, 传统的 windows 命令行里面, 可以直接用 1 来运行 1.exe 或者 1.com, 如果 powershell 可以使用 1 + 2 来进行数学运算, 那么, 就不能再用 1 了运行 1.exe 或者 1.com 了, 不然的话, 谁知道 1 + 2 是在进行数学运算还是运行 1.exe(1.com) 这个程序并且给传递了 + 2 这两个参数?

于是下载了试了一下, powershell 里面运行当前路径下的 1.exe 的时候, 是要用 .\1.exe 这样的方式来运行的, 又一个眼熟的 *nix 方式- -U, 不过我没试不加 .exe 能不能运行

其它的也就没多试, 没兴趣了, 不过也许该试试管道之类的东西, 如果这些东西做的好的话, 那也还不错了, 至少可以弄一些 *nix 下的传统程序的 windows 版用一用, 但是目前的 cmd 一样也可以.

#13
charlee
2008-07-10 09:06

@LanEast ……还是用cygwin吧,价格公道量又足。现在我的PATH中cygwin排在system32前面,一切用cygwin替代

#14
LanEast
2008-07-10 11:17

@charlee
我是专门建立了一个目录,放到 PATH 里面, 然后各处找的 *nix 下的软件放进去的, gnuwin32 之类的. 有时候也从 cygwin 里面找些软件放进去, 需要一个找一个:)

添加评论