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]
来进行类型转换. - 字符串. 使用单引号 (双引号也行)进行括起来. 双引号允许直接插值 (
$
引导即可). 单引号不行.
可使用
<variable>.GetType().Name
来获得类型.
对象
一切皆对象
查看属性
使用 Select-Object
命令, 可以查看变量的属性 (变量也是对象)
Select-Object -InputObject <variable> -Property *
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()
方法.
查询所有属性, 可以使用
Select-Object -InputObject ... -Property *
自定义对象
一般使用内置对象已足够. 但如果非要自定义, 可以使用 New-Object
命令.
创建的语法
- 使用
New-Object
命令. - 使用字面值创建, 然后使用类型转换来获得.
$myFirstCustomObject = New-Object -TypeName PSCustomObject
# 或者
$myFirstCustomObject = [PSCustomObject]@{OSBuild = 'x'; OSVersion = 'y'}
创建对象之前也是需要有类型的.