【189】◀▶ PowerShell 系统学习

参考网站如下:

PowerShell 中文博客      PowerShell 博客——叹为观止

Mater-PowerShell      通过 PowerShell 编写脚本      PowerShell 命令集 Cmdlets

本文索引:

 
1. 认识 Powershell
 
  • 介绍和安装
  • 自定义控制台
  • 快速编辑模式和标准模式
  • 快捷键
    • ALT+F7 清除命令的历史记录
      PgUp PgDn 显示当前会话的第一个命令和最后一个命令
      Enter 执行当前命令
      End 将光标移至当前命令的末尾
      Del 从右开始删除输入的命令字符
      Esc 清空当前命令行
      F2 自动补充历史命令至指定字符
      (例如历史记录中存在Get-Process,按F2,提示"Enter char to copy up to",键入‘s’,自动补齐命令:Get-Proce)
      F4 删除命令行至光标右边指定字符处
      F7 对话框显示命令行历史记录
      F8 检索包含指定字符的命令行历史记录
      F9 根据命令行的历史记录编号选择命令,历史记录编号可以通过F7查看
      左/右方向键 左右移动光标
      上/下方向键 切换命令行的历史记录
      Home 光标移至命令行最左端
      Backspace 从右删除命令行字符
      Ctrl+C 取消正在执行的命令
      Ctrl+左/右方向键 在单词之间移动光标
      Ctrl+Home 删除光标最左端的所有字符
      Tab 自动补齐命令或者文件名
  • 管道和重定向
    • 管道:把上一条命令的输出作为下一条命令的输入。(用“|”实现)
    • 重定向:把命令的输出保存到文件中,‘>’为覆盖,’>>’追加。

-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=< 参考 >=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-

2. Powershell 交互式
 
  • 数学运算
  • 执行外部命令
    • 通过netstat查看网络端口状态
    • 通过IPConfig查看自己的网络配置
    • route print查看路由信息
    • 启动CMD控制台
    • 查找可用的Cmd控制台命令
    • 启动外部程序
  • 命令集
    • Powershell 命令集 cmdlets
  • 别名
    • 查询别名所指的真实cmdlet命令
      Get-Alias -Name ls
      Get-Alias | where{$_.Name.Equals("ls")}
    • 查看可用的别名 & 以某个单词开头的命令
      Get-Alias -Definition "Get-Alias"
      Get-Alias | where{$_.Definition.StartsWith("Remove")}
    • 查看某个命令的别名
      Get-Alias -Definition "Remove*"
      Get-Alias | where{$_.Definition.Equals("Get-Alias")}
    • 创建、删除、保存自己的别名
  • 通过函数扩展别名
  • 执行文件和脚本
    • 关于脚本
    • 执行批处理文件
    • 执行VB脚本文件
    • 执行powershell脚本
    • Powershell调用入口的优先级
3. Powershell 变量
 
  • 定义变量
    • 交换变量的值
    • 查看正在使用的变量
    • 查找变量
    • 验证变量是否存在
    • 删除变量
    • 使用专用的变量命令
    • 变量写保护
    • 变量描述
    • 注意:powershell 不需要显示地去声明,可以自动创建变量,只须记住变量的前缀为$.
                  创建好了变量后,可以通过变量名输出变量,也可以把变量名存在字符串中。但是有个例外单引号中的字符串不会识别和处理变量名。
                  在powershell中变量名均是以美元符”$”开始,剩余字符可以是数字、字母、下划线的任意字符,并且powershell变量名大小写不敏感($a和$A 是同一个变量)。
                  某些特殊的字符在powershell中有特殊的用途,一般不推荐使用这些字符作为变量名。当然你硬要使用,请把整个变量名后缀用花括号括起来。
                  Powershell将变量的相关信息的记录存放在名为variable:的驱动中。如果要查看所有定义的变量,可以直接遍历variable:
  • 自动化变量
    • Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量。这些变量一般存放的内容包括用户信息、配置信息和运行时信息。可以通过Get-Help about_Automatic_variables查看Automatic_variables的帮助。
    • $$:包含会话所收到的最后一行中的最后一个令牌。
    • $?:包含最后一个操作的执行状态。如果最后一个操作成功,则包含 TRUE,失败则包含 FALSE。
    • $^:包含会话所收到的最后一行中的第一个令牌。
    • $_:包含管道对象中的当前对象。在对管道中的每个对象或所选对象执行操作的命令中,可以使用此变量。
    • $Args:包含由未声明参数和/或传递给函数、脚本或脚本块的参数值组成的数组。
    • $Home:包含用户的主目录的完整路径。此变量等效于 %homedrive%%homepath% 环境变量。
    • $Host:包含一个对象,该对象表示 Windows PowerShell 的当前主机应用程序。可以使用此变量在命令中表示当前主机,或者显示或更改主机的属性,如 $Host.version、$Host.CurrentCulture或 $host.ui.rawui.setbackgroundcolor(“Red”)。
    • $Pwd:包含一个路径对象,该对象表示当前目录的完整路径。
  • 环境变量
    • 读取特殊的环境变量
    • 查找环境变量
    • 创建新的环境变量
    • 删除和更新环境变量
    • 环境变量更新生效
  • 驱动器变量
    • 直接访问文件路径
    • 特殊的变量:子表达式
    • 说明:Powershell中所有不是我们自己的定义的变量都属于驱动器变量(比如环境变量),它的前缀只是提供给我们一个可以访问信息的虚拟驱动器.。例如env:windir,象env:驱动器上的一个”文件”,我们通过$访问它,就会返回”文件”的内容。
  • 变量的作用域
    • Powershell所有的变量都有一个决定变量是否可用的作用域。Powershell支持四个作用域:全局、当前、私有和脚本。有了这些作用域就可以限制变量的可见性了,尤其是在函数和脚本中。
  • 变量的类型和强类型
    • 变量可以自动存储任何Powershell能够识别的类型信息,可以通过$variable的GetType().Name查看和验证Powershell分配给变量的数据类型。
    • 定义变量时可以在变量前的中括号中加入数据类型。例如定义一个Byte类型的变量,因为Byte的定义域为[0,255],一旦尝试使用一个不在定义域中的值赋给该变量就会显示一条错误信息。
  • 变量的幕后管理

