您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > powershell
【探索PowerShell】【一】初识时间:2011-04-2551ctomelvilloPowerShell是一个由微软的提供的全新shell程序,使用了全新的命令提示和脚本环境。使用PowerShell会给系统管理员带来什么?学习PowerShell的好处又是什么?如果你已经有了管理并使用VBScript的经验,相信你已经知道答案了。ActiveDirectory域现在已经变得更加庞大和复杂,对于那些被束缚在GUI和Microsoft管理控制台上的管理员们,PowerShell将使他们获得自由!不知道各位有没有登陆到每个server、client修改注册表的体验,或者批量处理文件,批量配置……当你遇到这些问题,会怎么做?手动配置?还是运行一个脚本来解决问题?经常使用VBScript的人当然会选择后者,但是他们会问,为什么我还要学习PowerShell?答案很简单:PowerShell使用了面向对象方法,基于.Net,这是VBScript所不能提供或者支持的。PowerShell是基于对象而不是基于文本如果你已经熟练使用cmd.exe和批处理脚本,那么我认为你需要一些时间进行概念性的转变。PowerShell与那些使用VBScript和其他编程语言的概念有着根本性的区别,传统的命令提示符的输出是基于文本的,而在PowerShell中则不会。它看起来像文本,但它实际上是一个对象。这就是为什么我说PowerShell强大的原因,因为一个PowerShell命令(对象)的输出可以输入到另一个命令中去,而无需加入额外的代码。而在传统的脚本语言中,如果你想让一个命令传递到另一个命令,就需要额外的代码来把需要传递的命令转换成第二个命令可以理解的数据与格式。另外牵扯到一个问题,什么是对象?这个听起来很熟悉,“在ActiveDirectory域内的一切都是对象。”例如我们的服务器、电脑、打印机、安全组、组策略、用户等,有了PowerShell,我们就可以很轻松的与这些对象进行互动:查看信息,以及创建、修改或删除。对PowerShell命令进行自定义PowerShell命令被称为的cmdlet。PowerShell自带有超过100个cmdlet。PowerShell的开发团队利用他们无穷的想象力为这些cmdlet创造了别名,使我们能够尽可能的利用我们已经习惯的传统的命令来操作,如:dir、cd、del、copy等等。即使是UNIX的上的老手,也可以轻松使用诸如ls、man等命令。为了最大程度上迎合用户习惯,简化操作,PowerShell允许用户为cmdlet创建自己定义的别名,甚至创建自己的cmdlet。PowerShell是一个命令行解释器和脚本环境概括地讲就是PowerShell具有两全其美。DOS仅仅是一个命令行解释器,输入命令,然后得到输出,当然,也可以使用批处理文件,但批处理文件从本质上只是对输入的命令这一操作的简化。在VBScript中,可以利用WSH(Windows脚本主机),但是并不能在命令提示符状态下输入VBScript代码。PowerShell与它们都不同却又相似,它不仅可以输入命令,而且可以在命令行构建脚本。以后的教程会详细讲述这个。在接下来的几周内我将连续贴出PowerShell的基础教程,为大家提供一个坚实的基础,良好的开端。我将主要围绕以下方面展开:•WindowsPowerShell的控制台的配置与定制•PowerShell基础:cmdlet、参数、命令类型……•使用PowerShell的命令格式输出•使用Windows文件系统•WMI和.NET•在PowerShell中使用变量•应用开始,我们将集中围绕PowerShell的基本命令与shell特性,了解其基本使用。还需要了解一点,PowerShell的一个强大功能是能够在命令提示符下建立和测试代码。在以往的经验中,我们往往先写出脚本,然后测试它,进而对之前所写的脚本进行调整,就好像在VBScript中那样。但是PowerShell的强大之处就在于,你可以在命令行之后再写的脚本,在后面的讲解中会详细介绍。【探索PowerShell】【二】基本操作时间:2011-04-2551ctomelvilloPowerShell控制台打开PowerShell,显示如下界面:命令提示符前缀为:PSC:\Users\MaRuiPS的意思为正在运行PowerShell中,而C:则是我的主目录驱动器号,不同机器会有所不同。最最最基本的操作与cmd、dos、sh等相同。cmdlet命令虽然有超过一百条新的PowerShell命令需要去学习,但是,与大多数命令行界面一样,PowerShell命令已经被标准化。它使用“动词-名词”的命名形式作为一个cmdlet命令。该标准大大降低了学习难度,并且对所有cmdlet命令提供了更好的描述性帮助。要查看当前PowerShell中所有的cmdlet,使用如下命令:get-commandenter接下来,让我们使用特定的动词列出所有的命令。下面是使用动词Get“筛选后的cmdlet:get-command-VerbGetenter【探索PowerShell】【二】基本操作(2)时间:2011-04-2551ctomelvillo其他命令同样可以使用这种筛选方法。这样子组合之后,上百条命令就很好记忆了。简单举例其他基本常用命令:get-helpenterget-help*enterget-serviceenterget-helpget-serviceenter试试下列按键吧,看看会发生什么:PageUp-跳转到历史缓冲区中的第一个命令。PageDown-跳转到历史缓冲区中的最后一个命令。UpArrow-向后显示历史缓冲区命令。DownArrow-向进显示历史缓冲区命令。Home-跳跃到命令行的开头。End-跳跃到命令行的末尾。Ctrl+LeftArrow-到最左侧字符。Ctrl+RightArrow-到右侧单词结尾。Tab-完成输入(在控制台中键入GET-C和按TAB键,再按下Tab试试)。F7键-显示历史缓冲区(使用向上和向下箭头键来浏览缓冲区)。或者在别的窗口复制一段文字,在PowerShell上按鼠标右键试试,类似于sh下的鼠标中键的作用。在PowerShell命令中,还有一类被称之为“原生窗口命令”。例如我们可以从PowerShell命令行启动services.msc的GUI窗口。services.mscenter既然我们使用PowerShell,那么就可以无视services.msc了。下列是对服务进行操作的命令以Brower服务为例:get-service-nameBrowserenterstop-service-nameBrowserenterget-service-nameBrowserenter【探索PowerShell】【二】基本操作(3)时间:2011-04-2551ctomelvillo需要注意的是:在使用cmdlet停止服务时不会有任何迹象来向用户告知该服务已经成功停止的。同样,启动服务命令:start-service-nameBrowserenter启动服务后也不会有任何反馈性迹象表明服务正常启动,除非服务启动失败。这一段的命令就简单介绍到这里,是不是很简单?只需要记着“动词-名词”这一形式就可以了!下面贴出PowerShell中的基本运算语法示例PSC:\99+100199在PowerShell中,可以非常简单的进行数学运算,你所要做的仅仅是输入表达式这么简单,结果就会自动输出,在此过程中不需要使用其他shell中的打印语句等,运算结束后得到的执行结果也不会被随意丢弃掉,而是直接输出,往后我们会学习如何将结果进行丢弃。PSC:\HelloWorld!HelloWorld!HelloWorld”,就像上面的数学计算,直接输入字符串即可。使用过Perl脚本的会觉得这里很熟悉,因为PowerShell很大程度上借鉴了Perl的优点。PSC:\(7-2*3)/50.2对于四则混合运算,PowerShell也能很好的支持。在表达式中可以使用()来调整运算符的优先级和结合性。需要注意的是,PowerShell支持若干种不同的数据类型,例如:int、float、double等等。往后我们会接触到类型转换等内容。PSC:\(2+2)*3/7c:\fun.txtPSC:\typec:\fun.txt1.71428571428571同样,除了屏幕输出外,我们可以将结果存储到临时文件,然后使用type命令将文件的结果取回。PSC:\$n=(2+2)*3PSC:\$n12PSC:\$n/71.71428571428571另外,我们还可以通过对变量赋值,将运算结果存储到变量中,并使用该变量进行后续的计算。PSC:\$files=dirPSC:\$files[3]PSC:\$files=dirPSC:\$files[3]Directory:Microsoft.PowerShell.Core\FileSystem::C:\ModeLastWriteTimeLengthName---------------------------d-r--2010-3-2621:25ProgramFiles作为一个面向对象的语言,我们可以简单的将命令返回的结果赋值给变量。这里的$files中包含了目前所处目录下的目录项的对象集合,使用普通数组访问语法就可以获得该位置的对象。例子中显示了ProgramFiles目录。注意:PowerShell中的数组下标是从0开始的,这点与.NetCommonLanguageRuntime完全一致。这一节就到这里。有兴趣的童鞋可以继续关注下一节内容。【探索PowerShell】【三】PowerShell下使用Aliases时间:2011-04-2551cto博客marui不知道各位有没有接触过linux,我才疏学浅,对alias的认识是从linux上来的。Linux常用的Bash命令也是有上百个,虽然一般情况下命令都非常简短,不过很多时候需要大量的却是大量的参数,这样,对很多初学者来说,背命令变成为最头疼的事情,也使得很多Linux初学者望而生畏。因此,在linux下,很常用的就是alias,也就是别名。当然,PowerShell很好的借鉴了这一点。这一节就来介绍PowerShell下的Aliases。在PowerShell中,为了习惯于使用,可以使用别名代替命令。例如,Windows老手可以利用像dir、move、type、cls等,当然,为了吸纳更多使用者,PowerShell还提供了对Linux的别名设置,如:ls、pwd、mv、man、cat等。为PowerShell设置别名的目的,是为了向新用户提供一个能够快速交互的shell。这里的alias,指的是cmdlet的替代名称。例如,dir”替代的是Get-ChildItem”。在这一节,将介绍两种类型的alias:内置的别名适用于Windows,Unix和预定义的PowerShellcmdlet的替代名称。使用以下命令来浏览PowerShell的alias列表:get-aliasenter细心的童鞋可以发现,Get-ChileItem这个cmdlet拥有多个alias,如:dir、ls、gci。我们可以尝试这些命令,结果都是一样的,如下图:【探索PowerShell】【三】PowerShell下使用Aliases(2)时间:2011-04-2551cto博客marui从本质上讲,我们只是运行了四次get-chileitem。内置别名的存在,使得我们在shell中工作时更加顺手而高效。不过说实在的,作为用户,我们没有必要多多的关注一个cmdlet都有哪些alias,我们只要用好自己习惯的就行了。用户自定义的PowerShell的Alias设置alias的命令例:为名为'get-ser
本文标题:powershell
链接地址:https://www.777doc.com/doc-5161645 .html