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 命令,该命令会向您解释如何提供命令及其参数。

Get Help Command

Powershell - 环境设置

PowerShell 图标可以在任务栏和开始菜单中找到。只需点击图标即可打开。

PowerShell Icon

要打开它,只需点击图标,然后将打开以下屏幕,这意味着 PowerShell 已准备好供您使用。

PowerShell Ready

PowerShell 版本

PowerShell 的最新版本为 5.0,要检查服务器中安装了哪个版本,我们键入以下命令 – :$PSVersionTable,如以下屏幕截图所示,从屏幕上我们还知道我们拥有 PSVersion 4.0

PSVersionTable

要更新到包含更多 Cmdlet 的最新版本,我们必须从以下链接下载Windows Management Framework 5.0https://www.microsoft.com/en-us/download/details.aspx?id=50395 并安装它。

Windows Management Framework

PowerShell ISE

Windows PowerShell集成脚本环境 (ISE) 是 Windows PowerShell 的主机应用程序。在 Windows PowerShell ISE 中,您可以在单个基于 Windows 的图形用户界面中运行命令以及编写、测试和调试脚本,该界面具有多行编辑、选项卡补全、语法着色、选择性执行、上下文相关帮助以及对从右到左语言的支持。

您可以使用菜单项和键盘快捷键来执行在 Windows PowerShell 控制台中执行的许多相同任务。例如,当您在 Windows PowerShell ISE 中调试脚本时,要在脚本中设置行断点,请右键单击代码行,然后单击切换断点

要打开它,只需转到开始 - 搜索,然后键入 - PowerShell,如以下屏幕截图所示。

Search PowerShell

然后单击 Windows PowerShell ISE。或者单击以下屏幕截图中显示的下拉箭头。

PowerShell ISE

它将列出服务器上安装的所有应用程序,然后单击 Windows PowerShell ISE。

Windows PowerShell ISE

将打开以下表格 –

Following Table

它包含三个部分,包括 - 编号为 1 的PowerShell 控制台,然后是编号为 2 的脚本文件,第三个是命令模块,您可以在其中找到模块。

在创建脚本时,您可以直接运行并查看结果,例如以下示例 –

Creating Script

PowerShell 基本命令

PowerShell 命令很多,很难将所有这些命令都放入本教程中,我们将重点介绍一些最重要的也是最基本的 PowerShell 命令。

第一步是使用 Get-Help 命令,该命令会向您解释如何提供命令及其参数。

Get Help Command

获取更新列表

  • Get-HotFix,并按如下方式安装修补程序
  • Get-HotFix -id kb2741530
Updates

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 命令,该命令会向您解释如何提供命令及其参数。

Get Help Command

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 - 循环

可能存在需要多次执行代码块的情况。通常,语句按顺序执行:函数中的第一个语句首先执行,然后是第二个语句,依此类推。

编程语言提供各种控制结构,允许更复杂的执行路径。

循环语句允许我们多次执行语句或语句组,以下是大多数编程语言中循环语句的一般形式:

Loop Architecture

PowerShell 编程语言提供了以下类型的循环来处理循环需求。点击以下链接查看其详细信息。

序号 循环和描述
1 for 循环

多次执行一系列语句,并缩写管理循环变量的代码。

2 forEach 循环

增强型 for 循环。这主要用于遍历元素集合,包括数组。

3 while 循环

在给定条件为 true 时重复语句或语句组。它在执行循环体之前测试条件。

4 do...while 循环

类似于 while 语句,但它在循环体末尾测试条件。

Powershell - 条件

决策结构包含一个或多个条件,程序需要对其进行评估或测试,以及在条件确定为真时要执行的语句(一个或多个),以及可选地在条件确定为假时要执行的其他语句。

以下是大多数编程语言中常见决策结构的一般形式:

Decision Making

PowerShell 脚本语言提供以下类型的决策语句。点击以下链接查看详细信息。

序号 语句及描述
1 if 语句

一个if 语句包含一个布尔表达式,后跟一个或多个语句。

2 if...else 语句

一个if 语句后面可以跟着一个可选的else 语句,当布尔表达式为假时执行。

3 嵌套 if 语句

你可以在另一个ifelseif语句内使用一个ifelseif语句。

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。

Array myList

处理数组

在处理数组元素时,我们通常使用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 中使用正则表达式:

序号 匹配及描述
1 匹配字符

支持的正则表达式字符示例。

2 匹配字符类

支持的字符类示例。

3 匹配量词

支持的量词示例。

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 
...
打印
广告