yinian 发表于 2018-9-1 12:45:04

Windows PowerShell 学习---第一章 PowerShell介绍

第1章 PowerShell介绍
1.1、什么是PowerShell
  2006年,微软发布一款叫做Windows PowerShell的全新脚本语言。
  PowerShell与命令提示符shell一样,PowerShell可以进行交互性地输入命令。也可以很容易的使用管道和重定向将文件和程序串联起来。
  不过,PowerShell确是一个强大的面向对象的语言,可以用于复杂的脚本编程。
1.2、面向对象的命令shell
  关于cmd
  如果在命令提示符下输入dir,dir命令将会在屏幕打印出目录中的文件名、大小和时间戳等信息。可以使用>重定向操作符将这些文本导入到一个文件中,或者使用|操作符将文本管道连接到另一个程序。例如:
  dir /s /b| sort
  上述命令列出了当前目录及其子目录中的文件,作为一个文本流,并且这些文本发送给了sort程序,sort按照字母顺序对它们排序。
  PowerShell和对象
  PowerShell命令似乎以同样的方式工作,但是它的命令行处理的是对象而不是文本。这个对象就是像Java中面向对象的那个对象。这些对象表示文件、文件夹、Windows设备驱动、网络服务的对象,以及记录了.NET框架库中定义的数百个对象中的任何之一的对象。
  通过管道符号从一条命令流向下一条命令,是对象流。各种PowerShell命令可以生成、操作这些对象,调用这些对象上的方法,修改这些对象的属性,以及从这些对象提取信息。
  关于cmdlet
  Cmdlet读作command-let。
  PowerShell内建命令起名叫做cmdlet。之所以起个这么奇怪的名字可能是因为,它们不像cmd.exe的命令那样完全内建到PowerShell中,也并不是真的像.exe文件一样完全独立于PowerShell。它们以一种新的方式实现,因此需要一个新的单词。
  Cmdlet的一些简单说明

[*]  Cmdlet名称不区分大小写。
[*]  微软程序员选择使用一个名词-动词的惯例来命名cmdlet。
  这样使得该名称更清晰的说明cmdlet实际做什么。

