Powershell – 快速指南

Powershell – 快速指南


Powershell – 概述

Windows PowerShell 是一种命令行外壳程序脚本语言,专为系统管理而设计。它在 Linux 中被称为 Bash Scripting。Windows PowerShell 基于 .NET Framework 构建,可帮助 IT 专业人员控制和自动管理 Windows 操作系统和在 Windows Server 环境中运行的应用程序。

Windows PowerShell 命令称为cmdlets,可让您从命令行管理计算机。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.0https://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,如下面的屏幕截图所示。

搜索 PowerShell

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

PowerShell ISE

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

Windows PowerShell ISE

下表将打开 –

下表

它包含三个部分,其中包括 – PowerShell 控制台编号为 1,脚本文件编号为 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 在以下方面与其他命令外壳环境中的命令有很大不同 –

  • Cmdlet 是 .NET Framework 类对象;而不仅仅是独立的可执行文件。

  • Cmdlet 可以很容易地用十几行代码构建。

  • cmdlet 不处理解析、错误呈现和输出格式设置。它由 Windows PowerShell 运行时完成。

  • Cmdlets 进程适用于不在文本流上的对象,并且对象可以作为输出传递以进行流水线操作。

  • Cmdlet 是基于记录的,因为它们一次处理一个对象。

获得帮助

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

获取帮助命令

Powershell – 文件和文件夹操作

以下是文件和文件夹上的 powershell 脚本示例。

Sr.No. 操作和说明
1 Creating Folders

演示如何使用 PowerShell 脚本创建文件夹的示例脚本。

2 Creating Files

演示如何使用 PowerShell 脚本创建文件的示例脚本。

3 Copying Folders

演示如何使用 PowerShell 脚本复制文件的示例脚本。

4 Copying Files

演示如何使用 PowerShell 脚本创建文件的示例脚本。

5 Deleting Folders

演示如何使用 PowerShell 脚本删除文件夹的示例脚本。

6 Deleting Files

演示如何使用 PowerShell 脚本删除文件的示例脚本。

7 Moving Folders

演示如何使用 PowerShell 脚本移动文件夹的示例脚本。

8 Moving Files

演示如何使用 PowerShell 脚本移动文件的示例脚本。

9 Rename Folders

演示如何使用 PowerShell 脚本重命名文件夹的示例脚本。

10 Rename Files

演示如何使用 PowerShell 脚本重命名文件的示例脚本。

11 Retrieving Item

演示如何使用 PowerShell 脚本检索项目的示例脚本。

12 Check Folder Existence

演示如何使用 PowerShell 脚本检查文件夹存在的示例脚本。

13 Check File Existence

演示如何使用 PowerShell 脚本检查文件存在的示例脚本。

Powershell – 日期和时间操作

以下是有关系统日期和时间的 powershell 脚本示例。

Sr.No. 操作和说明
1 Get System Date

演示如何使用 PowerShell 脚本获取系统日期的示例脚本。

2 Set System Date

演示如何使用 PowerShell 脚本设置系统日期的示例脚本。

3 Get System Time

演示如何使用 PowerShell 脚本获取系统时间的示例脚本。

4 Set System Time

演示如何使用 PowerShell 脚本设置系统时间的示例脚本。

Powershell – 文件 I/O 操作

以下是创建和读取不同类型文件的 powershell 脚本示例。

Sr.No. 操作和说明
1 Create Text File

演示如何使用 PowerShell 脚本创建文本文件的示例脚本。

2 Read Text File

Example Script to show how to read a text file using PowerShell scripts.

3 Create XML File

演示如何使用 PowerShell 脚本创建 XML 文件的示例脚本。

4 Read XML File

演示如何使用 PowerShell 脚本读取 XML 文件的示例脚本。

5 Create CSV File

演示如何使用 PowerShell 脚本创建 CSV 文件的示例脚本。

6 Read CSV File

演示如何使用 PowerShell 脚本读取 CSV 文件的示例脚本。

7 Create HTML File

演示如何使用 PowerShell 脚本创建 HTML 文件的示例脚本。

8 Read HTML File

演示如何使用 PowerShell 脚本读取 HTML 文件的示例脚本。

9 Erasing file content

演示如何使用 PowerShell 脚本擦除文件内容的示例脚本。

10 Append Text Data

演示如何使用 PowerShell 脚本将文本附加到文件内容的示例脚本。

Powershell – 高级 Cmdlet

cmdlet

cmdlet 或“Command let”是在 Windows PowerShell 环境中使用的轻量级命令。Windows PowerShell 运行时在命令提示符处调用这些 cmdlet。您可以通过 Windows PowerShell API 以编程方式创建和调用它们。以下是 cmdlet 的高级用法示例。

Sr.No. Cmdlet 类型和描述
1 Get-Unique Cmdlet

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

2

Group-Object Cmdlet

展示组对象 Cmdlet 的示例程序。

3 Measure-Object Cmdlet

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

4 Compare-Object Cmdlet

展示比较对象 Cmdlet 的示例程序。

5 Format-List Cmdlet

展示格式列表 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 选择对象 Cmdlet

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

13 Sort-Object Cmdlet

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

14 Write-Warning Cmdlet

展示写警告 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 是一种命令行外壳程序脚本语言,专为系统管理而设计。它在 Linux 中的类似物称为 Bash 脚本。Windows PowerShell 基于 .NET Framework 构建,可帮助 IT 专业人员控制和自动管理 Windows 操作系统和在 Windows Server 环境中运行的应用程序。

Windows PowerShell 命令称为cmdlets,可让您从命令行管理计算机。Windows PowerShell 提供程序让您可以像访问文件系统一样轻松访问数据存储,例如注册表和证书存储。

