- PowerShell 教程
- PowerShell - 首页
- PowerShell - 概述
- PowerShell - 环境设置
- PowerShell - Cmdlet
- PowerShell - 文件和文件夹
- PowerShell - 日期和时间
- PowerShell - 文件 I/O
- PowerShell - 高级 Cmdlet
- PowerShell - 脚本
- PowerShell - 特殊变量
- PowerShell - 运算符
- PowerShell - 循环
- PowerShell - 条件语句
- PowerShell - 数组
- PowerShell - 哈希表
- PowerShell - 正则表达式
- PowerShell - 反引号
- PowerShell - 括号
- PowerShell - 别名
- PowerShell 有用资源
- PowerShell - 快速指南
- PowerShell - 有用资源
- PowerShell - 讨论
PowerShell - 快速指南
Powershell - 概述
Windows PowerShell 是一种命令行 shell 和脚本语言,专为系统管理而设计。它在 Linux 中的类似物称为 Bash 脚本。Windows PowerShell 基于 .NET Framework 构建,帮助 IT 专业人员控制和自动化 Windows 操作系统及其在 Windows Server 环境中运行的应用程序的管理。
Windows PowerShell 命令(称为cmdlet)允许您从命令行管理计算机。Windows PowerShell 提供程序使您可以像访问文件系统一样轻松地访问数据存储,例如注册表和证书存储。
此外,Windows PowerShell 具有丰富的表达式解析器和完全开发的脚本语言。因此,简单来说,您可以完成所有使用 GUI 执行的任务以及更多其他任务。
PowerShell ISE
Windows PowerShell集成脚本环境 (ISE) 是 Windows PowerShell 的主机应用程序。在 Windows PowerShell ISE 中,您可以在单个基于 Windows 的图形用户界面中运行命令以及编写、测试和调试脚本,该界面具有多行编辑、选项卡补全、语法着色、选择性执行、上下文相关帮助以及对从右到左语言的支持。
您可以使用菜单项和键盘快捷键来执行在 Windows PowerShell 控制台中执行的许多相同任务。例如,当您在 Windows PowerShell ISE 中调试脚本时,要在脚本中设置行断点,请右键单击代码行,然后单击切换断点。
PowerShell 基本命令
PowerShell 命令很多,很难将所有这些命令都放入本教程中,我们将重点介绍一些最重要的也是最基本的 PowerShell 命令。
第一步是使用 Get-Help 命令,该命令会向您解释如何提供命令及其参数。
Powershell - 环境设置
PowerShell 图标可以在任务栏和开始菜单中找到。只需点击图标即可打开。
要打开它,只需点击图标,然后将打开以下屏幕,这意味着 PowerShell 已准备好供您使用。
PowerShell 版本
PowerShell 的最新版本为 5.0,要检查服务器中安装了哪个版本,我们键入以下命令 – :$PSVersionTable,如以下屏幕截图所示,从屏幕上我们还知道我们拥有 PSVersion 4.0
要更新到包含更多 Cmdlet 的最新版本,我们必须从以下链接下载Windows Management Framework 5.0 – https://www.microsoft.com/en-us/download/details.aspx?id=50395 并安装它。
PowerShell ISE
Windows PowerShell集成脚本环境 (ISE) 是 Windows PowerShell 的主机应用程序。在 Windows PowerShell ISE 中,您可以在单个基于 Windows 的图形用户界面中运行命令以及编写、测试和调试脚本,该界面具有多行编辑、选项卡补全、语法着色、选择性执行、上下文相关帮助以及对从右到左语言的支持。
您可以使用菜单项和键盘快捷键来执行在 Windows PowerShell 控制台中执行的许多相同任务。例如,当您在 Windows PowerShell ISE 中调试脚本时,要在脚本中设置行断点,请右键单击代码行,然后单击切换断点。
要打开它,只需转到开始 - 搜索,然后键入 - PowerShell,如以下屏幕截图所示。
然后单击 Windows PowerShell ISE。或者单击以下屏幕截图中显示的下拉箭头。
它将列出服务器上安装的所有应用程序,然后单击 Windows PowerShell ISE。
将打开以下表格 –
它包含三个部分,包括 - 编号为 1 的PowerShell 控制台,然后是编号为 2 的脚本文件,第三个是命令模块,您可以在其中找到模块。
在创建脚本时,您可以直接运行并查看结果,例如以下示例 –
PowerShell 基本命令
PowerShell 命令很多,很难将所有这些命令都放入本教程中,我们将重点介绍一些最重要的也是最基本的 PowerShell 命令。
第一步是使用 Get-Help 命令,该命令会向您解释如何提供命令及其参数。
获取更新列表 –
- Get-HotFix,并按如下方式安装修补程序
- Get-HotFix -id kb2741530
Powershell - cmdlet
Cmdlet 或“Command let”是在 Windows PowerShell 环境中使用的轻量级命令。Windows PowerShell 运行时在命令提示符下调用这些 cmdlet。您可以通过 Windows PowerShell API 以编程方式创建和调用它们。
Cmdlet 与命令
Cmdlet 与其他命令 shell 环境中的命令有以下区别 –
Cmdlet 是 .NET Framework 类对象;而不仅仅是独立的可执行文件。
Cmdlet 可以轻松地用少至十几行代码构建。
Cmdlet 不处理解析、错误显示和输出格式。这是由 Windows PowerShell 运行时完成的。
Cmdlet 处理对象而不是文本流,并且对象可以作为输出传递以进行管道传输。
Cmdlet 基于记录,因为它们一次处理一个对象。
获取帮助
第一步是使用 Get-Help 命令,该命令会向您解释如何提供命令及其参数。
Powershell - 文件和文件夹操作
以下是有关文件和文件夹的 PowerShell 脚本示例。
序号 | 操作和描述 |
---|---|
1 |
创建文件夹
显示如何使用 PowerShell 脚本创建文件夹的示例脚本。 |
2 |
创建文件
显示如何使用 PowerShell 脚本创建文件的示例脚本。 |
3 |
复制文件夹
显示如何使用 PowerShell 脚本复制文件的示例脚本。 |
4 |
复制文件
显示如何使用 PowerShell 脚本创建文件的示例脚本。 |
5 |
删除文件夹
显示如何使用 PowerShell 脚本删除文件夹的示例脚本。 |
6 |
删除文件
显示如何使用 PowerShell 脚本删除文件的示例脚本。 |
7 |
移动文件夹
显示如何使用 PowerShell 脚本移动文件夹的示例脚本。 |
8 |
移动文件
显示如何使用 PowerShell 脚本移动文件的示例脚本。 |
9 |
重命名文件夹
显示如何使用 PowerShell 脚本重命名文件夹的示例脚本。 |
10 |
重命名文件
显示如何使用 PowerShell 脚本重命名文件的示例脚本。 |
11 |
检索项目
显示如何使用 PowerShell 脚本检索项目的示例脚本。 |
12 |
检查文件夹是否存在
显示如何使用 PowerShell 脚本检查文件夹是否存在的示例脚本。 |
13 |
检查文件是否存在
显示如何使用 PowerShell 脚本检查文件是否存在的示例脚本。 |
Powershell - 日期和时间操作
以下是有关系统日期和时间的 PowerShell 脚本示例。
序号 | 操作和描述 |
---|---|
1 |
获取系统日期
显示如何使用 PowerShell 脚本获取系统日期的示例脚本。 |
2 |
设置系统日期
显示如何使用 PowerShell 脚本设置系统日期的示例脚本。 |
3 |
获取系统时间
显示如何使用 PowerShell 脚本获取系统时间的示例脚本。 |
4 |
设置系统时间
显示如何使用 PowerShell 脚本设置系统时间的示例脚本。 |
Powershell - 文件 I/O 操作
以下是创建和读取不同类型文件的 PowerShell 脚本示例。
序号 | 操作和描述 |
---|---|
1 |
创建文本文件
显示如何使用 PowerShell 脚本创建文本文件的示例脚本。 |
2 |
读取文本文件
显示如何使用 PowerShell 脚本读取文本文件的示例脚本。 |
3 |
创建 XML 文件
显示如何使用 PowerShell 脚本创建 XML 文件的示例脚本。 |
4 |
读取 XML 文件
显示如何使用 PowerShell 脚本读取 XML 文件的示例脚本。 |
5 |
创建 CSV 文件
显示如何使用 PowerShell 脚本创建 CSV 文件的示例脚本。 |
6 |
读取 CSV 文件
显示如何使用 PowerShell 脚本读取 CSV 文件的示例脚本。 |
7 |
创建 HTML 文件
显示如何使用 PowerShell 脚本创建 HTML 文件的示例脚本。 |
8 |
读取 HTML 文件
显示如何使用 PowerShell 脚本读取 HTML 文件的示例脚本。 |
9 |
擦除文件内容
显示如何使用 PowerShell 脚本擦除文件内容的示例脚本。 |
10 |
追加文本数据
显示如何使用 PowerShell 脚本将文本追加到文件内容的示例脚本。 |
Powershell - 高级 Cmdlet
Cmdlet
Cmdlet 或“Command let”是在 Windows PowerShell 环境中使用的轻量级命令。Windows PowerShell 运行时在命令提示符下调用这些 cmdlet。您可以通过 Windows PowerShell API 以编程方式创建和调用它们。以下是 cmdlet 的高级用法示例。
序号 | Cmdlet 类型和描述 |
---|---|
1 |
Get-Unique Cmdlet
演示 Get-Unique Cmdlet 的示例程序。 |
2 |
Group-Object Cmdlet 演示 Group-Object Cmdlet 的示例程序。 |
3 |
Measure-Object Cmdlet
演示 Measure-Object Cmdlet 的示例程序。 |
4 |
Compare-Object Cmdlet
演示 Compare-Object Cmdlet 的示例程序。 |
5 |
Format-List Cmdlet
演示 Format-List Cmdlet 的示例程序。 |
6 |
Format-Wide Cmdlet
演示 Format-Wide Cmdlet 的示例程序。 |
7 |
Where-Object Cmdlet
演示 Where-Object Cmdlet 的示例程序。 |
8 |
Get-ChildItem Cmdlet
演示 Get-ChildItem Cmdlet 的示例程序。 |
9 |
ForEach-Object Cmdlet
演示 ForEach-Object Cmdlet 的示例程序。 |
10 |
Start-Sleep Cmdlet
演示 Start-Sleep Cmdlet 的示例程序。 |
11 |
Read-Host Cmdlet
演示 Read-Host Cmdlet 的示例程序。 |
12 |
Select-Object Cmdlet
演示 Select-Object Cmdlet 的示例程序。 |
13 |
Sort-Object Cmdlet
演示 Sort-Object Cmdlet 的示例程序。 |
14 |
Write-Warning Cmdlet
演示 Write-Warning Cmdlet 的示例程序。 |
15 |
Write-Host Cmdlet
演示 Write-Host Cmdlet 的示例程序。 |
16 |
Invoke-Item Cmdlet
演示 Invoke-Item Cmdlet 的示例程序。 |
17 |
Invoke-Expression Cmdlet
演示 Invoke-Expression Cmdlet 的示例程序。 |
18 |
Measure-Command Cmdlet
演示 Measure-Command Cmdlet 的示例程序。 |
19 |
Invoke-History Cmdlet
演示 Invoke-History Cmdlet 的示例程序。 |
20 |
Add-History Cmdlet
演示 Add-History Cmdlet 的示例程序。 |
21 |
Get-History Cmdlet
演示 Get-History Cmdlet 的示例程序。 |
22 |
Get-Culture Cmdlet
演示 Get-Culture Cmdlet 的示例程序。 |
Powershell - 脚本
Windows PowerShell 是一种命令行 shell 和脚本语言,专为系统管理而设计。它在 Linux 中的类似物称为 Bash 脚本。Windows PowerShell 基于 .NET Framework 构建,帮助 IT 专业人员控制和自动化 Windows 操作系统及其在 Windows Server 环境中运行的应用程序的管理。
Windows PowerShell 命令(称为cmdlet)允许您从命令行管理计算机。Windows PowerShell 提供程序使您可以像访问文件系统一样轻松地访问数据存储,例如注册表和证书存储。
此外,Windows PowerShell 具有丰富的表达式解析器和完全开发的脚本语言。因此,简单来说,您可以完成所有使用 GUI 执行的任务以及更多其他任务。Windows PowerShell 脚本是一种完全开发的脚本语言,并具有丰富的表达式解析器/
特性
Cmdlet – Cmdlet 执行常见的系统管理任务,例如管理注册表、服务、进程、事件日志以及使用 Windows Management Instrumentation (WMI)。
面向任务 – PowerShell 脚本语言基于任务,并为现有脚本和命令行工具提供支持。
一致的设计 – 由于 cmdlet 和系统数据存储使用通用的语法并具有通用的命名约定,因此数据共享很容易。一个 cmdlet 的输出可以被管道传输到另一个 cmdlet,无需任何操作。
易于使用 – 简化的基于命令的导航允许用户像文件系统导航一样导航注册表和其他数据存储。
基于对象 – PowerShell 拥有强大的对象操作功能。对象可以直接发送到其他工具或数据库。
可扩展的接口。 – PowerShell 是可定制的,因为独立软件供应商和企业开发人员可以使用 PowerShell 构建自定义工具和实用程序来管理其软件。
变量
PowerShell 变量是命名的对象。由于 PowerShell 使用对象,因此这些变量用于处理对象。
创建变量
变量名应以 $ 开头,名称中可以包含字母数字字符和下划线。可以通过键入有效的变量名来创建变量。
在 PowerShell ISE 控制台中键入以下命令。假设您位于 D:\test 文件夹中。
$location = Get-Location
这里我们创建了一个变量 $location 并将其赋值为 Get-Location cmdlet 的输出。它现在包含当前位置。
使用变量
在 PowerShell ISE 控制台中键入以下命令。
$location
输出
您可以在 PowerShell 控制台中看到以下输出。
Path ---- D:\test
获取变量信息
Get-Member cmdlet 可以告诉您正在使用的变量类型。请参见下面的示例。
$location | Get-Member
输出
您可以在 PowerShell 控制台中看到以下输出。
TypeName: System.Management.Automation.PathInfo Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Drive Property System.Management.Automation.PSDriveInfo Drive {get;} Path Property System.String Path {get;} Provider Property System.Management.Automation.ProviderInfo Provider {get;} ProviderPath Property System.String ProviderPath {get;}
Powershell - 特殊变量
PowerShell 特殊变量存储有关 PowerShell 的信息。这些也称为自动变量。以下是自动变量的列表:
运算符 | 描述 |
---|---|
$$ | 表示会话接收到的最后一行中的最后一个标记。 |
$? | 表示上次操作的执行状态。如果上次操作成功,则包含 TRUE;如果失败,则包含 FALSE。 |
$^ | 表示会话接收到的最后一行中的第一个标记。 |
$_ | 与 $PSItem 相同。包含管道对象中的当前对象。您可以在对管道中的每个对象或选定对象执行操作的命令中使用此变量。 |
$ARGS | 表示传递给函数、脚本或脚本块的未声明参数和/或参数值的数组。 |
$CONSOLEFILENAME | 表示会话中最近使用的控制台文件 (.psc1) 的路径。 |
$ERROR | 表示表示最近错误的错误对象的数组。 |
$EVENT | 表示表示正在处理的事件的 PSEventArgs 对象。 |
$EVENTARGS | 表示表示正在处理的事件的派生自 EventArgs 的第一个事件参数的对象。 |
$EVENTSUBSCRIBER | 表示表示正在处理的事件的事件订阅者的 PSEventSubscriber 对象。 |
$EXECUTIONCONTEXT | 表示表示 PowerShell 主机的执行上下文的 EngineIntrinsics 对象。 |
$FALSE | 表示 FALSE。您可以使用此变量在命令和脚本中表示 FALSE,而不是使用字符串“false”。 |
$FOREACH | 表示 ForEach 循环的枚举器(而不是结果值)。您可以在 $ForEach 变量的值上使用枚举器的属性和方法。 |
$HOME | 表示用户主目录的完整路径。 |
$HOST | 表示表示 PowerShell 当前主机应用程序的对象。 |
$INPUT | 表示枚举传递给函数的所有输入的枚举器。 |
$LASTEXITCODE | 表示最后运行的基于 Windows 的程序的退出代码。 |
$MATCHES | $Matches 变量与 -match 和 -notmatch 运算符一起使用。 |
$MYINVOCATION | $MyInvocation 仅针对脚本、函数和脚本块填充。$MyInvocation 自动变量的 PSScriptRoot 和 PSCommandPath 属性包含有关调用方或调用脚本的信息,而不是当前脚本的信息。 |
$NESTEDPROMPTLEVEL | 表示当前提示级别。 |
$NULL | $null 是一个自动变量,包含 NULL 或空值。您可以使用此变量在命令和脚本中表示不存在或未定义的值。 |
$PID | 表示托管当前 PowerShell 会话的进程的进程标识符 (PID)。 |
$PROFILE | 表示当前用户和当前主机应用程序的 PowerShell 配置文件的完整路径。 |
$PSCMDLET | 表示表示正在运行的 cmdlet 或高级函数的对象。 |
$PSCOMMANDPATH | 表示正在运行的脚本的完整路径和文件名。 |
$PSCULTURE | 表示操作系统中当前使用的区域性的名称。 |
$PSDEBUGCONTEXT | 在调试期间,此变量包含有关调试环境的信息。否则,它包含 NULL 值。 |
$PSHOME | 表示 PowerShell 安装目录的完整路径。 |
$PSITEM | 与 $_ 相同。包含管道对象中的当前对象。 |
$PSSCRIPTROOT | 表示正在运行脚本的目录。 |
$PSSENDERINFO | 表示有关启动 PSSession 的用户的信息,包括用户身份和源计算机的时区。 |
$PSUICULTURE | 表示操作系统中当前使用的用户界面 (UI) 区域性的名称。 |
$PSVERSIONTABLE | 表示一个只读哈希表,显示有关当前会话中运行的 PowerShell 版本的详细信息。 |
$SENDER | 表示生成此事件的对象。 |
$SHELLID | 表示当前 shell 的标识符。 |
$STACKTRACE | 表示最近错误的堆栈跟踪。 |
$THIS | 在定义脚本属性或脚本方法的脚本块中,$This 变量引用正在扩展的对象。 |
$TRUE | 表示 TRUE。您可以使用此变量在命令和脚本中表示 TRUE。 |
Powershell - 运算符
PowerShell 提供了一套丰富的运算符来操作变量。我们可以将所有 PowerShell 运算符划分为以下几组:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 重定向运算符
- 分割和连接运算符
- 类型运算符
- 一元运算符
算术运算符
算术运算符用于数学表达式,就像它们在代数中使用的方式一样。下表列出了算术运算符:
假设整数变量 A 持有 10,变量 B 持有 20,则:
运算符 | 描述 | 示例 |
---|---|---|
+(加法) | 将运算符两侧的值相加。 | A + B 将得到 30 |
-(减法) | 从左操作数中减去右操作数。 | A - B 将得到 -10 |
*(乘法) | 将运算符两侧的值相乘。 | A * B 将得到 200 |
/(除法) | 将左操作数除以右操作数。 | B / A 将得到 2 |
%(模数) | 将左操作数除以右操作数并返回余数。 | B % A 将得到 0 |
比较运算符
以下是 PowerShell 语言支持的赋值运算符:
假设整数变量 A 持有 10,变量 B 持有 20,则:
运算符 | 描述 | 示例 |
---|---|---|
eq(等于) | 比较两个值是否相等。 | A -eq B 将得到 false |
ne(不等于) | 比较两个值是否不相等。 | A -ne B 将得到 true |
gt(大于) | 比较第一个值是否大于第二个值。 | B -gt A 将得到 true |
ge(大于或等于) | 比较第一个值是否大于或等于第二个值。 | B -ge A 将得到 true |
lt(小于) | 比较第一个值是否小于第二个值。 | B -lt A 将得到 false |
le(小于或等于) | 比较第一个值是否小于或等于第二个值。 | B -le A 将得到 false |
赋值运算符
以下是 PowerShell 语言支持的赋值运算符:
运算符 | 描述 | 示例 |
---|---|---|
= | 简单赋值运算符。将右侧操作数的值赋给左侧操作数。 | C = A + B 将 A + B 的值赋给 C |
+= | 加法和赋值运算符。它将右操作数加到左操作数,并将结果赋给左操作数。 | C += A 等效于 C = C + A |
-= | 减法和赋值运算符。它从左操作数中减去右操作数,并将结果赋给左操作数。 | C -= A 等效于 C = C - A |
逻辑运算符
下表列出了逻辑运算符:
假设布尔变量 A 持有 true,变量 B 持有 false,则:
运算符 | 描述 | 示例 |
---|---|---|
AND(逻辑与) | 称为逻辑 AND 运算符。如果两个操作数都不为零,则条件变为 true。 | (A -AND B) 为 false |
OR(逻辑或) | 称为逻辑 OR 运算符。如果两个操作数中的任何一个不为零,则条件变为 true。 | (A -OR B) 为 true |
NOT(逻辑非) | 称为逻辑 NOT 运算符。用于反转其操作数的逻辑状态。如果条件为 true,则逻辑 NOT 运算符将变为 false。 | -NOT(A -AND B) 为 true |
其他运算符
以下是 PowerShell 语言支持的各种重要运算符:
运算符 | 描述 | 示例 |
---|---|---|
>(重定向运算符) | 重定向运算符。将输出分配到重定向的文件/输出设备中。 | dir > test.log 将目录列表打印到 test.log 文件中 |
Powershell - 循环
可能存在需要多次执行代码块的情况。通常,语句按顺序执行:函数中的第一个语句首先执行,然后是第二个语句,依此类推。
编程语言提供各种控制结构,允许更复杂的执行路径。
循环语句允许我们多次执行语句或语句组,以下是大多数编程语言中循环语句的一般形式:
PowerShell 编程语言提供了以下类型的循环来处理循环需求。点击以下链接查看其详细信息。
序号 | 循环和描述 |
---|---|
1 | for 循环
多次执行一系列语句,并缩写管理循环变量的代码。 |
2 | forEach 循环
增强型 for 循环。这主要用于遍历元素集合,包括数组。 |
3 | while 循环
在给定条件为 true 时重复语句或语句组。它在执行循环体之前测试条件。 |
4 | do...while 循环
类似于 while 语句,但它在循环体末尾测试条件。 |
Powershell - 条件
决策结构包含一个或多个条件,程序需要对其进行评估或测试,以及在条件确定为真时要执行的语句(一个或多个),以及可选地在条件确定为假时要执行的其他语句。
以下是大多数编程语言中常见决策结构的一般形式:
PowerShell 脚本语言提供以下类型的决策语句。点击以下链接查看详细信息。
序号 | 语句及描述 |
---|---|
1 | if 语句
一个if 语句包含一个布尔表达式,后跟一个或多个语句。 |
2 | if...else 语句
一个if 语句后面可以跟着一个可选的else 语句,当布尔表达式为假时执行。 |
3 | 嵌套 if 语句
你可以在另一个if或elseif语句内使用一个if或elseif语句。 |
4 | switch 语句
一个switch语句允许将变量与其值列表进行相等性测试。 |
Powershell - 数组
PowerShell 提供了一种数据结构,数组,它存储固定大小的任何类型的元素的顺序集合。数组用于存储数据集合,但通常将其视为变量或对象的集合更有用。
与其声明单独的变量,如 number0、number1、... 和 number99,不如声明一个数组变量,如 numbers,并使用 numbers[0]、numbers[1]、... 和 numbers[99] 来表示单个变量。
本教程介绍如何声明数组变量、创建数组以及使用索引变量处理数组。
声明数组变量
要在程序中使用数组,必须声明一个变量来引用数组,并且可以指定变量可以引用的数组类型。以下是声明数组变量的语法:
语法
$A = 1, 2, 3, 4 or $A = 1..4
注意 - 默认情况下,数组对象的类型为 System.Object。GetType() 方法返回数组的类型。可以传递类型。
示例
以下代码片段是此语法的示例:
[int32[]]$intA = 1500,2230,3350,4000 $A = 1, 2, 3, 4 $A.getType()
这将产生以下结果:
输出
IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array
数组元素通过索引访问。数组索引从 0 开始;也就是说,它们从 0 开始到arrayRefVar.length-1。
示例
以下语句声明一个数组变量 myList,创建一个包含 10 个双精度类型元素的数组,并将它的引用赋值给 myList:
$myList = 5.6, 4.5, 3.3, 13.2, 4.0, 34.33, 34.0, 45.45, 99.993, 11123
下图表示数组 myList。这里,myList 存储十个双精度值,索引从 0 到 9。
处理数组
在处理数组元素时,我们通常使用for循环或foreach循环,因为数组中的所有元素都具有相同的类型,并且数组的大小是已知的。
示例
以下是一个完整的示例,展示了如何创建、初始化和处理数组:
$myList = 5.6, 4.5, 3.3, 13.2, 4.0, 34.33, 34.0, 45.45, 99.993, 11123 write-host("Print all the array elements") $myList write-host("Get the length of array") $myList.Length write-host("Get Second element of array") $myList[1] write-host("Get partial array") $subList = $myList[1..3] write-host("print subList") $subList write-host("using for loop") for ($i = 0; $i -le ($myList.length - 1); $i += 1) { $myList[$i] } write-host("using forEach Loop") foreach ($element in $myList) { $element } write-host("using while Loop") $i = 0 while($i -lt 4) { $myList[$i]; $i++ } write-host("Assign values") $myList[1] = 10 $myList
这将产生以下结果:
输出
Print all the array elements 5.6 4.5 3.3 13.2 4 34.33 34 45.45 99.993 11123 Get the length of array 10 Get Second element of array 4.5 Get partial array print subList 4.5 3.3 13.2 using for loop 5.6 4.5 3.3 13.2 4 34.33 34 45.45 99.993 11123 using forEach Loop 5.6 4.5 3.3 13.2 4 34.33 34 45.45 99.993 11123 using while Loop 5.6 4.5 3.3 13.2 Assign values 5.6 10 3.3 13.2 4 34.33 34 45.45 99.993 11123
数组方法示例
以下是一个完整的示例,展示了使用其方法对数组进行操作。
$myList = @(0..4) write-host("Print array") $myList $myList = @(0..4) write-host("Assign values") $myList[1] = 10 $myList
这将产生以下结果:
输出
Clear array Print array 0 1 2 3 4 Assign values 0 10 2 3 4
Powershell - 哈希表
哈希表在哈希表中存储键/值对。使用哈希表时,指定用作键的对象以及要链接到该键的值。通常我们使用字符串或数字作为键。
本教程介绍如何声明哈希表变量、创建哈希表以及使用其方法处理哈希表。
声明哈希表变量
要在程序中使用哈希表,必须声明一个变量来引用哈希表。以下是声明哈希表变量的语法:
语法
$hash = @{ ID = 1; Shape = "Square"; Color = "Blue"} or $hash = @{}
注意 - 可以使用类似的语法创建有序字典。有序字典维护条目添加的顺序,而哈希表则不维护。
示例
以下代码片段是此语法的示例:
$hash = [ordered]@{ ID = 1; Shape = "Square"; Color = "Blue"}
打印哈希表。
$hash
输出
Name Value ---- ----- ID 1 Color Blue Shape Square
哈希表值通过键访问。
> $hash["ID"] 1
处理哈希表
可以使用点表示法访问哈希表的键或值。
> $hash.keys ID Color Shape > $hash.values 1 Blue Square
示例
以下是一个完整的示例,展示了如何创建、初始化和处理哈希表:
$hash = @{ ID = 1; Shape = "Square"; Color = "Blue"} write-host("Print all hashtable keys") $hash.keys write-host("Print all hashtable values") $hash.values write-host("Get ID") $hash["ID"] write-host("Get Shape") $hash.Number write-host("print Size") $hash.Count write-host("Add key-value") $hash["Updated"] = "Now" write-host("Add key-value") $hash.Add("Created","Now") write-host("print Size") $hash.Count write-host("Remove key-value") $hash.Remove("Updated") write-host("print Size") $hash.Count write-host("sort by key") $hash.GetEnumerator() | Sort-Object -Property key
这将产生以下结果:
输出
Print all hashtable keys ID Color Shape Print all hashtable values 1 Blue Square Get ID 1 Get Shape print Size 3 Add key-value Add key-value print Size 5 Remove key-value print Size 4 sort by key Name Value ---- ----- Color Blue Created Now ID 1 Shape Square
Powershell - 正则表达式
正则表达式是一系列特殊的字符,它使用专门的语法(包含在模式中)来帮助你匹配或查找其他字符串或字符串集。它们可用于搜索、编辑或操作文本和数据。
下表列出了 PowerShell 中所有可用的正则表达式元字符语法:
子表达式 | 匹配 |
---|---|
^ | 匹配行首。 |
$ | 匹配行尾。 |
. | 匹配除换行符之外的任何单个字符。使用m选项允许它也匹配换行符。 |
[...] | 匹配括号中的任何单个字符。 |
[^...] | 匹配括号中不存在的任何单个字符。 |
\A | 整个字符串的开头。 |
\z | 整个字符串的结尾。 |
\Z | 整个字符串的结尾,除了允许的最终换行符。 |
re* | 匹配前面表达式的 0 次或多次出现。 |
re+ | 匹配前面内容的 1 次或多次出现。 |
re? | 匹配前面表达式的 0 次或 1 次出现。 |
re{ n} | 精确匹配前面表达式出现的 n 次。 |
re{ n,} | 匹配前面表达式出现的 n 次或多次。 |
re{ n, m} | 匹配前面表达式至少出现 n 次,最多出现 m 次。 |
a| b | 匹配 a 或 b。 |
(re) | 对正则表达式进行分组并记住匹配的文本。 |
(?: re) | 对正则表达式进行分组,但不记住匹配的文本。 |
(?> re) | 匹配独立模式,不回溯。 |
\w | 匹配单词字符。 |
\W | 匹配非单词字符。 |
\s | 匹配空白字符。等价于 [\t\n\r\f]。 |
\S | 匹配非空白字符。 |
\d | 匹配数字。等价于 [0-9]。 |
\D | 匹配非数字。 |
\A | 匹配字符串的开头。 |
\Z | 匹配字符串的结尾。如果存在换行符,则匹配换行符之前的字符。 |
\z | 匹配字符串的结尾。 |
\G | 匹配上次匹配结束的位置。 |
\n | 反向引用捕获组编号“n”。 |
\b | 在括号外匹配单词边界。在括号内匹配退格键 (0x08)。 |
\B | 匹配非单词边界。 |
\n, \t, etc. | 匹配换行符、回车符、制表符等。 |
\Q | 转义(引用)直到 \E 的所有字符。 |
\E | 结束以 \Q 开始的引用。 |
以下是一个完整的示例,展示了如何在 PowerShell 中使用正则表达式:
Powershell - 反引号
反引号 (`) 运算符也称为换行运算符。它允许将命令写成多行。它也可以用于句子中的换行符 (`n) 或制表符 (`t)。请参阅以下示例:
示例 1
Get-Service * | Sort-Object ServiceType ` | Format-Table Name, ServiceType, Status -AutoSize
它将变成
Get-Service * | Sort-Object ServiceType | Format-Table Name, ServiceType, Status -AutoSize
验证输出为
Name ServiceType Status ---- ----------- ------ MSSQLServerADHelper100 Win32OwnProcess Stopped ntrtscan Win32OwnProcess Running ...
示例 2
使用换行符和制表符。
> Write-host "Title Subtitle" Title Subtitle > Write-host "Title `nSubtitle" Title Subtitle > Write-host "Title `tSubtitle" Title Subtitle
Powershell - 括号
Powershell 支持三种类型的括号。
圆括号。 - ()
花括号。 - {}
方括号。 - []
圆括号
这种类型的括号用于
传递参数
包含多组指令
解决歧义
创建数组
示例
> $array = @("item1", "item2", "item3") > foreach ($element in $array) { $element } item1 item2 item3
花括号
这种类型的括号用于
包含语句
块命令
示例
$x = 10 if($x -le 20){ write-host("This is if statement") }
这将产生以下结果:
输出
This is if statement.
方括号
这种类型的括号用于
访问数组
访问哈希表
使用正则表达式进行过滤
示例
> $array = @("item1", "item2", "item3") > for($i = 0; $i -lt $array.length; $i++){ $array[$i] } item1 item2 item3 >Get-Process [r-s]* Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 320 72 27300 33764 227 3.95 4028 SCNotification 2298 77 57792 48712 308 2884 SearchIndexer ...
Powershell - 别名
PowerShell 别名是 cmdlet 或任何命令元素的另一个名称。
创建别名
使用New-Alias cmdlet 创建别名。在下面的示例中,我们为 Get-Help cmdlet 创建了一个名为 help 的别名。
New-Alias -Name help -Value Get-Help
现在调用别名。
help Get-WmiObject -Detailed
您将看到以下输出。
NAME Get-WmiObject SYNOPSIS Gets instances of Windows Management Instrumentation (WMI) classes or information about the available classes. SYNTAX Get-WmiObject [ ...
获取别名
使用get-alias cmdlet 获取 PowerShell 当前会话中存在的全部别名。
Get-Alias
您将看到以下输出。
CommandType Name Definition ----------- ---- ---------- Alias % ForEach-Object Alias ? Where-Object Alias ac Add-Content Alias asnp Add-PSSnapIn ...打印