ch02 基本概念
主要介绍四个基本概念: 变量, 数据类型, 对象, 和数据结构.
注意, 一切皆对象
变量
显示与修改变量
变量以美元符 $ 开头. 显示变量的值, 直接在命令行中输入回车. 例如: $MaximumHistoryCount

修改变量的值, 直接使用赋值运算符 (=).

PowerShell 中的变量分为: 用户自定义变量, 以及内置的自动变量.
用户自定义变量
PowerShell 有一个严格模式, 严格模式下使用了未定义的变量会报错. 开启严格模式使用:
Set-StrictMode -Version Latest

定义变量就是在赋值 (与 Python 的语法类似, 没有单独的声明语法, 直接赋值).
除了直接赋值得到变量外, PowerShell 还可以使用命令来控制变量
命令:
Set-Variable和Set-Variable.
Set-Variable -Name color -Value blue
Get-Variable -Name color
使用命令, 变量名前不需要美元符.
使用
Get-Variable可以获取所有的变量.

自动变量
自动变量为系统内置变量, 并且不建议修改.
$null 变量
表示空值, 与其他编程语言中的 null 逻辑一致. 这里目的在与创建变量, 但不给初始值.
逻辑上与早期 C 的用法规则一样. 声明变量必须初始化.
$LASTEXITCODE
PowerShell 允许调用外外部程序, 应用程序结束时会返回一个状态码. 该变量的作用是存储最近一个程序结束时的返回状态码.
偏好设置变量
所谓偏好设置变量, 是一类用于控制各种输出流的默认行为的变量. 包括: Error, Warning, Verbose, Debug 和 Information. 要查询偏好设置变量可以使用:
Get-Variable -Name *Preference

例如: 默认报错显示红色提示信息, 如果不希望显示, 为变量 $ErrorActionPreference 设置为 'SlientlyContinue' 即可忽略错误.

修改会默认 Continue, 详细信息可以使用 Get-Help about_Preference_Variables (国内好像用不了).
$ErrorActionPreference = 'Continue'
数据类型
数据类型很多, 不一一介绍. 可以简单总结为 弱类型 语言.
布尔类型:
$true和$false.整数和浮点数. 整数类型为
Int32. 浮点数默认为Double. 可以使用[Float]来进行类型转换 ([Int32]1.5).字符串. 使用单引号 (双引号也行)进行括起来. 双引号允许直接插值 (
$引导即可). 单引号不行.$v = 123 echo "输入 $v" # => 输入 123 echo '输入 $v' # => 输入 $v
可使用
<variable>.GetType().Name来获得类型.
对象
一切皆对象
查看属性
使用 Select-Object 命令, 可以查看变量的属性 (变量也是对象)
Select-Object -InputObject <variable> -Property *
使用属性的语法与 C# 一致, 用点访问.
Get-Member 命令
Get-Member -InputObject $num

看起来就是 C# 的样子.
调用方法
逻辑上与一般编程语言一样, 使用点语法.
$num.GetType().name
数据结构
这里介绍: 数组, ArrayList, 以及哈希表.
数组
定义数组
$arr = @(item1, item2, ...)
使用 @ 加圆括号来定义.
读取数组
使用 [index] 索引来引用. 与其他编程语言一致.
越界访问会报错. 获取长度可以使用
Length属性
修改数组中元素
通过索引修改, 与 C# 一样.
将元素添加到数组
这里的逻辑与 C# 中的字符串一样, 数组是不可变的, 添加元素是生成了新数组.
可以使用 + 或 += 来实现. 例如:
$arr = $arr + <element>
$arr += <element>

判断可以使用
Equals()方法.
ArrayList
定义语法与数组一样, 不同的是使用类型矫正语法将其修改为 ArrayList.
$list = [System.Collections.ArrayList]@(1, 2, 3)
类型果然很多. 看起来这些类型与 C# 类型是兼容的.
ArrayList 中的修改内容的方法可以使用.

注意 Add() 方法会返回新增元素的索引. 如果不希望在终端输出, 可以将其值赋值给 $null.
与 Linux 中
> /dev/null逻辑一样.
哈希表
语法:
$kv = @{
key = value;
...
}
使用 @ 和花括号, 键值对用 等号 连接, 每一个键值对用分号分隔.
- 读取元素使用
[key]索引来访问. 也可以直接用点语法. - 可以使用
Keys和Values来分别获取所有的键和值. - 添加元素可以使用
Add()方法, 或直接使用索引赋值的方式添加. - 检查某个键是否存在, 使用
ContainsKey()方法. - 删除元素使用
Remove(<key>)方法.
查询所有属性, 可以使用
Select-Object -InputObject ... -Property *
自定义对象
一般使用内置对象已足够. 但如果非要自定义, 可以使用 New-Object 命令.
创建的语法
- 使用
New-Object命令. - 使用字面值创建, 然后使用类型转换来获得.
$myFirstCustomObject = New-Object -TypeName PSCustomObject
# 或者
$myFirstCustomObject = [PSCustomObject]@{OSBuild = 'x'; OSVersion = 'y'}
创建对象之前也是需要有类型的.
可以简单的将
PSCustomObject理解为 powershell 对应 C# 中的Object.
