Windows Power Shell 入门系列.docx
《Windows Power Shell 入门系列.docx》由会员分享,可在线阅读,更多相关《Windows Power Shell 入门系列.docx(19页珍藏版)》请在冰豆网上搜索。
WindowsPowerShell入门系列
1.WindowsPowerShell入门系列之一:
开始
原文链接:
几年前,脚本孩子得到了驾照,同一天,脚本爸爸带儿子去完成他的首次驾驶。
就像你们可能想象到的一样,脚本孩子十分兴奋,甚至无法等待他的爸爸将车开到预定的地点。
他们停好车后,脚本爸爸和脚本孩子交换了他们的座位。
脚本孩子启动了汽车,认真地调整好了镜子的角度,松开了手刹,并将变速箱调整到了行进档位。
接着,他停止了所有的动作。
为什么停止?
就这么简单:
想开车是一回事,而真的开车是完全不同的另一件事。
你不能责备脚本孩子的犹豫,毕竟,他一直以来都只会骑自行车,他能骑自行车到达许多他想去的地方。
既然如此,那又有什么理由改变呢?
为什么要放弃一个实践证明可行的交通方式,而采用另一种新的,你未必喜欢的,况且对于你来说或许太难的方式呢?
诚然,汽车相比自行车有些优势,但是代价是什么呢?
同样的事情,正发生在在为WINDOWS系统管理工作而设计的新技术上。
现在你们大家都可能听说过WindowsPowerShell,微软的新命令行CONSOLE和脚本语言,或许你们很多人都下载并安装了PowerShell。
(如果你还没有这么做,那么请到下载WindowsPowerShell去查看更多信息)然而,就像脚本孩子一样,也许你也到此为止了。
毕竟,想用新的命令行CONSOLE和脚本语言是一回事,而实际使用这个命令行CONSOLE和脚本语言,是完全不同的另一件事。
你已经使用了几年的GUI,cmd.exe,以及VBScript,你本来就可以实现几乎所有你想实现的系统管理工作。
为什么还要改变呢?
为什么要放弃一个实践证明可行的系统管理方式,而采用另一种新的,你未必喜欢的,况且对于你来说或许太难的方式呢?
这些都是很好的问题和正常的疑虑。
坦率地讲,我们也不能解释这些问题。
但是,我们要说的是:
拿到了驾照,不是说你就再也不能骑自行车了。
交通方式不是唯一的:
拿到小轿车的驾照不等于你就不能骑自行车、开公交车,或者骑摩托车(甚至喘着气步行)。
你宁愿骑自行车?
没问题!
想骑自行车的时候,你就骑自行车,想开汽车的时候,你就开汽车。
如果你发现骑自行车给你带来更多乐趣,那么,你就骑自行车,只在真正需要的时候才开车。
WindowsPowerShell也是一样。
如果你学了PowerShell,难道就意味着你不能再继续使用GUI,并且抛弃你所有的VBScript吗?
当然不是!
许多人都认为:
PowerShell是VBScript和其他管理技术的替代品。
这不正确。
准确地说,PowerShell是VBScript和其他管理技术的补充。
也许经过一段时间的使用,有人会觉得“喔!
我喜欢PowerShell,我想我会把PowerShell用在所有任务”,没问题!
祝你开心,把你的问题告诉脚本专家,让我们看看有什么能帮你的。
另外一些人会觉得:
“我不太肯定,我喜欢PowerShell提供的一些功能,但我已经在VBScript上面花了很多时间。
我宁愿继续使用VBScript。
”,那么会怎么样?
同样没问题!
就像俗话所说的一样:
如果东西没坏,就不要去改变什么。
如果VBScript工作得没有问题,那么就继续使用它。
那么为什么还要考虑WindowsPowerShell?
有几条理由:
第一,它就像是一个驾驶执照,你可能永远用不着它,但最好还是能有一个。
确实,目前看来,PowerShell可能还没有什么大不了的。
PowerShell能做到的大多数系统管理任务,VBScript早就能够做到了。
但另一方面,也有一些例外:
比如,如果你想实现自动化管理微软ExchangeServer2007,你就必须使用PowerShell。
随着时间的推移,这些“例外”可能会演变为规则:
因为PowerShell会被连续地改进、加强(PowerShell2.0正在开发),而VBScript却不会。
不得不承认,你可能现在还不需要PowerShell,但很快,也许就会发生改变。
因此为什么不乘现在你有时间,并且可以根据自己的时间安排进度,提前先开始学习呢?
这个,就是这篇WindowsPowerShellManual手册的初衷:
本文希望用温和且轻松的方式介绍WindowsPowerShell。
就像很多其他手册,我们告诉你怎么踩油门,怎么“驾驶”你的新命令行CONSOLE和新的脚本语言。
其后,我们也要告诉你怎么维护你的新命令行CONSOLE以及脚本语言。
并且请不必担心,除了标准内容,我们也会介绍一下一些附件和自定义的项目。
我们知道你们其中一些人已经安装了WindowsPowerShell,并且从那时起,就坐在一旁想:
“好了,现在该干什么了?
”。
如果你也是这样,好,你可以停止烦恼了,你已经来到了正确的地方。
2.WindowsPowerShell入门系列之二:
启动
原文链接:
当你安装WindowsPowerShell时,安装程序已经为你安装好了一个快捷方式。
对于WindowsXP和Windows2003,快捷方式应该在“开始-所有程序-WindowsPowerShell1.0-WindowsPowerShell”。
没找到快捷方式?
那么PowerShell的默认安装路径在%windir%\System32\WindowsPowerShell\v1.0(例如:
C:
\Windows\System32\WindowsPowerShell\v1.0)。
打开文件夹,双击PowerShell.exe。
当你启动WindowsPowerShell后,会看见类似下图的一个窗口:
如果你在想“咦,这个看上去就像MS-DOS命令行窗口“,对了!
PowerShell正是利用了MS-DOS的命令行SHELL。
这样做至少有一个好处:
因为你可能已经使用了无数次旧的命令行窗口,那么你对如何使用PowerShell已经有了一个很好的基本概念:
键入命令然后按下ENTER键。
例如,你知道你的IP地址吗?
键入ipconfig然后按下ENTER键。
PSC:
\Scripts>ipconfig
WindowsIPConfiguration
EthernetadapterLocalAreaConnection:
MediaState...........:
Mediadisconnected
EthernetadapterWirelessNetworkConnection:
Connection-specificDNSSuffix .:
IPAddress............:
192.168.120.17
SubnetMask...........:
255.255.255.0
DefaultGateway.........:
192.168.120.1
正如上面的例子所暗示的一样,你可以在PowerShell中运行所有的命令行可执行命令。
你甚至可以在PowerShell窗口中运行你的VBScript和批处理文件。
你想在WindowsPowerShell窗口中运行C:
\Scripts\Test.vbs吗?
没问题:
PSC:
\Scripts>test.vbs
Microsoft(R)WindowsScriptHostVersion5.6
Copyright(C)MicrosoftCorporation1996-2001.Allrightsreserved.
ThismessagewasgeneratedbyTest.vbs.
另外,在WindowsPowerShell中你可以找到许多你喜欢的终端命令,比如cd和cls,甚至UNIX命令如ls。
虽然也有些不重要的小小例外,但这些命令几乎会完全按照你期望的方式运行。
你想把当前目录从C:
\Script改变到C:
\Windows吗?
只需要使用一条cd命令:
PSC:
\scripts>cdc:
\windows
PSC:
\WINDOWS>
Or,ifyouprefer:
PSC:
\scripts>chdirc:
\windows
PSC:
\WINDOWS>
一般情况下,这些终端命令都是WindowsPowerShellcmdlets的“别名“。
如果你愿意看一下完整的别名列表,只需要输入下面的命令,并且按下ENTER:
Get-Alias
PowerShell是大小写不敏感的,你也可以这样输入这个命令:
get-alias
甚至这样:
geT-ALIaS
3.WindowsPowerShell入门系列之三:
停、停,等等,什么是Cmdlets?
原文链接:
哦,对了,问得好。
Cmdlets是WindowsPowerShell的命令,它们有些类似命令行工具。
(然而,Cmdlets只能在PowerShell里使用,没有运行PowerShell时,你是不能单独运行PowerShell的Cmdlets的)。
如果没有命令行工具,Cmd.exe也不会有太大作为的,即使它有那么几个内置命令(例如cd和cls)。
许多“高级“的(以及大多数有用的)任务,都是通过命令行工具完成的,比如ipconfig.exe和ping.exe。
WindowsPowerShell也以相似的方式工作:
虽然PowerShell已经有了一些内置的命令,但大多数高级的工作,还是必须通过Cmdlets来完成。
实际上,PowerShell的命令(比如cd)没有更多的含义,它们都只是Cmdlets的别名而已,它们只是Cmdlets的“昵称“。
在这个例子中,cd命令只是一个调用Set-Location这个Cmdlet的另外一种方法。
想切换当前目录到C:
\Windows?
你可以直接使用Set-Location替代cd命令:
PSC:
\scripts>Set-LocationC:
\Windows
PSC:
\WINDOWS>
当然,WindowsPowerShell中包含的Cmdlets功能远远比切换目录强大得多。
举个例子来说:
输入下面的命令,然后看看会发现什么:
PSC:
\WINDOWS>Get-Process
你会得到下列类似的返回结果,所有正在你计算机上运行的进程信息!
Handles NPM(K) PM(K) WS(K)VM(M) CPU(s) IdProcessName
------- ------ ----- ---------- ------ -------------
103 5 1296 3676 32 0.05 2964alg
264 7 4872 10244 70 0.84 920asghost
101 4 3080 4692 38 1.77 2124atiptaxx
168 7 5584 6968 54 0.30 2896BTStackServer
143 5 3712 6640 52 0.30 2776BTTray
752 13 11048 20256 77 2.81 452CcmExec
672 7 2796 6864 68 18.80 1184csrss
139 6 1204 4544 38 0.70 2760ctfmon
很灵活吧?
或许你还想列出C:
\Scripts目录下的所有文件,包括所有子文件夹中的文件,你只需要输入:
Get-ChildItemC:
\Scripts-recurse
我们所做的,只是调用了Get-ChildItem这个Cmdlet。
你也许注意到了我们传递给Get-ChildItem一对参数:
C:
\Scripts和-recurse。
正如你猜到的一样,C:
\Scripts是我们希望列举文件的目录路径名。
你也许还注意到,我们没有把目录路径名称用双引号括起来。
在PowerShell中,有一条规则几乎总是成立:
没有必要把参数名用引号包围起来,除非……你的参数中包含空格。
比如:
假设你要列举在C:
\DocumentsandSettings\KenMyer目录下的所有文件。
由于这个路径中含有空格,因此需要将路径名用双引号包围起来:
Get-ChildItem"C:
\DocumentsandSettings\KenMyer"
我们最初那个命令的第二个参数,-recurse,告诉Get-ChildItem递归地获取目录文件信息。
这是告诉Get-ChildItem获取所有C:
\Scripts的子目录信息(以及子目录的子目录)。
WindowsPowerShell1.0有129个Cmdlet,这些Cmdlets包括文件、文件夹管理,文本文件读写,事件日志管理,甚至可以创建COM和.NET框架的对象。
现在,一切都进行得很好,但是在坐到方向盘后面开始驾驶之前,脚本孩子并没有真正学过开车。
阅读并不能替代实践。
WindowsPowerShell没有什么不同,你也可以阅读有关Cmdlet的相关资料,但是仅仅通过阅读,你不会得到对cmdlets的全面感受,以及它们能做什么,直到你真正坐到方向盘后面开始实际地使用WindowsPowerShell。
当脚本专家无法做到副驾驶位置并给予你指导时(就像“减速!
看路边!
不要这么猛地踩刹车!
”),我们可以做第二好的选择:
我们提供每一个步骤的指引,带领你使用WindowsPowerShell完成一些典型的系统管理场景。
如果你觉得这很有趣(为什么不呢?
),你可以去我们的PowerShell虚拟实验室看一下WindowsPowerShellvirtual。
提示:
这里有一个可以节约时间的小提示。
当cmdlet和参数一起使用时,你可以只输入恰好可以唯一识别这个参数的字符数量。
这是什么意思?
比如,Get-ChildItem只有一个参数(recurse),这个参数以字符r开头。
这意味着我们可以使用下面的命令格式表示-recurse参数:
Get-ChildItemC:
\Scripts-r
如果Get-ChildItem还有一个参数以字母r开头,我们假设它叫-readonly。
在这个例子中,我们可以这样指定-recurse参数:
Get-ChildItemC:
\Scripts-rec
为什么需要输入-rec?
很简单:
我们必须键入足够的字母(3位),才能让cmdlet区分出-recurse和readonly:
•
-recurse
•
-readonly
还是觉得打字太多了?
那好,如果你用gci这个别名(不用说,gci就是Get-ChildItem的别名),你可以用下面的简短命令递归地获取C:
\Scripts目录的内容:
gciC:
\Scripts-r
酷吧!
4.WindowsPowerShell入门系列之四:
我有几个问题要问你们
原文链接:
是的,我们知道:
你想了解另外还有哪些cmdlets,你还想了解这些cmdlets都有什么用。
真实情况是:
我们无法在这篇文章里解答这些问题。
然而,我们可以给出一个容易接受的资源,你可以自己回答这些问题。
首先,WindowsPowerShell是一个非常容易交流而且开放的技术:
你只需要提出问题进行询问,PowerShell会非常高兴地告诉你所有关于它的一切,还记得Get-Alias这个cmdlet吗?
它返回一个所有别名的列表。
与此类似的,还有一条cmdlet:
Get-Command,它返回一个所有cmdlets的列表。
下面是部分Get-Command的返回信息:
PSC:
\scripts>Get-Command
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content[-Path][-Value]