-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-

4. Powershell 数组和哈希表
 
  • 命令返回数组
  • 创建数组
    • 在Powershell中创建数组可以使用逗号。
    • 对于连续的数字数组可以使用一个更快捷的方法:$a=1..36
    • 空数组:$a=@()
    • 1个元素的数组:$a=,"moss"
    • PowerShell创建Byte数组例子
    • 字符串数组创建:300个元素
      $str = New-Object String[] 300
      
  • 访问数组
    • 数组的元素可以使用索引寻址,第一个元素的索引为0,第i个元素的索引为i-1,最后一个元素的索引为Count-1,但是Powershell为了使用方便,直接可以将 -1 作为最后的一个元素的索引($books[-1])。
    • 从数组中选择多个元素:$books[0,3,5,12]
    • 将数组逆序输出:$books[($books.Count)..0]
    • 给数组添加元素:$books+="元素4"
    • 给数组删除元素:$num=$num[0..1]+$num[3]
  • 复制数组
    • 数组属于引用类型,使用默认的的赋值运算符在两个变量之间赋值只是复制了一个引用,两个变量共享同一份数据。这样的模式有一个弊病如果其中一个改变也会株连到另外一个。所以复制数组最好使用 Clone() 方法,除非有特殊需求。
  • 强类型数组
    • Powershell数组一般具有多态性,如果你不指定元素的具体类型,解释器会自动选择合适的类型存储每个元素。如果要统一限制所有元素的类型,可是使用类型名和一对方括号作为数组变量的类型。这样每当赋值时,会自动类型检查。如果目标数据类型不能转换成功,就会抛出一个异常。[int[]] $nums=@()
  • 使用哈希表
    • 创建哈希表:使用@{}创建哈希表,使用哈希表的键访问对应的值。
    • 在哈希表中插入新的键值:$Student.Name="令狐冲"
    • 哈希表值的更新和删除:$stu.Remove("Name")
    • 使用哈希表格式化输出
