jk's notes
  • ch02 基本概念

ch02 基本概念

主要介绍四个基本概念: 变量, 数据类型, 对象, 和数据结构.

注意, 一切皆对象

变量

显示与修改变量

变量以美元符 $ 开头. 显示变量的值, 直接在命令行中输入回车. 例如: $MaximumHistoryCount

image-20240131094601261

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

image-20240131094655119

PowerShell 中的变量分为: 用户自定义变量, 以及内置的自动变量.

用户自定义变量

PowerShell 有一个严格模式, 严格模式下使用了未定义的变量会报错. 开启严格模式使用:

Set-StrictMode -Version Latest

image-20240131100931378

定义变量就是在赋值 (与 Python 的语法类似, 没有单独的声明语法, 直接赋值).

除了直接赋值得到变量外, PowerShell 还可以使用命令来控制变量

命令: Set-Variable 和 Set-Variable.

Set-Variable -Name color -Value blue
Get-Variable -Name color

使用命令, 变量名前不需要美元符.

使用 Get-Variable 可以获取所有的变量.

image-20240131101108287

自动变量

自动变量为系统内置变量, 并且不建议修改.

$null 变量

表示空值, 与其他编程语言中的 null 逻辑一致. 这里目的在与创建变量, 但不给初始值.

逻辑上与早期 C 的用法规则一样. 声明变量必须初始化.

$LASTEXITCODE

PowerShell 允许调用外外部程序, 应用程序结束时会返回一个状态码. 该变量的作用是存储最近一个程序结束时的返回状态码.

偏好设置变量

所谓偏好设置变量, 是一类用于控制各种输出流的默认行为的变量. 包括: Error, Warning, Verbose, Debug 和 Information. 要查询偏好设置变量可以使用:

Get-Variable -Name *Preference

image-20240131102222102

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

image-20240131102618483

修改会默认 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

image-20240131105646519

看起来就是 C# 的样子.

调用方法

逻辑上与一般编程语言一样, 使用点语法.

$num.GetType().name

数据结构

数组, ArrayList, 以及哈希表.

数组

定义数组

$arr = @(item1, item2, ...)

使用 @ 加圆括号来定义.

读取数组

使用 [index] 索引来引用. 与其他编程语言一致.

越界访问会报错. 获取长度可以使用 Length 属性

image-20240131110253152

修改数组中元素

通过索引修改, 与 C# 一样.

将元素添加到数组

这里的逻辑与 C# 中的字符串一样, 数组是不可变的, 添加元素是生成了新数组.

可以使用 + 或 += 来实现. 例如:

$arr = $arr + <element>
$arr += <element>

image-20240131110729450

判断可以使用 Equals() 方法.

ArrayList

定义语法与数组一样, 不同的是使用类型矫正语法将其修改为 ArrayList.

$list = [System.Collections.ArrayList]@(1, 2, 3)

类型果然很多. 看起来这些类型与 C# 类型是兼容的.

ArrayList 中的修改内容的方法可以使用.

image-20240131111652384

注意 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'}

创建对象之前也是需要有类型的.

Last Updated:
Contributors: jk