PowerShell基础教程(1)——Windows PowerShell 简介

Windows PowerShell基础教程(1)——Windows PowerShell 简介            <o:p></o:p>

PowerShell 开发代号为Monad  是支持 Windows XP/Server 2003/Vista/Server 2008操作系统的脚本语言。包括 Cmd.exe SHKSHCSH以及BASH Unix在内的大多数外壳程序的操作方式都是在新的进程中执行命令或实用工具程序,并以文本格式向用户显示结果。多年以来,许多文本处理实用工具程序,如sedAWK PERL,都已逐渐发展为支持这种交互模式。<o:p></o:p>

 这些外壳程序也会提供内置于外壳程序中并在外壳程序处理器中执行的命令,例如KSH 中的 typeset 命令和以及 Cmd.exe 中的 dir 命令。在大多数外壳程序中,由于内置命令数量少,从而导致许多实用工具程序应运而生。<o:p></o:p>

针对这一点,Windows PowerShell 有不同的做法。<o:p></o:p>

Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象;<o:p></o:p>

Windows PowerShell 附带了数量庞大的内置命令集和一致的接口;<o:p></o:p>

对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用不同的剖析器,这项特点会使你更容易学会每种命令的使用方式。<o:p></o:p>

其中最棒的就是你完全不需要舍弃已使用习惯的工具,你可以继续在 Windows PowerShell 中使用诸如NetSC Reg.exe 等传统的 Windows 工具。

<o:p></o:p>

Windows PowerShell Cmdlet<o:p></o:p>

Cmdlet (发音如 command-let) 是指在 Windows PowerShell 中用来操作对象的单一功能命令。你可以依据其名称格式来加以辨识 Cmdlet -- 以破折号 (-) 分隔的动词和名词,例如Get-HelpGet-Process Start-Service<o:p></o:p>

在传统的外壳程序中,命令是极为简单 (例如 attrib.exe) 到极为复杂 (例如 netsh.exe) 范围内的可执行程序。<o:p></o:p>

Windows PowerShell 中,大多数Cmdlet 都相当简单,而且设计成与其他 Cmdlet 结合使用。例如,"get" Cmdlet 只提取数据,"set" Cmdlet 创建或修改数据,"format" Cmdlet 只格式化数据,而 "out" Cmdlet 只将输出导向到指定的目的地。每种 Cmdlet 都具备可在输入下列命令时加以显示的说明文件:<o:p></o:p>

get-help <cmdlet 名称> -detailed<o:p></o:p>

Cmdlet 说明文件包括了该 Cmdlet 的描述、命令语法、参数的描述以及示范该 Cmdlet 的使用范例。

<o:p></o:p>

全新的脚本语言<o:p></o:p>

Windows PowerShell 由于下列原因使用其特有的语言,而不沿用既有的任何语言。<o:p></o:p>

◆Windows PowerShell 必须拥有可管理.NET对象的语言。<o:p></o:p>

这种语言必须提供使用 Cmdlet 的一致环境。<o:p></o:p>

这种语言必须支持复杂的工作,而且不能让简单工作变得复杂。<o:p></o:p>