5. Powershell 管道
 
  • 使用管道
    • 面向对象的管道
    • 转换命令执行的结果为文本
    • 管道的处理模式
    • 管道命令的阻塞

    • 常用的对管道结果进一步处理的命令有:
      Compare-Object: 比较两组对象。
      ConvertTo-Html: 将 Microsoft .NET Framework 对象转换为可在 Web 浏览器中显示的 HTML。
      Export-Clixml: 创建对象的基于 XML 的表示形式并将其存储在文件中。
      Export-Csv: 将 Microsoft .NET Framework 对象转换为一系列以逗号分隔的、长度可变的 (CSV) 字符串,并将这些字符串保存到
      一个 CSV 文件中。
      ForEach-Object: 针对每一组输入对象执行操作。
      Format-List: 将输出的格式设置为属性列表,其中每个属性均各占一行显示。
      Format-Table: 将输出的格式设置为表。
      Format-Wide: 将对象的格式设置为只能显示每个对象的一个属性的宽表。
      Get-Unique: 从排序列表返回唯一项目。
      Group-Object: 指定的属性包含相同值的组对象。
      Import-Clixml: 导入 CLIXML 文件,并在 Windows PowerShell 中创建相应的对象。
      Measure-Object: 计算对象的数字属性以及字符串对象(如文本文件)中的字符数、单词数和行数。
      more: 对结果分屏显示。
      Out-File: 将输出发送到文件。
      Out-Null: 删除输出,不将其发送到控制台。
      Out-Printer: 将输出发送到打印机。
      Out-String: 将对象作为一列字符串发送到主机。
      Select-Object: 选择一个对象或一组对象的指定属性。它还可以从对象的数组中选择唯一对象,也可以从对象数组的开头或末尾选
      择指定个数的对象。
      Sort-Object: 按属性值对象进行排序。
      Tee-Object: 将命令输出保存在文件或变量中,并将其显示在控制台中。
      Where-Object: 创建控制哪些对象沿着命令管道传递的筛选器。
  • 对象转换成文本
    • 显示隐藏的对象属性(ls | Format-Table * -Wrap)
    • 格式化管道结果(Get-Command -Verb format)
    • 显示指定的属性(ls | Format-Table Name,Length,LastWriteTime)
    • 使用通配符(Get-Process i* | Format-Table Name,pe*64)
    • 脚本块作为属性(ls | Format-Table Name,{ [int]($_.Length/1kb) })
    • 修改列标题
    • 优化列宽度(C:Powershell> ls | Format-Table -AutoSize)
  • 排序和分组
    • 使用Sort-Object和Group-Object可以对管道结果进行分组。
  • 过滤管道结果
    • 通过管道可以过滤某些对象和对象的属性,这个功能很实用,因为很多时候我们并不是对所有的结果感兴趣,可能只会对某些结果感兴趣。如果要过滤对象可以使用Where-Object;如果要过滤对象的属性,可以使用Select-Object;如果要自定义个性化的过滤效果可以使用ForEach-Object。最后如果想过滤重复的结果,可是使用Get-Uinque。

    • 筛选管道结果中的对象
    • 选择对象的属性
    • 限制对象的数量
    • 逐个处理所有管道结果
    • 删除重复对象
  • 分析和比较管道结果
    • 使用Measure-Object和Compare-Object可以统计和对比管道结果。Measure-Object允许指定待统计对象的属性。Compare-Object可以对比对象前后的快照。

    • 统计和计算
    • 比较对象
    • 检查对象的变化
    • 比较文件的内容
    • 保存快照以便后期使用
  • 导出管道结果
    • 吸收输出结果(有的命令无论执行成功或失败都会有输出,有时不需要这些输出时可以使用 | Out-Null,这条命令的作用和 >$null 一样。)
      修改管道格式
      强制以文本显示
      Excel导出对象
      Html导出对象

      Powershell 输出的命令:
      Out-Default 将输出发送到默认的格式化程序和默认的输出 cmdlet。
      Out-File 将输出发送到文件。
      Out-GridView 将输出发送到单独窗口中的交互表。
      Out-Host 将输出发送到命令行。
      Out-Null 删除输出,不将其发送到控制台。
      Out-Printer 将输出发送到打印机。
      Out-String 将对象作为一列字符串发送到主机。
  • 扩展类型系统
6. Powershell 使用对象
 
  • 对象=属性+方法
  • 属性(对象是什么)
    • 属性可以描述一个对象,对象的属性可以被Powershell自动转换成文本,并且输出到控制台。
  • 方法(对象能做什么)
    • 方法定义了一个对象可以做什么事情。当你把一个对象输出在控制台时,它的属性可能会被转换成可视的文本。但是它的方法却不可见。列出一个对象的所有方法可以使用Get-Member命令,给“MemeberType”参数 传入“Method”。
    • 几乎每个对象都有一些继承自父类的方法,这些方法并不是该对象所特有的方法,而是所有对象共有的方法。
      Equals 比较两个对象是否相同
      GetHashCode 返回一个对象的数字格式的指纹
      GetType 返回一个对象的数据类型
      ToString 将一个对象转换成可读的字符串
    • 一定要注意,在调用一个方法前,必须知道这个方法的功能。因为有的命令可能比较危险,例如错误地修改环境变量。调用一个方法,通过圆点加圆括号:$Host.GetType()

    • 过滤内部方法
    • 调用方法
    • 低级函数
    • 多个方法的签名
    • 创建选择菜单
  • 使用真实的对象工作
    • 调用一个对象的方法时,省略括号可以获取一个方法的详细定义信息。
  • 调用静态方法
    • 任何.NET对象都可以通过GetType()方法返回它的类型,该类型中有一个FullName属性,可以查看类型的完整名称。
    • 每一个类型都可以包含一些静态的方法,可以通过方括号和类型名称得到类型对象本身,然后通过Get-Memeber命令查看该类型支持的所有静态方法。
    • System.DateTime类支持的静态方法非常实用,使用Parse方法将一个字符串转换成DateTime类:[System.DateTime]::Parse("2012-10-13 23:42:55")
    • 使用isLeapYear方法判断闰年
    • 另一个常用的类为Math类,在Math类中定义了很多实用的静态方法:[Math]::Sin([Math]::PI/2)

    • 查看感兴趣的.NET类型
          1对象类型转换
          2调用静态的方法
          3根据类型创建实例
    • 查看程序集
          1搜索指定类型
          2搜索方法
  • 创建对象