[*]  Cmdlet命令行选项的名称也一样的长。
[*]  一些命令可以缩短到更短。
  例如使用new-alias命令可以为cmdlet起一个短名别名。
  dir命令在PowerShell中输入后发生了什么
  PowerShell dir命令实际上是Get-ChildItemcmdlet的一个别名。可以输入这两个名字中的任何一个,来得到同样的结果。
  不带其他参数的时候,Get-ChildItem针对当前目录中的所有文件和子目录,列出File和Folder对象。如果输入了命令dir而不带参数,Get-ChildItem会显示出File和Folder对象的一个列表,别切由于没有管道或输出重定向,结果会出现在Windows PowerShell命令窗口中。
  当对象进入到PowerShell窗口的时候,PowerShell会针对每个对象打印一行,以漂亮的表格格式,列出每个对象最重要的属性。例如:
  PSE:\py> dir
  
  
  目录: E:\py
  
  
  Mode                LastWriteTime   Length Name
  ----                -------------   ------ ----
  -a---      2015/11/18   18:28         30 a.txt
  -a---          2015/8/6   18:09      1510 t1.py
  -a---         2015/9/13   13:15      320 t2.py
  -a---         2015/9/13   12:57         37 t2.txt
  -a---      2015/11/19   14:40      224 t3.py
  
  
  PSE:\py>
  在各栏顶部的标题,是要显示的属性的名称。这个列表对于cmdlet产生的任何其他对象类型来说都是类似的。
  常规命令提示符环境中的dir命令生成固定格式的文本。PowerShell中的dir cmdlet,生成File和Folder对象的一个列表,PowerShell事后将其格式化为一个文本列表。
  可以使用>符号,将一个PowerShell cmdlet的输出重定向到一个文件;并且会发生相同的事情:对象流格式化为一个漂亮的文本列表。
  PowerShell的创新在于,当使用管道之后所发生的事情。PowerShell允许你将一个对象流从一个cmdlet导向到另一个cmdlet,并且可以修改这些对象的属性并调用对象上的方法,就好像对象真的传递过来一样。只有当对象最终触及屏幕的时候文本才会出现。一个cmdlet可以产生表示文件、计算机、服务和网络对象等对象的一个列表;管道中的一下一个cmdlet可以进行过滤并只是传递它感兴趣的那些对象;下一个cmdlet可能调用方法在对象上执行操作。这真的是PowerShell的独特功能。
  例如删除特定目录下文件
  PSD:\ps> dir
  
  
  目录: D:\ps
  
  
  Mode                LastWriteTime   Length Name
  ----                -------------   ------ ----
  -a---          2017/9/9   17:00          0 1 - 副本(2).txt
  -a---          2017/9/9   17:00          0 1 - 副本(3).txt
  -a---          2017/9/9   17:00          0 1 - 副本(4).txt
  -a---          2017/9/9   17:00          0 1 - 副本.txt
  -a---          2017/9/9   17:00          0 1.txt
  
  
  PSD:\ps> dir|Remove-Item
  PSD:\ps> dir
  PSD:\ps>
  Dir生成了表示目录d:\ps的内容的File和Folder对象的一个列表,并且将其传递给了remove-item命令,remove-item删除了传递给它的任何对象背后的”真实内容”。
  或者可以使用下面的命令。
  (dir d:\ps).delete()
  它会生成同样的file和folder对象的流,并且在每个对象上调用delete方法。结果是相同的:文件都删除掉了。
  还可以这样:
  Remove-itemd:\ps\*.*
  这将会是最为直接的命令,但是这样就没展示出PowerShell和常规命令提示符的区别。
  下面是另一个示例,展示了一个管道命令是如何工作的。
  PSD:\ps> dir
  
  
  目录: D:\ps
  
  
  Mode                LastWriteTime   Length Name
  ----                -------------   ------ ----
  -a---          2017/9/9   17:12          0 1.txt
  -a---          2017/9/9   17:12          0 2.txt
  
  
  PSD:\ps> dir|Where-Object {$_.name -eq "1.txt"}
  
  
  目录: D:\ps
  
  
  Mode                LastWriteTime   Length Name
  ----                -------------   ------ ----
  -a---          2017/9/9   17:12          0 1.txt
  
  
  PSD:\ps> dir|Where-Object {$_.name -eq "1.txt"}|remove-it
  PSD:\ps> dir
  
  
  目录: D:\ps
  
  
  Mode                LastWriteTime   Length Name
  ----                -------------   ------ ----
  -a---          2017/9/9   17:12         0 2.txt
  
  
  PSD:\ps>
  
  
  Dir针对当前目录中的每一个文件生成了一个对象,where-Object用于过滤,过滤出文件名为1.txt的对象,并且用remove-item删除了这个文件。
1.3、基于.NET Framework
  .NET Framework是微软对sun的Java编程语言的应对之策。这里包含了一个强大的类库,可以能够使用图形化用户接口、数据库访问、网络通信、web交互、加密、数值计算等功能。
  .NET Framework的所有功能在PowerShell命令行和脚本中都是可用的。

  .NET Framework>  https://msdn.microsoft.com/zh-cn/library/w0x726c2(v=vs.110).aspx
1.4、一个可扩展的环境
  PowerShell可以运行3种程序:内建命令、外部程序和脚本。
  这类似于常规命令提示符环境,在命令提示符中,你可以使用由cmd程序自身处理的内建命令,可以运行外部程序,或者创建批处理文件,批处理文件是组合各种类型的命令来分布执行一个较为复杂的任务。
  在PowerShell中,内建命令是cmdlet。然而,和命令提示符shell不同,这些内建的命令没有固化到PowerShell程序中,而是通过一个插件方法、作为在硬盘上存储的一个或多个.DLL文件来添加到PowerShell程序中。
  因此,定制的cmdlet可以添加到该环境。思路是:Microsoft和第三方可以为他们的应用程序和服务器添加安装管理cmdlet,以便可以由PowerShell脚本管理它们。例如,Microsoft SQL Sever、Exchange和VMWare服务器拥有定制的cmdlet插件、
