(3)Powershell基础知识(一)

上节介绍了Windows自带的Powershell开发工具:命令行行窗体和集成开发环境ISE的启动及一些配置注意事项,具体细节使劲戳Powershell开发工具程序员


这一节介绍Powershell的基础知识,包含如下知识点shell

  1. Powershell的一些特性编程

  2. 理解Powershell中的一些重要概念bash

  3. 理解Powershell中命令的命名规范网络

  4. 总结
    编程语言


Powershell的一些特性ide

Powershell对命令行和脚本环境添加了许多新的功能,以此来改善Powershell的管理和脚本脚本交互能力,想对于其余的命令脚本,Powershell有如下特性。
函数

  • 可发现特性工具

    可发现特性是指,Powershell能够轻松发现(找出)与执行具体操做有关的命令。好比如今想对Window服务,即对service进行操做(中止或是启动服务等其它操做),能够经过如下命令来查找与操做service有关的命令。    学习

PS C:\Documents and Settings\Administrator> Get-Command *service

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Get-Service                                         Get-Service [[-Name] <String[]>] [-ComputerName ...
Cmdlet          New-Service                                         New-Service [-Name] <String> [-BinaryPathName] <...
Cmdlet          Restart-Service                                     Restart-Service [-Name] <String[]> [-Force] [-Pa...
Cmdlet          Resume-Service                                      Resume-Service [-Name] <String[]> [-PassThru] [-...
Cmdlet          Set-Service                                         Set-Service [-Name] <String> [-ComputerName <Str...
Cmdlet          Start-Service                                       Start-Service [-Name] <String[]> [-PassThru] [-I...
Cmdlet          Stop-Service                                        Stop-Service [-Name] <String[]> [-Force] [-PassT...
Cmdlet          Suspend-Service                                     Suspend-Service [-Name] <String[]> [-PassThru] [...

    从输出结果中,能够看到能够获取指定的service,新建新的service,重启,设置service的一些状态,启动,中止等操做。注意在Definition列,内容并无彻底显示,能够后面会讲到如何调节其输出格式。

    经过Powershell的发现特性,找到具体的命令以后,就能够经过Get-Help cmdlet 了解有关该mdlet 的详细信息。例如,要显示有关 Get-Service cmdlet 的帮助,在命令行输入如下命令。

Get-Help Get-Service

    若是要查看该输出结果的成员信息,好比该输出结果有哪些成员,方法,返回类型等,能够经过管道运算符(|)将其执行结果传递给Get-Member,如输入如下命令能够查看Get-Service输出对象的成员信息(如下是部分输出信息)。

PS C:\Documents and Settings\Administrator> Get-Service | Get-Member


   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
RequiredServices          AliasProperty RequiredServices = ServicesDependedOn
Disposed                  Event         System.EventHandler Disposed(System.Object, System.EventArgs)
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)

其中MemberType列是成员信息的属性,是属性,事件,仍是方法等。

  • 一致性

    一致性是Powershell主要优势之一,同一的接口下降了管理任务的复杂性。例如若是你学会了获取Get-Servce的帮助信息,那么就学会了查看全部命令的帮助信息。

  • 交互式脚本环境

    PowerShell 将交互式环境和脚本环境组合在一块儿,从而容许访问命令行工具和 COM 对象,同时还可利用 .NET Framework 类库 (FCL) 的强大功能(能够加载调用cmd,exe,dll外部,在企业级实战部分会介绍到)。Powershell对命令提示符进行了改进,提供了带有多种命令的交互式环境。PowerShell 扩展了交互用户和脚本编写者的能力,从而更易于进行相关做业脚本的开发,系统管理。

  • 面向对象

    虽然能够经过以文本方式键入命令与 PowerShell 进行交互,但 Windows PowerShell是基于对象的,而不是基于文本的。意味着Powershell命令的输出即为对象。能够将输出对象发送给另外一条命令以做为其输入(经过管道运算符"|")。所以,Windows PowerShell 为曾使用过其余 shell的人员提供了熟悉的界面,同时引入了新的、功能强大的命令行范例。经过容许发送对象(而不是文本),它扩展了在命令之间发送数据的概念。

  • 右命令行很容易过分到脚本

    使用 Windows PowerShell,能够很方便地从以交互方式键入命令过渡到建立和运行脚本。能够在 Windows PowerShell命令提示符下键入命令以找到可执行任务的命令。随后,可将这些命令保存到脚本或历史记录中,而后将其复制到文件中以用做脚本。


理解Powershell中的一些重要概念

在开始Powershell的实际开发以前,理解如下概念很是有助于了解Powershell设计思想。

  • 命令不是基于文本的,是基于.Net对象的

    与传统的命令(如perl,bat,cmd,bash等)不一样,Powershell可处理对象(结构化的信息),而不仅是显示在屏幕上的字符串,命令输出始终提供可能会须要的额外信息,经过标准的Powershell对象操做命令,便可操做命令返回数据的任何部分。

  • 命令系列是可扩展的


    许多接口(例如 Cmd.exe)均不能提供直接扩展内置命令集的方法。能够建立在 Cmd.exe 中运行的外部命令行工具,但这些外部工具不能提供服务(例如帮助集成),并且 Cmd.exe 不能自动识别它们是不是有效的命令。

    PowerShell 中的本机二进制命令cmdlet能够经过建立并使用管理单元添加到 Windows PowerShell 中的 cmdlet 进行补充。与任何其余接口中的二进制工具相同,Windows PowerShell 管理单元已通过编译。可使用它们将 Windows PowerShell 提供程序以及新的 cmdlet 添加到 shell 中。最重要的是,Powershell可以识别这些新添加的命令是不是有效的命令。


    除此以外,Powershell还能够调用外部的.ps1脚本文件,也能够在脚本中建立本身的函数。

  • Windows Powershell处理控制台输入和显示

    输入命令时,PowerShell 始终会直接处理命令行输入。PowerShell 还能够设置屏幕上显示的输出格式。这个功能十分重要,由于它能够减小处理每一个命令所需的工做,并确保在使用任何一种 cmdlet 时都能始终以相同方式进行操做。这样能够简化脚本工具开发人员和使用者的工做。

    举个例子,对于请求和显示帮助,传统的命令行工具都有它们本身的方案。一些命令行工具使用 /? 来触发帮助显示,而其余一些命令行工具则使用 -?/H 甚至 //。其中一些工具会在 GUI 窗口中显示帮助,而不以控制台显示。某些复杂工具(例如应用程序更新程序)会先将内部文件解包,而后才显示其帮助。若是使用的参数不正确,则该工具可能会忽略键入的内容,并自动开始执行任务。
    但在 PowerShell 中输入命令时,它会自动分析并预处理所输入的所有内容。若是在 PowerShell cmdlet 中使用 -? 参数,则始终表示“显示此命令的帮助”。脚本命令开发人员无需分析该命令,他们只需提供帮助文本。即便是在 PowerShell 中运行传统命令行工具,也可使用 PowerShell 的帮助功能。PowerShell 将对参数进行处理并将结果传递给外部工具。

  • Windows Powershell使用某些C#语法

    因为 PowerShell 基于 .NET Framework,所以 PowerShell 的语法功能和关键字与 C# 编程语言中所使用的语法功能和关键字十分相似。换句话说,学习C#和Powershell是相互促进的,若是您不是 C# 程序员或是彻底不了解C#,也没有关系,了解任何一门面对对象的编程语言都有助于学习Powershell。若是已经熟悉 C#,则这些类似性能够帮助你更轻松地了解PowerShell。


理解Powershell中命令的命名规范

    使用大多数命令行界面时,一般会遇到如下问题。

  • 了解命令名称及命令参数须要花费大量的时间。

    使用新命令或参数时,一般没法使用已知的名称,而必须查找和了解新的名称。考虑到界面是如何从一个小工具集通过不断添加的新增功能发展而来,就很容易了解为什么其结构会是非标准的。尤为是使用命令名称时,这一点多是必然的,由于每种命令都是单独的工具。

  • 命令没有统一的模式,所以只能经过记住经常使用的每种命令和每一个参数来了解这些命令行界面。

    大多数命令都是为管理操做系统或应用程序的元素(如服务或进程)构建的。这些命令有不一样的名称,它们可能属于或不属于一个系列。例如,在 Windows 系统上可使用 net startnet stop 命令来启动和中止服务。另外还有一个名为 sc 的更通用的 Windows 服务控制工具,这一彻底不一样的名称与 net 服务命令的命名模式不一致。对于进程管理,Windows 使用 tasklist 命令来列出进程,并使用 taskkill 命令来终止进程。

    可是不能使用 net start 命令来启动远程计算机上的服务sc 命令能够启动远程计算机上的服务,可是,若要操做远程计算机上的服务,必须在其名称前添加双反斜杠做为前缀。例如,若要在名为 PC01 的远程计算机上启动后台打印程序服务,您能够键入 sc \\PC01 start spooler。若要列出在 PC01 上运行的任务,须要使用 /S(表明“system”)参数,并提供以下所示的不带反斜杠的名称 PC01:tasklist /S PC01
    尽管服务与进程之间有很大的技术差异,但它们都是计算机上具备定义完整的生命周期的可管理元素示例。可能须要启动或中止服务或进程,或得到全部当前正在运行的服务或进程的列表。换而言之,尽管服务和进程并不相同,但从概念上来看,对服务或进程执行的操做一般是相同的。PowerShell 经过统一的模式(相似的命令)来减小要了解和使用 cmdlet 所需知道的不一样名称数。

Powershell命令集cmdlet经过使用"动词-名词"名称以减小命令记忆量。

    PowerShell 使用"动词-名词"命名系统,其中的每一个 cmdlet 名称均由标准动词、连字符和特定名词组成。PowerShell 动词并不是必定为英语动词,但其表示 Windows PowerShell 中的特定操做。名词与全部语言中的名词十分相似,名词所受的限制较少,但它们应始终描述命令的操做对象。

    举几个动词和名词的示例,来讲明他们是如何减小您了解命令所需的记忆量。PowerShell 具备 Get-ProcessStop-ProcessGet-ServiceStop-Service 等命令。

若是仅有两个名词和两个动词,则一致性并不会极大地简化您了解这些命令的过程。可是,假定是由 10 个动词和 10 个名词组成的一组标准命令名称,则您只需记住 20 个单词,而使用这些单词能够构成 100 个不一样的命令名称。

    一般,只需经过命令的名称便可识别其用途,而对新命令应使用什么样的名称,这一般也是显而易见的。例如,计算机关闭命令可能为 Stop-Computer。用于列出网络上的全部计算机的命令可能为 Get-Computer。用于获取系统日期的命令为 Get-Date

Get-Command 中使用 -Verb 参数能够列出全部包含特定动词的命令(在后面的文章中会详细介绍 Get-Command)。例如,若要查看全部使用动词 Get 的 cmdlet,输入:

PS C:\Documents and Settings\Administrator> Get-Command -Verb Get

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Get-Acl                                             Get-Acl [[-Path] <String[]>] [-Audit] [-Filter <...
Cmdlet          Get-Alias                                           Get-Alias [[-Name] <String[]>] [-Exclude <String...
Cmdlet          Get-AuthenticodeSignature                           Get-AuthenticodeSignature [-FilePath] <String[]>...
Cmdlet          Get-ChildItem                                       Get-ChildItem [[-Path] <String[]>] [[-Filter] <S...
Cmdlet          Get-Command                                         Get-Command [[-ArgumentList] <Object[]>] [-Verb ...
Cmdlet          Get-ComputerRestorePoint                            Get-ComputerRestorePoint [[-RestorePoint] <Int32...
Cmdlet          Get-Content                                         Get-Content [-Path] <String[]> [-ReadCount <Int6...
...

-Noun 参数用处更大,由于使用该参数能够查看影响同一对象类型的全部命令。例如,若要显示可用于管理服务的命令,请输入如下命令

PS C:\Documents and Settings\Administrator> Get-Command -Noun Service

CommandType     Name                                                Definition
-----------     ----                                                ----------
Cmdlet          Get-Service                                         Get-Service [[-Name] <String[]>] [-ComputerName ...
Cmdlet          New-Service                                         New-Service [-Name] <String> [-BinaryPathName] <...
Cmdlet          Restart-Service                                     Restart-Service [-Name] <String[]> [-Force] [-Pa...
Cmdlet          Resume-Service                                      Resume-Service [-Name] <String[]> [-PassThru] [-...
Cmdlet          Set-Service                                         Set-Service [-Name] <String> [-ComputerName <Str...
Cmdlet          Start-Service                                       Start-Service [-Name] <String[]> [-PassThru] [-I...
Cmdlet          Stop-Service                                        Stop-Service [-Name] <String[]> [-Force] [-PassT...
Cmdlet          Suspend-Service                                     Suspend-Service [-Name] <String[]> [-PassThru] [...

总结

经过学习本节内容,应当掌握如下内容

  1. Powershell中的可发现,一致性,面向对象等特性

  2. Powershell是基于.Net对象,而不是基于文本的。

  3. Powershell中"动词-名词"的命名规范。

相关文章
相关标签/搜索