7. Powershell 条件判断
 
  • 条件表达式
    • Powershell 中的比较运算符
      -eq :等于
      -ne :不等于
      -gt :大于
      -ge :大于等于
      -lt :小于
      -le :小于等于
      -contains :包含
      -notcontains :不包含

    • 求反
      求反运算符为-not 但是像高级语言一样”! “ 也支持求反。

    • 布尔运算
      -and :和
      -or :或
      -xor :异或
      -not :逆

    • 比较数组和集合
      过滤数组中的元素
      验证一个数组是否存在特定元素
  • Where-Object
  • IF-ElseIf-Else
    • Where-Object 进行条件判断很方便,如果在判断后执行很多代码可以使用IF-ELSEIF-ELSE语句。语句模板:
      If( 条件满足 )
      {
          如果条件满足就执行代码
      }
      Else
      {
          如果条件不满足
      }
      
  • Switch
    • 测试取值范围
          1没有匹配条件
          2多个条件匹配
    • 比较字符串
          1大小写敏感
          2使用通配符
    • 同时处理多个值
    • 语句模板:
      switch( 变量 )
      {
          值1 {等于 值1 时执行此代码}
          值2 {等于 值2 时执行此代码}
          值3 {等于 值3 时执行此代码}
          ...
      Default { 不符合上述值的时候执行此代码 } }
8. Powershell 循环
 
  • ForEach-Object
    • Powershell管道就像流水线,对于数据的处理是一个环节接着一个环节,如果你想在某一环节对流进来的数据逐个细致化的处理,可是使用ForEach-Object,$_ 代表当前的数据。
  • Foreach
    • Foreach-object 为cmdlet命令,使用在管道中,对管道结果逐个处理,foreach为遍历集合的关键字。
    • 语句模板:
      foreach ( 变量 in 数组 )
      {
          执行代码
      }
      
  • Do While
    • 语句模板:
      do { 执行代码 } while( 条件语句 )
      
      or
      
      while( 条件语句 ) 
      { 
          如果条件满足就执行代码
      }
      
  • For
    • 如果你知道循环的确切次数可以使用For循环,For循环属于计数型循环,一旦达到最大次数,循环就会自动终止。下面的例子通过循环求1-100的数列和。
      for($i=1;$i -le 100;$i++)
      {
          $sum+=$i
      }
      
  • Switch
    • Switch 本是多路分支的关键字,但是在Powershell中由于Switch支持集合,所以也可以使用它进行循环处理。
9. Powershell 函数
 
  • 定义新函数
    • 函数的结构由三部分组成:函数名,参数,函数体
      Function FuncName (args[]) 
      { 
          code; 
      }
      
  • 处理函数的参数
    • Powershell函数可以接受参数,并对参数进行处理。函数的参数有3个特性:
          任意参数:内部变量$args 接受函数调用时接受的参数,$args是一个数组类型。
          命名参数:函数的每一个参数可以分配一个名称,在调用时通过名称指定对应的参数。
          预定义参数:函数在定义参数时可以指定默认值,如果调用时没有专门指定参数的值,就会保持默认值。

    • $args 万能参数
      给一个函数定义参数最简单的是使用$args这个内置的参数。它可以识别任意个参数。尤其适用哪些参数可有可无的函数。
  • 指定函数的返回值
    • 一个或多个返回值
      Powershell不像其它编程语言,它的函数可以有多个返回值。如果你直接调用函数,返回值会在控制台输出。当然你也可以将结果存储在一个变量中进一步处理。总结一下,如果一个函数返回一个值,像其它编程语言一样,这个值包括她的类型信息会直接返回。但是如果遇到多个返回值,Powershell会将所有的返回值自动构造成一个Object数组。可以通过索引访问数组。

    • Return语句
      Powershell会将函数中所有的输出作为返回值,但是也可以通过return语句指定具体的我返回值。
      Return 语句会将指定的值返回,同时也会中断函数的执行,return后面的语句会被忽略。
  • 查看支持的函数
    • Powershell已经提供了许多用户能够使用的预定义函数,这些函数可以通过Function:PSDrive虚拟驱动器查看。
    • Powershell中的这些预定义的函数可以做很多重要的工作。
      Clear-Host 清除屏幕的缓存
      help,man 查看命令的帮助文档
      mkdir,md 通过new-Item创建子目录
      more 分屏输出管道结果
      prompt 返回提示文本
      TabExpansion Tab键的自动完成提示
      X: 调用Set-Location定位到指定的驱动器根目录
  • 函数 过滤器 管道