1.5、PowerShell环境
  开始à所有程序à附件àWindows PowerShell

[*]  Windows PowerShell 交互式命令环境
[*]  Windows PowerShell ISE 这是一个GUI编辑\调试工具,可以用来开发PowerShell脚本。

1.6、PowerShell版本
  Win 7和Windows server 2008R2默认安装的是v2.0版本
1.7、获取帮助
  首先要学习的最重要的PowerShell命令,帮助了解其他命令的一个命令:get-help。
  Get-help有一个别名help。因此可以互换地使用这些命令名的任何一个。PowerShell有很多内建的帮助。
  一些技巧如下:

[*]  输入单词help来来获取在线帮助系统的一个快速介绍
  PSE:\py> help
  主题
  Get-Help
  
  简短说明
  显示有关Windows PowerShell cmdlet 和概念的帮助。
  
  详细说明
  
  语法
  get-help { |}
  help { |}
   -?
  
  “Get-help”和“-?”以单页形式显示帮助。
  “Help”以多页形式显示帮助。
  
  示例:
  get-help get-process   :显示有关Get-Process cmdlet 的帮助。
  get-help about_signing :显示有关签名脚本的帮助。
  help where-object      :显示有关Where-Object cmdlet 的帮助。
  help about_foreach   :显示有关PowerShell 中foreach 循环的帮助。
  set-service -?         :显示有关Set-Service cmdlet 的帮助。
  
  可以在帮助命令中使用通配符(不使用-?)。
  如果有多个匹配的帮助主题,PowerShell 将显示匹配主题列表。
  如果只有一个匹配的帮助主题,PowerShell 将显示该主题。
  
  示例:
  get-help *      :显示所有帮助主题。
  get-help get-*:显示以get- 开头的主题。
  help *object*   :显示名称中包含“object”的主题。
  get-help about* :显示所有概念性主题。
  
  有关通配符的信息,请键入:
  get-help about_wildcard
  
  备注
  若要了解Windows PowerShell 的有关信息,请阅读以下帮助主题:
  get-command:从cmdlet 代码中获取有关cmdlet 的信息。
  get-member   :获取对象的属性和方法。
  where-object :筛选对象属性。
  about_object :介绍Windows PowerShell 中对象的用法。
  about_remote :说明如何在远程计算机上运行命令。
  
  概念性帮助文件以“about_”的形式命名,例如:about_regular_expression。
  
  概念性帮助文件的名称必须用英文输入,即使在非英文版Windows PowerShell 中也是如此。
  
  帮助命令还可显示cmdlet 的别名。这些别名是更容易键入的代用名或略称。
  例如,Invoke-Command cmdlet 的别名是“remote”。
  
  若要获得别名,请键入:
  
  get-alias
  
  
  
  PSE:\py>
  
  

