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版本

PowerShell 的最新版本是 5.0,要检查服务器中安装的内容,我们输入以下命令 – : $PSVersionTable,如下面的屏幕截图所示,从屏幕上我们还知道我们有 PSVersion 4.0

PS版本表

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

Windows管理框架

PowerShell ISE

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

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

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

搜索 PowerShell

然后单击 Windows PowerShell ISE。或者单击向下箭头,如下面的屏幕截图所示。

PowerShell ISE

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

Windows PowerShell ISE

下表将开放 -

下表

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

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

创建脚本

PowerShell 基本命令

PowerShell 命令有很多,在本教程中很难包含所有这些命令,我​​们将重点关注 PowerShell 中一些最重要和基本的命令。

第一步是转到 Get-Help 命令,该命令向您提供有关如何给出命令及其参数的说明。

获取帮助命令

获取更新列表-

  • 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 获取唯一的 Cmdlet

展示 Get-Unique Cmdlet 的示例程序。

2

组对象 Cmdlet

展示 Group-Object Cmdlet 的示例程序。

3 测量对象 Cmdlet

展示 Measure-Object Cmdlet 的示例程序。

4 比较对象 Cmdlet

展示 Compare-Object Cmdlet 的示例程序。

5 格式列表 Cmdlet

展示 Format-List Cmdlet 的示例程序。

6 格式范围 Cmdlet

展示 Format-Wide Cmdlet 的示例程序。

7 Where-对象 Cmdlet

展示Where-Object Cmdlet 的示例程序。

8 获取ChildItem Cmdlet

展示 Get-ChildItem Cmdlet 的示例程序。

9 ForEach-Object Cmdlet

展示 ForEach-Object Cmdlet 的示例程序。

10 启动-睡眠 Cmdlet

展示 Start-Sleep Cmdlet 的示例程序。

11 读取主机 Cmdlet

展示 Read-Host Cmdlet 的示例程序。

12 选择对象 Cmdlet

展示 Select-Object Cmdlet 的示例程序。

13 排序对象 Cmdlet

展示 Sort-Object Cmdlet 的示例程序。

14 写警告 Cmdlet

展示 Write-Warning Cmdlet 的示例程序。

15 写入主机 Cmdlet

展示 Write-Host Cmdlet 的示例程序。

16 调用项目 Cmdlet

展示 Invoke-Item Cmdlet 的示例程序。

17 号 调用表达式 Cmdlet

展示 Invoke-Expression Cmdlet 的示例程序。

18 测量命令 Cmdlet

展示 Measure-Command Cmdlet 的示例程序。

19 调用历史 Cmdlet

展示 Invoke-History Cmdlet 的示例程序。

20 添加历史记录 Cmdlet

展示 Add-History Cmdlet 的示例程序。

21 获取历史记录 Cmdlet

展示 Get-History Cmdlet 的示例程序。

22 获取文化 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 表示传递给函数、脚本或脚本块的未声明参数和/或参数值的数组。
$控制台文件名 表示会话中最近使用的控制台文件 (.psc1) 的路径。
$错误 表示一个错误对象数组,这些对象代表最近的错误。
$事件 表示 PSEventArgs 对象,该对象表示正在处理的事件。
$事件参数 表示一个对象,该对象表示从正在处理的事件的 EventArgs 派生的第一个事件参数。
$EventSubscriber 表示 PSEventSubscriber 对象,该对象表示正在处理的事件的事件订阅者。
$执行上下文 表示 EngineIntrinsics 对象,该对象表示 PowerShell 主机的执行上下文。
$FALSE 代表假。您可以在命令和脚本中使用此变量来表示 FALSE,而不是使用字符串“false”。
$FOREACH 表示 ForEach 循环的枚举数(不是结果值)。您可以对 $ForEach 变量的值使用枚举器的属性和方法。
$HOME 表示用户主目录的完整路径。
$主机 表示一个对象,该对象代表 PowerShell 的当前主机应用程序。
$输入 表示一个枚举器,用于枚举传递给函数的所有输入。
$最后的代码 表示最后运行的基于 Windows 的程序的退出代码。
$匹配 $Matches 变量与 -match 和 -notmatch 运算符一起使用。
$我的调用 仅针对脚本、函数和脚本块填充 $MyInspiration。$MyInspiration 自动变量的 PSScriptRoot 和 PSCommandPath 属性包含有关调用者或调用脚本(而不是当前脚本)的信息。
$NESTEDPROMPTLEVEL 代表当前提示级别。
$NULL $null 是包含 NULL 或空值的自动变量。您可以使用此变量来表示命令和脚本中不存在或未定义的值。
$PID 表示托管当前 PowerShell 会话的进程的进程标识符 (PID)。
$个人资料 表示当前用户和当前主机应用程序的 PowerShell 配置文件的完整路径。
$PSCMDLET 表示一个对象,该对象表示正在运行的 cmdlet 或高级函数。
$PS命令路径 表示正在运行的脚本的完整路径和文件名。
$PS文化 代表操作系统当前使用的区域性名称。
$PSDEBUGContext 调试时,该变量包含有关调试环境的信息。否则,它包含 NULL 值。
$PSHOME 表示 PowerShell 安装目录的完整路径。
$PSITEM 与 $_ 相同。包含管道对象中的当前对象。
$PSSCRIPTROOT 表示正在运行脚本的目录。
$PSSENDERINFO 表示有关启动 PSSession 的用户的信息,包括用户身份和发起计算机的时区。
$伪文化 表示操作系统中当前使用的用户界面 (UI) 区域性的名称。
$PS版本表 表示只读哈希表,显示有关当前会话中运行的 PowerShell 版本的详细信息。
$发件人 表示生成此事件的对象。
$SHELLID 表示当前 shell 的标识符。
$堆栈跟踪 表示最近错误的堆栈跟踪。
$这个 在定义脚本属性或脚本方法的脚本块中,$This 变量引用正在扩展的对象。
$真 代表真。您可以使用此变量在命令和脚本中表示 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
+= 添加 AND 赋值运算符。它将右操作数添加到左操作数,并将结果分配给左操作数。 C += A 等价于 C = C + A
-= 减法 AND 赋值运算符。它从左操作数中减去右操作数,并将结果赋给左操作数。 C -= A 相当于 C = C - A