10. Powershell 脚本
 
  • 编写和运行脚本
    • 一个Powershell仅仅是一个包含Powershell代码的文本文件。
    • 通过重定向创建脚本:将脚本文件通过@‘ ’@闭合起来。
  • 给脚本传递参数
    • $args返回所有的参数,传递给一个函数或者一个脚本的参数都保存在$args变量中。
    • $args数组参数,默认情况下,传递给一个Powershell脚本的参数类型为数组
      变量的作用域
    • Powershell默认使用全局作用域global: ,但是在函数和脚本中分别使用函数作用域function:和脚本作用域script: 。一旦脚本执行结束,存在于脚本作用域的变量也会消失。但是有一点,如果一个变量在脚本外定义,在脚本内没有定义,在脚本内使用时会把外面的变量引渡过来。
  • 增强脚本的可读性
    • 加载函数类库和执行脚本类似,只需要在前面增加一个句号,中间有空格。
  • 创建管道脚本
  • 自动执行脚本之profile
    • Powershell支持四种可以用来初始化任务的profile脚本。应用之前要弄清楚你的初始化是当前用户个人使用,还是所有用户。如果是个人使用,可以使用”当前用户profile“,但是如果你的初始化任务是针对所有用户,可是使用“所有用户profile”。
      Profile 描述 位置
      所有用户 所有用户共有的profile $pshomeprofile.ps1
      所有用户(私有) powershell.exe 中验证。 $pshomeMicrosoft.PowerShell_profile.ps1
      当前用户 当前用户的profile $((Split-Path $profile -Parent)”profile.ps1″)
      当前用户(私有) 当前用户的profile;只在Powershell.exe中验证 $profile
  • 脚本的数字签名

-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-

11. Powershell 错误处理
 
  • what-if
    • 如果你想知道一个确定的命令会产生什么影响,你可以进行试运行。这时,Powershell不会执行任何对系统有影响的操作,只会告诉你如果没有模拟运行,可能产生什么影响和后果。通过-whatif 参数。
    • 确认程序提供了6个选项。
      是 – 仅继续执行操作的下一步骤。
      全是 – 继续执行操作的所有步骤。
      否 – 跳过此操作并继续执行下一操作。
      不全是 – 跳过此操作及所有后续操作。
      挂起 – 暂停当前管道并返回到命令提示符。键入“exit”可继续执行该管道。
      帮助 – 提供帮助信息
  • 定义容错度
  • 识别和处理异常
  • 错误记录:详细错误
  • 理解异常
  • 在函数和脚本中捕获异常
  • 断点执行
12. Powershell 命令发现和脚本块
 
  • 发现命令
  • 调用操作符
    • 调用操作符“&”虽然简短,但是给我们执行Powershell命令提供了很大的方便。如果你之前将Powershell命令存储在了一个字符串中,或者一个变量中。此时,调用操作符就可以将字符串直接解释成命令并执行,如果在Powershell控制台中,你只须要输入即可。
    • 调用操作符只能接受单个命令
    • 通过命令名称唯一标识一条命令,从高到底,依次为:
      Alias(1)
      Function(2)
      Filter(2)
      Cmdlet(3)
      Application(4)
      ExternalScript(5)
      Script (-)
  • 使用语句块
    • 脚本块是一种特殊的命令模式。一个脚本块可以包含许多的 Powershell命令和语句。它通常使用大括号定义。最小最短的脚本块,可能就是一对大括号,中间什么也没有。可以使用之前的调用操作符“&”执行脚本块。
    • 执行表达式
      另外还有一条Powershell命令集,Invoke-Expression,这条命令的逻辑就是将一条字符串传递给调用操作符。这里有一点需要注意,在传递给invoke-expression的字符串使用了单引号,单引号可以防止变量被替换。
  • 执行上下文