[*]  在help或get-help后面,你可以输入一个单词、cmdlet名称或部分cmdlet名称。
  也可以输入用引号括起来的一个短语。
  如果有多个主题、多个cmdlet名称或多个索命与输入的内容匹配,get-help会打印出所有匹配的帮助条目的一个列表。然后可以输入help,后面跟着你想要详细了解的特定条目的名称。
  PSC:\Users\Administrator>Get-Help new
  
  Name                              CategorySynopsis                                                                                                                                                                  
  ----                              ----------------                                                                                                                                                                  
  New-WSManInstance               Cmdlet    创建管理资源的新实例。
  New-WSManSessionOption            Cmdlet    创建WS-Management 会话选项哈希表以用作以下WS-Management cmdlet 的输入参数:...                                                                                                            
  New-PSSession                     Cmdlet   建立与本地或远程计算机的持续性连接。
  New-PSSessionOption               Cmdlet    创建包含PSSession 高级选项的对象。
  New-Module                        Cmdlet    创建一个仅存在于内存中的新动态模块。
  New-ModuleManifest                Cmdlet    创建一个新的模块清单。
  New-Event                         Cmdlet    创建新事件。
  New-Alias                         Cmdlet    创建新别名。
  New-TimeSpan                      Cmdlet    创建TimeSpan 对象。
  New-Object                        Cmdlet    创建Microsoft .NET Framework 或COM 对象的实例。
  New-Variable                      Cmdlet    创建新变量
  New-EventLog                      Cmdlet    在本地或远程计算机上创建新事件日志和新事件源。
  New-PSDrive                     Cmdlet    在当前会话中创建Windows PowerShell 驱动器。
  New-Item                        Cmdlet    创建新项。
  New-ItemProperty                  Cmdlet    为项创建新属性并设置该属性的值。例如,可以使用New-ItemProperty 创建和更改注册表值和数据,它们是注册表项的属性。
  New-Service                     Cmdlet    创建新的Windows 服务。
  New-WebServiceProxy               Cmdlet    创建一个Web 服务代理对象,用于在Windows PowerShell 中使用和管理Web 服务。
  
  
  如果确实有一个名称或说明包含了输入的单词或短语,get-help能够打印出该主题的帮助信息。
  PSC:\Users\Administrator> Get-Help new-ite
  
  Name                              CategorySynopsis                                                                                                                                                                  
  ----                              ----------------                                                                                                                                                                  
  New-Item                        Cmdlet    创建新项。
  New-ItemProperty                  Cmdlet    为项创建新属性并设置该属性的值。例如,可以使用New-ItemProperty 创建和更改注册表值和数据,它们是注册表项的属性。
  
  
  
  ____________________________________________________________________________________________________________________________________________________________________________________________________________________
  PSC:\Users\Administrator> Get-Help new-item
  
  名称
  New-Item
  
  摘要
  创建新项。
  
  
  语法
  New-Item [-Path] [-Credential ] [-Force] [-ItemType ] [-Value] [-Confirm] [-WhatIf] [-UseTransaction][]
  
  New-Item -Name[[-Path]] [-Credential ] [-Force] [-ItemType] [-Value ] [-Confirm] [-WhatIf] [-UseTransaction][]
  
  
  说明
  New-Item cmdlet 创建新项并设置该项的值。可创建项的类型取决于该项所在位置。例如,在文件系统中,New-Item 用于创建文件和文件夹。在注册表中,New-Item 用于创建注册表项和注册表条目。
  
  此外,New-Item 还可设置它所创建的项的值。例如,创建新文件时,New-Item 可向该文件添加初始内容。
  
  
  相关链接
  Online version:http://go.microsoft.com/fwlink/?LinkID=113353
  about_Providers
  Get-Item
  Set-Item
  Remove-Item
  Clear-Item
  Invoke-Item
  Rename-Item
  Move-Item
  Copy-Item
  
  备注
  若要查看示例,请键入: "get-help New-Item -examples".
  有关详细信息,请键入: "get-help New-Item -detailed".
  若要获取技术信息,请键入: "get-help New-Item -full".
  
  

[*]  一些cmdlet有额外帮助信息可以使用。
  例如你可以通过输入help new-alias –examples看到使用new-alias cmdlet的一些示例。
  额外信息的常用选项是-examples、-detailed、-full。

[*]  帮助文本出现在控制台窗口中,并且默认地通过more来管道连接的,以便在每一屏只有都会暂停。按下回车键继续下一页面。
  此外,可以比较容易的将帮助信息输出到一个文件中,>x;然后输入notepad x来读取该文本。

[*]  有一些帮助条目覆盖了安装的cmdlets中的每一个,还有一些关于不同主题的额外文章。
  这些文章以about_开头,例如,help about_execution_policies会打印出关于脚本安全限制系统的信息。
  要查看所有这些about条目的一个列表输入help about。
  要根据cmdlet所做的工作的说明中的单词来找到cmdlet,以及当你已经找到感兴趣的一个cmdlet后要了解其命令行语法的话,在线帮助系统很好用。
  在线帮助语法说明

[*]  []方括号表示可选的命令参数
[*]  {}花括号通常表示可以从中选择一系列选项,选项之间带有一个垂直线|。
[*]  尖括号括起来的值是必须自己提供的。
  例如[-Description ]表示一个可选的参数。可以忽略它,或者,输入类似-description “some text”的内容。也可以将其省略为-descr “sometext”。
