特点

PS 中所有命令都叫做 cmdlet (读作 commandlet),具有动名词结合的命名形式,比如:Get-Process、Stop-Service

cmdlet 不区分大小写。

PowerShell 为了脚本环境,扩展了 .NET 的类型系统,简称名为 ETS。

理解“剩余参数值”这一概念。

新版好特性

6.2:

6.0

  • Export-CSV 第一行不再输出类名

快捷键

作用
Esc 全删
Ctrl + Home 向左全删
Ctrl + End 向右全删

语法

@ 运算符的语法

-contains -notcontains -in -notin 集合的包含判断

  • -is [type] 类型判断
  • -as [type] 类型转换

按位运算符

  • -band 按位与
  • -bor
  • -bxor 异或
  • -bno 取反
  • -shl 左移位操作符
  • -shr 右移位操作符

加法 + 的特殊作用

  • 拼接数组
  • 拼接字符串

乘法 * 的特殊作用

  • 重复字符串
  • 重复数组

@() 产生空数组
@{} 产生空对象

流程

foreach 循环

  1. foreach ($item in $list)
  2. {
  3. $item*$item
  4. }

获取命令信息

Get-Command 缩写 gcm,参数 -Verb 确定动词。

成员信息

Get-Member 缩写 gm,可利用管道传参。

扩展类型系统

PSObject

PSMemberInfo

构造方法

在 C# 中:

  • 用 PSObject 类的构造函数对任意对象装箱
  • PSObjec 无参构造函数
  • PSObject.AsPSObject(...) 方法,智能转换

在 PS 中:

  • New-Object PSObject ...
  • [PSObject]::AsPSObject(...) 智能转换函数

输出控制

详见 MS文档

Format-Wide

单属性(默认选名称作为属性)两栏列出。

  • -Column 调整输出的列数

实例:

  1. gps|fw

Format-List

Format-Hex

很实用的十六进制模式输出!

实例:

  1. cat hex_file|Format-Hex|more

Format-Table

  • -Wrap
  • -GroupBy

字符串

与数组之间的转换

-join "|" -split "|"

格式化

  1. "{0}; {1:yyyy-MM-dd};HEX: {2:X4}" -f "J.Fan", $(get-date), 7654321

管道操作

Select-String

开发自定义 cmdlet

cmdlet 类要点:

  • 继承 PSCmdlet
  • 使用命令名标识符 [Cmdlet("verb","noun")]
  • 使用参数标识符 [Parameter]

参数的配置

[Parameter(...)] 里设置:

  • 强制参数 Mandatory=true
  • 位置 Position=123
  • 参数集合
  • 默认参数集合

参数的验证