这种语言必须与进行 .NET 程序设计时所使用的高级语言 (例如 C#) 达成一致性。

<o:p></o:p>

Windows 命令和实用工具程序<o:p></o:p>

你可以在 Windows PowerShell 中执行 Windows 命令行程序,而且可以在外壳程序中启动具有图形用户界面的 Windows 程序,例如记事本和计算器。你也可以提取程序所产生的文本,然后用与在使用 Cmd.exe 时的相同方式在此外壳程序中使用该段文本。

<o:p></o:p>

处理对象<o:p></o:p>

也许开始时你可能并未察觉到,当你在 Windows PowerShell 执行工作时,实际上是在使用 .NET 对象。随着你的经验的不断累积,以及对象处理的效果更加明显,你将发现其实自己是在使用对象,甚至最后以对象为思考依据。<o:p></o:p>

从技术上来看,.NET 对象是由数据以及与该数据关联的作业所组成的 .NET 类型例项。不过,你可以将对象当作拥有属性 (类似特性) 和方法 (可以针对对象执行的动作) 的数据实体。<o:p></o:p>

例如,当你在 Windows PowerShell 中取得服务时,实际上你所取得的是代表该项服务的对象。当你在查看服务的相关信息时,你是在查看其服务对象的属性。同样地,当你启动服务时,也就是当你将该项服务的 Status 属性修改为 "started" 时,你正在使用该项服务对象的方法。<o:p></o:p>

所有相同类型的对象都会具有相同的属性和方法,不过,对象的每个实例属性值可以各不相同。例如,每个服务对象都具有 Name Status 属性。不过,各个服务可以拥有不同的名称和状态。<o:p></o:p>

了解这些概念之后,这些对象就不难理解。若要找出 Cmdlet 会取得哪种对象类型,请使用管道运算符 (|) "get" 命令的结果传送到Get-Member 命令。例如,下列命令会将 Get-Service 命令所提取的对象传送Get-Member<o:p></o:p>

get-service | get-member<o:p></o:p>

Get-Member 会显示该服务对象的相关信息,其中包括对象的Typename,以及包含此对象属性和方法的列表。<o:p></o:p>

   TypeName: System.ServiceProcess.ServiceController<o:p></o:p>

<o:p> </o:p>Name                      MemberType    Definition<o:p></o:p>

----                      ----------    ----------<o:p></o:p>

Name                      AliasProperty Name = ServiceName<o:p></o:p>

add_Disposed              Method        System.Void add_Disposed(EventHandler value)<o:p></o:p>

Close                     Method        System.Void Close()<o:p></o:p>

Continue                  Method        System.Void Continue()<o:p></o:p>

如需取得对象类型的相关信息,请复制和粘贴 Typename (例如,System.ServiceProcess.ServiceController) MSDN 中。当找类型时,你就可以读取相关 MSDN 子主题来认识以该类型为基础对象的属性和方法,例如出现在 Windows PowerShell 的对象。<o:p></o:p>

若要找出特定对象的所有属性值,请使用管道运算符 (|) "get" 命令的结果传送到 Format-List 或是 Format-Table 命令。请配合所有 (*) 的值来使用这些 Format cmdlet Property 参数。例如,若要找出系统中 Schedule 服务的所有属性,请输入:<o:p></o:p>

get-service schedule | format-list -property<o:p></o:p>

下面内容显示结果范例。<o:p></o:p>

Name                : Schedule<o:p></o:p>

CanPauseAndContinue : True<o:p></o:p>

CanShutdown         : True<o:p></o:p>

CanStop             : True<o:p></o:p>

DisplayName         : Task Scheduler<o:p></o:p>

DependentServices   : {}<o:p></o:p>

MachineName         : .<o:p></o:p>

ServiceName         : Schedule<o:p></o:p>

ServicesDependedOn  : {RpcSs}<o:p></o:p>

ServiceHandle       : SafeServiceHandle<o:p></o:p>

Status              : Running<o:p></o:p>

ServiceType         : Win32ShareProcess<o:p></o:p>

Site                :<o:p></o:p>

Container           :<o:p></o:p>

如果是第一次接触 Windows PowerShell,你还不需要熟知对象的每个细节,但是要对这个概念略有印象,因为你很快就能够应用这类对象来发挥其最大效益。

<o:p></o:p>

对象管道<o:p></o:p>

使用对象的最大优点就是可以让命令更容易通过管道进行传递,也就是将某个命令的输出传递为另一个命令的输入。这种通信经常必须通过字符串操作将某种格式的输出转换成另一种格式,以及移除标题和栏标题。<o:p></o:p>

Windows PowerShell 会提供以对象为基础 (而非以文本) 的全新互动模式负责接收对象的 cmdlet可以直接处理对象的属性和方法,而不需要进行任何转换或操作。用户可以依据名称引用对象的属性和方法,而不是计算数据在输出中的位置。<o:p></o:p>

在下面范例中,IpConfig 命令的结果会传递 Findstr 命令。管道运算符 (|) 会将位此命令左边的结果传递到命令的右边。在 Microsoft® Windows® PowerShell 中,你并不需要操作字符串或计算数据位移。<o:p></o:p>

PS> ipconfig | findstr "Address"<o:p></o:p>

        IP Address. . . . . . . . . . . . : 172.28.21.5<o:p></o:p>

        IP Address. . . . . . . . . . . . : 172.30.160.225

<o:p> </o:p>

严禁抄袭和谢绝任何形式的私自转载,如需转载,请与本人联系,谢谢!<o:p></o:p>

好书推荐,精彩明天继续······<o:p></o:p>

 向有一定开发经验的朋友们推荐两本.NET方面的经典著作,中文版在国内深受读者好评!<o:p></o:p>

1.C#.NET实战:平台、语言与框架》(原书名:Practical .Net2 and C#2: Harness the Platform, the Language, the Framework<o:p></o:p>

<o:p> </o:p>

(1)       C#传奇经典<o:p></o:p>

(2)       世界众多.NET专家好评如潮的秘籍<o:p></o:p>

(3)       国内四位MVP联袂翻译<o:p></o:p>

(4)       深入全面,知识密集,代码丰富<o:p></o:p>

更多详细信息: http://www.china-pub.com/37188<o:p></o:p>

<o:p> </o:p>

2.ASP.NET 2.0揭秘.1》(原书名: ASP.NET 2.0 Unleashed

 

<o:p></o:p>

(1)   微软技术大师力作<o:p></o:p>

(2)   四位微软MVP联袂翻译,众多MVP鼎力推荐<o:p></o:p>

(3)   代码密集,提供C#VB.NET两种版本<o:p></o:p>

(4)   有史以来最成功的ASP.NET著作的最新版,有“ASP.NET圣经之誉。<o:p></o:p>

更多详细信息: http://www.china-pub.com/36237

<o:p></o:p>

 
  • 0
    点赞
  • 3
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值