此外,Windows PowerShell 具有丰富的表达式解析器和完全开发的脚本语言。因此,简单来说,您可以完成使用 GUI 完成的所有任务等等。Windows PowerShell Scripting 是一种完全开发的脚本语言,具有丰富的表达式解析器/

特征

  • Cmdlets – 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 的信息。这些也称为自动变量。以下是自动变量列表 –

Operator 描述
$$ 表示会话收到的最后一行中的最后一个令牌。
$? 表示上次操作的执行状态。如果上次操作成功,则包含 TRUE,如果失败则包含 FALSE。
$^ 表示会话收到的最后一行中的第一个令牌。
$_ 与 $PSItem 相同。包含管道对象中的当前对象。您可以在对管道中的每个对象或选定对象执行操作的命令中使用此变量。
$ARGS 表示传递给函数、脚本或脚本块的未声明参数和/或参数值的数组。
$CONSOLEFILENAME 表示会话中最近使用的控制台文件 (.psc1) 的路径。
$ERROR 表示表示最近错误的错误对象数组。
$EVENT 表示一个 PSEventArgs 对象,该对象表示正在处理的事件。
$EVENTARGS 表示一个对象,该对象表示从正在处理的事件的 EventArgs 派生的第一个事件参数。
$EVENTSUBSCRIBER 表示一个 PSEventSubscriber 对象,该对象表示正在处理的事件的事件订阅者。
$EXECUTIONCONTEXT 表示一个 EngineIntrinsics 对象,该对象表示 PowerShell 主机的执行上下文。
$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 表示当前外壳的标识符。
$STACKTRACE 表示最近错误的堆栈跟踪。
$THIS 在定义脚本属性或脚本方法的脚本块中,$This 变量指的是正在扩展的对象。
$TRUE 代表真。您可以使用此变量在命令和脚本中表示 TRUE。

Powershell – 运算符

PowerShell 提供了一组丰富的运算符来操作变量。我们可以将所有 PowerShell 运算符分为以下几组 –

  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 重定向运算符
  • 溢出和连接运算符
  • 类型运算符
  • 一元运算符

算术运算符

算术运算符在数学表达式中的使用方式与它们在代数中的使用方式相同。下表列出了算术运算符 –

假设整数变量 A 为 10,变量 B 为 20,然后 –

显示示例

Operator 描述 例子
&plus (Addition) 在运算符的任一侧添加值。 A &plus B 给 30
– (Subtraction) 从左侧操作数中减去右侧操作数。 A – B 会给 -10
&ast (Multiplication) 将运算符两侧的值相乘。 A &ast B 将给 200
/ (Division) 将左手操作数除以右手操作数。 B/A 会给 2
% (Modulus) 将左侧操作数除以右侧操作数并返回余数。 B % A 会给 0

比较运算符

以下是 PowerShell 语言支持的赋值运算符 –

假设整数变量 A 为 10,变量 B 为 20,然后 –

显示示例


Operator 描述 例子
eq (equals) 比较两个值是否相等。 A -eq B 会给出 false
ne (not equals) 比较两个不相等的值。 A -ne B 将给出真
gt (greater than) 比较第一个值是否大于第二个值。 B -gt A 将给出真
ge (greater than or equals to) 比较第一个值是否大于或等于第二个值。 B -ge A 会给出真
lt (less than) 比较第一个值是否小于第二个值。 B -lt A 会给出假
le (less than or equals to) 比较第一个值是否小于或等于第二个值。 B -le A 会报错

赋值运算符

以下是 PowerShell 语言支持的赋值运算符 –

显示示例

Operator 描述 例子
= 简单的赋值运算符。将右侧操作数的值分配给左侧操作数。 C = A &plus B 将 A &plus B 的值赋给 C
&plus= 添加 AND 赋值运算符。它将右操作数添加到左操作数并将结果分配给左操作数。 C &plus= A 等价于 C = C &plus A
-= 减去 AND 赋值运算符。它从左操作数中减去右操作数并将结果分配给左操作数。 C -= A 等价于 C = C – A

逻辑运算符

下表列出了逻辑运算符 –

假设布尔变量 A 为真,变量 B 为假,然后 –

显示示例

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

杂项运算符

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

显示示例


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

Powershell – 循环

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

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

一个循环语句可以让我们执行一条语句或组多次,下面是一个循环语句的一般形式在大多数编程语言-

循环架构

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

Sr.No. 循环和描述
1 for loop

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

2 forEach loop

Enhanced for loop. This is mainly used to traverse collection of elements including arrays.

3 while loop

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

4 do…while loop

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

Powershell – 条件

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

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

做决定

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

Sr.No. 声明和说明
1 if statement

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

2 if…else statement

一个if语句可以跟着一个可选的else语句,当布尔表达式是假的,其执行。

3 nested if statement

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

4 switch statement

开关语句允许一个变量来针对值的列表平等进行测试。

Powershell – 阵列

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

不是声明单个变量,例如 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。

数组 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 – 哈希表

哈希表将键/值对存储在哈希表中。使用 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 中可用的所有正则表达式元字符语法 –

Subexpression 火柴
^ 匹配行的开头。
$ 匹配行尾。
. 匹配除换行符以外的任何单个字符。使用m选项也允许它匹配换行符。
[…] 匹配括号中的任何单个字符。
[^…] 匹配任何不在括号中的单个字符。
\A 整个字符串的开头。
\z 整个字符串的结尾。
\Z 整个字符串的结尾,但允许的最后一行终止符除外。
re* 匹配前面表达式的 0 次或多次出现。
re&plus 匹配 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 中使用正则表达式;

Sr.No. 匹配和描述
1 Match Characters

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

2 Match Character Classes

支持的字符类示例。

3 Match Quantifiers

支持的量词示例。

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

打印

觉得文章有用?

点个广告表达一下你的爱意吧 !😁