1.8、别名
  (1)、获取别名列表
  通过输入alias来看到所有内建别名的一个列表。Alias也是get-alias的别名
  PSC:\Users\Administrator> alias
  
  CommandType   Name                            Definition                     
  -----------   ----                            ----------                     
  Alias         %                              ForEach-Object               
  Alias         ?                              Where-Object                  
  Alias         ac                              Add-Content                  
  Alias         asnp                            Add-PSSnapIn                  
  Alias         cat                           Get-Content                  
  Alias         cd                              Set-Location                  
  Alias         chdir                           Set-Location                  
  Alias         clc                           Clear-Content                  
  Alias         clear                           Clear-Host                     
  Alias         clhy                            Clear-History                  
  Alias         cli                           Clear-Item                     
  Alias         clp                            Clear-ItemProperty            
  Alias         cls                           Clear-Host                     
  Alias         clv                            Clear-Variable               
  Alias         compare                         Compare-Object               
  Alias         copy                            Copy-Item                     
  Alias         cp                              Copy-Item                     
  Alias         cpi                           Copy-Item                     
  Alias         cpp                            Copy-ItemProperty            
  Alias         cvpa                            Convert-Path                  
  Alias         dbp                           Disable-PSBreakpoint         
  Alias         del                           Remove-Item                  
  Alias         diff                            Compare-Object               
  Alias         dir                           Get-ChildItem                  
  Alias         ebp                            Enable-PSBreakpoint            
  Alias         echo                            Write-Output                  
  Alias         epal                            Export-Alias                  
  Alias         epcsv                           Export-Csv                     
  Alias         epsn                           Export-PSSession               
  Alias         erase                           Remove-Item                  
  Alias         etsn                           Enter-PSSession               
  Alias         exsn                            Exit-PSSession               
  Alias         fc                              Format-Custom                  
  Alias         fl                              Format-List                  
  Alias         foreach                         ForEach-Object               
  Alias         ft                              Format-Table                  
  Alias         fw                              Format-Wide                  
  Alias         gal                           Get-Alias                     
  Alias         gbp                           Get-PSBreakpoint               
  Alias         gc                              Get-Content                  
  Alias         gci                           Get-ChildItem                  
  Alias         gcm                           Get-Command                  
  Alias         gcs                            Get-PSCallStack               
  Alias         gdr                           Get-PSDrive                  
  Alias         ghy                           Get-History                  
  Alias         gi                              Get-Item                     
  Alias         gjb                           Get-Job                        
  Alias         gl                              Get-Location                  
  Alias         gm                              Get-Member                     
  Alias         gmo                           Get-Module                     
  Alias         gp                           Get-ItemProperty               
  Alias         gps                           Get-Process                  
  Alias         group                           Group-Object                  
  Alias         gsn                           Get-PSSession                  
  Alias         gsnp                            Get-PSSnapIn                  
  Alias         gsv                           Get-Service                  
  Alias         gu                              Get-Unique                     
  Alias         gv                              Get-Variable                  
  Alias         gwmi                            Get-WmiObject                  
  Alias         h                               Get-History                  
  Alias         history                         Get-History                  
  Alias         icm                            Invoke-Command               
  Alias         iex                            Invoke-Expression            
  Alias         ihy                           Invoke-History               
  Alias         ii                              Invoke-Item                  
  Alias         ipal                            Import-Alias                  
  Alias         ipcsv                           Import-Csv                     
  Alias         ipmo                            Import-Module                  
  Alias         ipsn                           Import-PSSession               
  Alias         ise                           PowerShell_ise.exe            
  Alias         iwmi                           Invoke-WMIMethod               
  Alias         kill                            Stop-Process                  
  Alias         lp                              Out-Printer                  
  Alias         ls                           Get-ChildItem                  
  Alias         man                           help                           
  Alias         md                              mkdir                        
  Alias         measure                         Measure-Object               
  Alias         mi                              Move-Item                     
  Alias         mount                           New-PSDrive                  
  Alias         move                            Move-Item                     
  Alias         mp                           Move-ItemProperty            
  Alias         mv                              Move-Item                     
  Alias         nal                           New-Alias                     
  Alias         ndr                           New-PSDrive                  
  Alias         ni                              New-Item                     
  Alias         nmo                           New-Module                     
  Alias         nsn                           New-PSSession                  
  Alias         nv                              New-Variable                  
  Alias         ogv                           Out-GridView                  
  Alias         oh                              Out-Host                     
  Alias         popd                            Pop-Location                  
  Alias         ps                              Get-Process                  
  Alias         pushd                           Push-Location                  
  Alias         pwd                           Get-Location                  
  Alias         r                              Invoke-History               
  Alias         rbp                           Remove-PSBreakpoint            
  Alias         rcjb                            Receive-Job                  
  Alias         rd                              Remove-Item                  
  Alias         rdr                            Remove-PSDrive               
  Alias         ren                           Rename-Item                  
  Alias         ri                              Remove-Item                  
  Alias         rjb                           Remove-Job                     
  Alias         rm                              Remove-Item                  
  Alias         rmdir                           Remove-Item                  
  Alias         rmo                           Remove-Module                  
  Alias         rni                           Rename-Item                  
  Alias         rnp                            Rename-ItemProperty            
  Alias         rp                           Remove-ItemProperty            
  Alias         rsn                           Remove-PSSession               
  Alias         rsnp                           Remove-PSSnapin               
  Alias         rv                           Remove-Variable               
  Alias         rvpa                            Resolve-Path                  
  Alias         rwmi                           Remove-WMIObject               
  Alias         sajb                            Start-Job                     
  Alias         sal                           Set-Alias                     
  Alias         saps                            Start-Process                  
  Alias         sasv                            Start-Service                  
  Alias         sbp                            Set-PSBreakpoint               
  Alias         sc                              Set-Content                  
  Alias         select                        Select-Object                  
  Alias         set                           Set-Variable                  
  Alias         si                              Set-Item                     
  Alias         sl                              Set-Location                  
  Alias         sleep                           Start-Sleep                  
  Alias         sort                            Sort-Object                  
  Alias         sp                           Set-ItemProperty               
  Alias         spjb                            Stop-Job                     
  Alias         spps                            Stop-Process                  
  Alias         spsv                            Stop-Service                  
  Alias         start                           Start-Process                  
  Alias         sv                              Set-Variable                  
  Alias         swmi                           Set-WMIInstance               
  Alias         tee                           Tee-Object                     
  Alias         type                            Get-Content                  
  Alias         where                           Where-Object                  
  Alias         wjb                           Wait-Job                     
  Alias         write                           Write-Output                  
  
  
  
  
  (2)、定义别名
  可以输入下面的命令来定义一个新的别名:
  New-alias -nameshortname –value realcommandname –description “Brief description”
  当关闭PowerShell窗口的时候,别名定义不再继续存在。下一次运行PowerShell的时候,定制的别名将不复存在了。
  如果想要保存别名,可以通过配置文件的形式实现。
1.9、PowerShell配置文件
  可以通过添加定制的别名、把目录添加到路径-环境变量,来定制符合自己偏好的PowerShell环境。因此每次启动PowerShell的时候,如果必须重新输入这些命令,简直是一种痛苦。个脚本
  PowerShell的配置文件是每次启动一个新的实例的时候,PowerShell所运行的命令的一个脚本。
  事实上,无论何时,以何种形式启动PowerShell,它都会在如下两个位置查找配置文件脚本:

[*]  C:\Windows\system32\WindowsPowerShell\v1.0\
[*]  C:\Users\username\Documents\WindowsPowerShell\
  先查找一个名叫profile.ps1的脚本,如果找到就运行它。
  命令行PowerShell随后查找一个名叫Microsoft.PowerShell_profile.ps1的配置文件脚本,如果找到就执行它。
  GUI PowerShell ISE程序首先查找profile.ps1,然后查找Microsoft.PowerShellISE_profile.ps1。

页: [1]
查看完整版本: Windows PowerShell 学习---第一章 PowerShell介绍