逻辑运算符

下表列出了逻辑运算符 -

假设布尔变量 A 为 true,变量 B 为 false,则 -

显示示例

操作员 描述 例子
AND(逻辑与) 称为逻辑与运算符。如果两个操作数均非零,则条件为真。 (A -AND B) 为假
OR(逻辑或) 称为逻辑或运算符。如果两个操作数中的任何一个非零,则条件为真。 (A - 或 B) 为真
NOT(逻辑非) 称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑 NOT 运算符将为假。 -NOT(A -AND B) 为真

杂项运算符

以下是 PowerShell 语言支持的各种重要运算符 -

显示示例

操作员 描述 例子
>(重定向操作符) 重定向运算符。分配要打印到重定向文件/输出设备的输出。 dir > test.log 将打印 test.log 文件中的目录列表

Powershell - 循环

可能存在这样的情况:您需要多次执行一段代码。一般来说,语句是按顺序执行的:首先执行函数中的第一个语句,然后执行第二个语句,依此类推。

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

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

循环架构

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

先生。 循环和描述
1 for循环

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

2 forEach循环

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

3 while 循环

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

4 do...while 循环

与 while 语句类似,只不过它测试循环体末尾的条件。

Powershell - 条件

决策结构具有要由程序评估或测试的一个或多个条件,以及如果确定条件为真则要执行的一个或多个语句,以及可选地,如果确定条件则要执行的其他语句是假的。

以下是大多数编程语言中典型决策结构的一般形式 -

决策

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

先生。 声明及说明
1 if 语句

if语句由一个布尔表达式后跟一个或多个语句组成。

2 if...else 语句

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

3 嵌套 if 语句

您可以在另一个ifelseif语句中使用一个ifelseif语句。

4 switch语句

switch语句允许测试变量是否与值列表相等

Powershell - 数组

PowerShell 提供了一种数据结构,即数组,它存储任意类型元素的固定大小的顺序集合。数组用于存储数据集合,但将数组视为变量或对象的集合通常更有用。

您可以声明一个数组变量(例如numbers)并使用numbers[0]、numbers[1]和...、numbers[99]来表示,而不是声明单个变量(例如number0、number1、...和number99)个体变量。

本教程介绍如何声明数组变量、创建数组以及使用索引变量处理数组。

声明数组变量

要在程序中使用数组,必须声明一个变量来引用该数组,并且可以指定该变量可以引用的数组类型。这是声明数组变量的语法 -

句法

$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 - 哈希表

Hashtable 在哈希表中存储键/值对。使用哈希表时,您可以指定用作键的对象以及要链接到该键的值。通常我们使用字符串或数字作为键。

本教程介绍如何声明哈希表变量、创建哈希表以及使用其方法处理哈希表。

声明哈希表变量

要在程序中使用哈希表,您必须声明一个变量来引用该哈希表。这是声明哈希表变量的语法 -

句法

$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 整个字符串的结尾(允许的最后行终止符除外)。
关于* 匹配前面的表达式出现 0 次或多次。
重新+ 匹配 1 个或多个前一个事物。
关于? 匹配前面表达式的 0 次或 1 次出现。
重新{n} 精确匹配前面表达式的 n 次出现。
重新{n,} 匹配前面的表达式出现 n 次或多次。
重新{n,m} 匹配前面表达式至少出现 n 次、最多出现 m 次。
一个| 乙 匹配 a 或 b。
(关于) 对正则表达式进行分组并记住匹配的文本。
(?: 关于) 对正则表达式进行分组,而不记住匹配的文本。
(?> 重新) 匹配独立模式而不回溯。
\w 匹配单词字符。
\W 匹配非单词字符。
\s 匹配空白。相当于[\t\n\r\f]。
\S 匹配非空白。
\d 匹配数字。相当于[0-9]。
\D 匹配非数字。
\A 匹配字符串的开头。
\Z 匹配字符串的结尾。如果存在换行符,则它会在换行符之前匹配。
\z 匹配字符串的结尾。
\G 匹配上一场比赛结束的点。
\n 向后引用捕获组编号“n”。
\b 匹配括号外的单词边界。匹配括号内的退格键 (0x08)。
\B 匹配非单词边界。
\n、\t 等 匹配换行符、回车符、制表符等。
\问 转义(引用)\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 创建了别名帮助。

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