13. Powershell 文本和正则表达式
 
  • 定义文本
    • 使用引号可以定义字符串,如果想让自己定义的字符串原样输出,可以使用单引号。
    • 如果想让自己的定义的字符中的变量被内容替换,表达式被执行可以使用双引号。
    • 文本中的特殊字符
      如果文本放置在一个闭合的双引号中,Powershell解释器回去寻找特殊字符。在这方便主要有两种特殊字符,一个是变量的前缀“$”,一个是反引号“`”位于数字键1左边。
    • Powershell转义字符
      在其它编程语言中喜欢将反斜杠作为转义字符,但是在Powershell中扮演转义字符角色的不是反斜杠,而是反引号“`”字符串中的反引号,会对紧跟随其后的字符进行特殊处理。例如下面的,在一个字符串中输出双引号,和换行符。
    • Powershell转义字符表
      Powershell转义字符表
      转义字符 描述
      `n 换行符
      `r 回车符
      `t 制表符
      `a 响铃符
      `b 退格符
      `’ 单引号
      `” 双引号
      `0 Null
      反引号本身
    • Here strings 定义多行文本
      @“字符串”@格式定义多行文本,尤其是较长的文本,再好不过了。
      这里要注意开始和结束的标记必须另起一行。
  • 13.1 使用特殊文本命令
    • 字符串操作符
      • 格式化字符串
        • 格式化操作符 –F 能够将一个字符串格式化为指定格式,左边是包含通配符的字符串,右边是待插入和替换的字符串。
        • 可以在-F的左边放置多个字符串通配符,类似.NET中的String.Format方法。-F右边相应的值或表达式也须要使用逗号分隔。
      • 设置数字格式
        • 格式化操作符 -f 可以将数值插入到字符串,每一个通配符都有统一的结构。
          {index[,alignment][:format]}:
               Index:索引编号用来识别把哪个值用来替换通配符。例如你可能使用了多个通配符,或者同一个通配符使用了多次,甚至多种格式。此时,索引编号是唯一能够识别哪个值将用来替换。另外两个选项Alignment和Format则作为辅助条件。
              Alignment:正数和负数,可以指定目标值是否左对齐或者右对齐。还可以支持数值以指定的宽度显示,如果数值的实际宽度大于指定宽度,则忽略指定宽度。如果数值宽度小于指定宽度,剩余的部分会以空白填充,这一选项非常利于制表。
              Format:数值可以被格式化成许多不同的类型,下面会预览这些你可能会用到一些格式概要。格式化语句比较特殊,大小写敏感,这和PowerShell中其它语句的使用稍有不同。
        • 数字格式:
          ☀☀☀<< 举例 >>☀☀☀
          用0补齐数字,例如数组$str3[],利用for循环实现将数组先乘以500,然后不足4位的前面加0.
          $str3=0..11
          
          for($i=0;$i -le 11;$i++)
          {
              $str3[$i]=500*$i
              $str3[$i]="{0:0000}" -f $str3[$i]
          }
          


          符号

          类型

          调用示例

          输入结果

          #

          数字占位符

          “{0:(#).##}” -f $value

          (1000000)

          %

          百分号

          “{0:0%}” -f $value

          100000000%

          ,

          千分符

          “{0:0,0}” -f $value

          1,000,000

          ,.

          一千的整数倍

          “{0:0,.} ” -f $value

          1000

          .

          小数点

          “{0:0.0}” -f $value

          1000000.0

          0

          占位符 0

          “{0:00.0000}” -f $value

          1000000.0000

          c

          货币

          “{0:c}” -f $value

          ¥1,000.00

          d

          十进制

          “{0:d}” -f $value

          1000000

          e

          科学计数法

          “{0:e}” -f $value

          1.000000e+006

          e

          指数通配符

          “{0:00e+0}” -f $value

          10e+5

          f

          保留小数位

          “{0:f}” -f $value

          1000000.00

          g

          常规

          “{0:g}” -f $value

          1000000

          n

          千分符

          “{0:n}” -f $value

          1,000,000.00

          x

          十六进制

          “0x{0:x4}” -f $value

          0x4240

        • 日期格式:

          符号

          类型

          调用示例

          输出

          d

          短日期格式

          “{0:d}” –f $value

          2013/6/1

          D

          长日期格式

          “{0:D}” –f $value

          2013年6月1日

          t

          短时间格式

          “{0:t}” –f $value

          “{0:t}” –f $value

          T

          长时间格式

          “{0:T}” –f $value

          23:18:50

          f

          完整日期和时间(短)

          “{0:f}” –f $value

          2013年6月1日 23:18

          F

          完整日期和时间(长)

          “{0:F}” –f $value

          2013年6月1日 23:18:50

          g

          标准时间 (短)

          “{0:g}” –f $value

          2013/6/1 23:18

          G

          标准时间长 (长)

          “{0:G}” –f $value

          2013/6/1 23:18:50

          M

          月日格式

          “{0:M}” –f $value

          6月1日

          r

          RFC1123 日期格式

          “{0:r}” –f $value

          Sat, 01 Jun 2013 23:18:50 GMT

          s

          排序日期格式

          “{0:s}” –f $value

          2013-06-01T23:18:50

          u

          通用日期格式

          “{0:u}” –f $value

          2013-06-01 23:18:50Z

          U

          通用排序日期 GMT格式

          “{0:U}” –f $value

          2013年6月1日 15:18:50

          Y

          年/月格式模式

          “{0:Y}” –f $value

          2013年6月

          自定义日期格式

          dd

          一个月中天

          “{0:dd}” -f $value

          01

          ddd

          星期的缩写

          “{0:ddd}” -f $value

          周六

          dddd

          完整星期

          “{0:dddd}” -f $value

          星期六

          gg

          纪年法

          “{0:gg}” -f $value

          公元

          hh

          小时0-12

          “{0:hh}” -f $value

          11

          HH

          小时0-23

          “{0:HH}” -f $value

          23

          mm

          分钟

          “{0:mm}” -f $value

          18

          MM

          月份

          “{0:MM}” -f $value

          06

          MMM

          月份缩写

          “{0:MMM}” -f $value

          六月

          MMMM

          完整月份

          “{0:MMMM}” -f $value

          六月

          ss

          “{0:ss}” -f $value

          55

          tt

          上午或者下午

          “{0:tt}” -f $value

          下午

          yy

          两位数字的年份

          “{0:yy}” -f $value

          13

          yyyy

          四位数字的年份

          “{0:yyyy}” -f $value

          2013

          zz

          不包含分钟的时区

          “{0:zz}” -f $value

          +08

          zzz

          包含分钟的时区

          “{0:zzz}” -f $value

          +08:00

      • 固定宽度的制表输出
    • String 对象方法
    • String 类方方法
  • 简单模 式匹配
  • 13.2 正则表达式
    • 定义模式
      • 正则表达式元素可以归为三大类。
        字符:字符可以代表一个单独的字符,或者一个字符集合构成的字符串。
        限定符:允许你在模式中决定字符或者字符串出现的频率。
        定位符:允许你决定模式是否是一个独立的单词,或者出现的位置必须在句子的开头还是结尾。

      • 正则表达式代表的模式一般由四种不同类型的字符构成。
        文字字符:像”abc”确切地匹配”abc“字符串
        转义字符:一些特殊的字符例如反斜杠,中括号,小括号在正则表达式中居于特殊的意义,所以如果要专门识别这些特殊字符需要转义字符反斜杠。就像”[abc]”可以识别”[abc]”。
        预定义字符:这类字符类似占位符可以识别某一类字符。例如”d”可以识别0-9的数字。
        自定义通配符:包含在中括号中的通配符。例如”[a-d]”识别a,b,c,d之间的任意字符,如果要排除这些字符,可以使用”[^a-d]”。
      • 元素 描述
        . 匹配除了换行符意外的任意字符
        [^abc] 匹配除了包含在中括号的任意字符
        [^a-z] 匹配除了包含在中括号指定区间字符的任意字符
        [abc] 匹配括号中指定的任意一个字符
        [a-z] 匹配括号中指定的任意区间中的任意一个字符
        a 响铃字符(ASCII 7)
        c or C 匹配ASCII 中的控制字符,例如Ctrl+C
        d 匹配数字字符,等同于[0-9]
        D 匹配数字以外的字符
        e Esc (ASCII 9)
        f 换页符(ASCII 15)
        换行符
        回车符
        s 白空格(空格,制表符,新行)
        S 匹配白空格(空格,制表符,新行)意外的字符
        制表符
        uFFFF 匹配Unicode字符的十六进制代码FFFF。例如,欧元符号的代码20AC
        v 匹配纵向制表符(ASCII 11)
        w 匹配字符,数字和下划线
        W 匹配匹配字符,数字和下划线意外的字符
        xnn 匹配特殊字符,nn代表十六进制的ASCII 码
        .* 匹配任意数量的字符(包括0个字符)
      • 限定符
        元素 描述
        * 匹配一个元素0次或者多次(最大限度地匹配)
        *? 匹配前面的元素零次或者多次(最小限度地匹配)
        .* 匹配任意个数的任意字符(包括0个字符)
        ? 匹配上一个元素0次或者1次(最大限度地匹配)
        ?? 匹配上一个元素0次或者1次(最小限度地匹配)
        {n,} 匹配上一个元素至少n次
        {n,m} 匹配上一个元素n至m次
        {n} 匹配上一个元素n次
        + 匹配上一个元素一次或者多次
    • 同时搜索不同的词语
    • 大小写敏感
    • 在文本中搜索信息
    • 搜索不同的关键字
    • 深入使用子表达式
    • 贪婪与非贪婪匹配
    • 搜索字符串片段
    • 替换字符串
    • 使用反向引用
    • 在文本行的开始插入文本
    • 删除多余的空格
    • 搜索和移除重复的单词
    • 非捕获组
  • 13.3 文本处理实例

-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-

14. PowerShell 处理 XML
 
15. PowerShell 文件系统
 
  • 前言
    • 非常重要的文件系统命令概览

      别名 描述 命令
      cp, cpi 复制文件或者目录 Copy-Item
      Dir, ls, gci 列出目录的内容 Get-Childitem
      type, cat, gc 基于文本行来读取内容 Get-Content
      gi 获取指定的文件或者目录 Get-Item
      gp 获取文件或目录的属性 Get-ItemProperty
      ii 使用对应的默认windows程序运行文件或者目录 Invoke-Item
      连接两个路径为一个路径 Join-Path
      mi, mv, move 移动文件或者目录 Move-Item
      ni 创建新文件或者目录 New-Item
      ri, rm, rmdir,del, erase, rd 删除空目录或者文件 Remove-Item
      rni, ren 重命名文件或者路径 Rename-Item
      rvpa 处理相对路径或者包含通配符的路径 Resolve-Path
      sp 设置文件或路径的属性 Set-ItemProperty
      Cd,chdir, sl 更改当前目录的位置 Set-Location
      提取路径的特定部分,例如父目录,驱动器,文件名 Split-Path
      测试指定的路径是否存在 Test-Path
  • 访问文件和目录
    • Dir 默认的参数为-Path。假如你当前文件夹下有个文件名为“.a[0].txt“,因为方括号是PowerShell中的特殊字符,会解释器被解析。为了能正确获取到”.a[0].txt”的文件信息,此时可以使用-LiteralPath参数,它会把你传进来的值当作纯文本。
  • 导航文件系统
    • 用于指定相对路径的四个重要的特殊字符

      字符

      意义 示例 示例描述

      .

      当前目录 Ii . 用资源浏览器打开当前目录

      ..

      父目录 Cd .. 切换到父目录

      驱动器根目录 Cd 切换到驱动器的顶级根目录

      ~

      家目录 Cd ~ 切换到PowerShell初始化的目录
       
    • 存储在环境变量中的Windows特殊目录

      特殊目录

      描述 示例
      Application data 存储在本地机器上的应用程序数据 $env:localappdata
      User profile 用户目录 $env:userprofile
      Data used incommon 应用程序公有数据目录 $env:commonprogramfiles
      Public directory 所有本地用户的公有目录 $env:public
      Program directory 具体应用程序安装的目录 $env:programfiles
      Roaming Profiles 漫游用户的应用程序数据 $env:appdata
      Temporary files(private) 当前用户的临时目录 $env:tmp
      Temporary files 公有临时文件目录 $env:temp
      Windows directory Windows系统安装的目录 $env:windir
       
    • .NET的方法environment类下面的GetFolderPath()方法。GetFolderPath()目录的类型可以在枚举值SpecialFolder中找到。
    • Path类还包含了许多用来合并或者获取目录特定信息的额外方法。你只需要在下面表格中列出的方法中前加[System.IO.Path]::,比如:

      构造路径的方法

      方法 描述 示例
      ChangeExtension() 更改文件的扩展名 ChangeExtension(“test.txt”, “ps1”)
      Combine() 拼接路径字符串; 对应Join-Path Combine(“C: est”, “test.txt”)
      GetDirectoryName() 返回目录对象:对应Split-Path -parent GetDirectoryName(“c: estfile.txt”)
      GetExtension() 返回文件扩展名 GetExtension(“c: estfile.txt”)
      GetFileName() 返回文件名:对应Split-Path -leaf GetFileName(“c: estfile.txt”)
      GetFileNameWithoutExtension() 返回不带扩展名的文件名 GetFileNameWithoutExtension(“c: estfile.txt”)
      GetFullPath() 返回绝对路径 GetFullPath(“. est.txt”)
      GetInvalidFileNameChars() 返回所有不允许出现在文件名中字符 GetInvalidFileNameChars()
      GetInvalidPathChars() 返回所有不允许出现在路径中的字符 GetInvalidPathChars()
      GetPathRoot() 返回根目录:对应Split-Path -qualifier GetPathRoot(“c: estfile.txt”)
      GetRandomFileName() 返回一个随机的文件名 GetRandomFileName()
      GetTempFileName() 在临时目录中返回一个临时文件名 GetTempFileName()
      GetTempPath() 返回临时文件目录 GetTempPath()
      HasExtension() 如果路径中包含了扩展名,则返回True HasExtension(“c: estfile.txt”)
      IsPathRooted() 如果是绝对路径,返回为True; Split-Path -isAbsolute IsPathRooted(“c: estfile.txt”)
  • 使用目录和文件工作
    • 创建新目录
    • 创建新文件
    • 创建新驱动器
    • 读取文本文件的内容
    • 处理逗号分隔的列表
    • 解析文本内容和提取文本信息
    • 读取二进制的内容
    • 移动和复制文件和目录
    • 重命名文件和目录
          1批量重命名
          2更改文件扩展名
          3整理文件名
    • 删除文件和目录
          1删除目录内容
          2删除目录和它的内容
  • 管理访问权限

-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-=<->=-=<=>=-=<->=-=<·>=-

16. PowerShell 注册表
 
原文地址:https://www.cnblogs.com/alex-bn-lee/p/5045495.html