当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

作者:精品下载站 日期:2024-12-14 09:05:28 浏览:15 分类:玩电脑

使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2


当前文章是上一篇文章的延续,其中我们对编写 PowerShell 命令的方式(使用“ForEach”语句循环遍历数组)的主题进行了基本介绍。

使用“ForEach”PowerShell 文章系列创建通过数组的循环

通过数组创建循环使用“ForEach”PowerShell 文章系列包括以下文章:

  • 使用“ForEach”PowerShell 命令通过数组创建循环 |基本介绍 |第 1 部分#2
  • 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2#2 部分(本文)

使用 PowerShell 变量

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

如果我们想简化对“变量”一词的解释,我们可以将“变量组件”视为“保存“数据”的逻辑容器。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

大多数时候,变量中存储的“数据”可以被视为“数组数据”。

“变量”可以被视为“基本组件”,在使用 PowerShell“ForEach 语句”和数组时经常使用。

使用变量 - 事件流程

使用 PowerShell 变量时,将实施以下阶段或步骤:

  1. 声明变量,“变量存储”为空。
  2. 通过“重定向”PowerShell Get 命令的输出,将信息存储在“变量存储”中。
  3. 使用额外的 PowerShell 命令“访问”存储在变量中的信息并利用该信息“执行某些操作”。

PowerShell环境中的变量语法

变量“syntax”的写法如下:

  1. 使用 $ 符号“声明”变量。
  2. 定义变量名称。变量名是我们选择的任意名称。最佳实践是选择一个“有意义的”变量名称。变量名不区分大小写。变量名可以包含空格和特殊字符,但这些很难使用,应该避免。
  3. 编写特定的“PowerShell Get”命令来“获取特定对象的数据”。 PowerShell 命令的输出将存储在该变量中。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

变量语法的示例可以是:

$ExchangeMailboxes = Get-Mailbox

在此场景中,我们定义了一个名为 $ExchangeMailboxes 的变量,它将用于存储我们从 PowerShell 命令 Get-Mailbox 获取的信息。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

使用 PowerShell“ForEach”语句 + 数组

使用 PowerShell 实施管理任务的最明显优势之一是能够执行“批量操作”,即在对象“组”(数组)上执行的进程。

通过使用 ForEach PowerShell 语句 + 存储数组数据(数组成员)的变量的组合,可以多次实现对数组成员运行特定任务的能力。

我们使用 ForEach PowerShell 语句来实现以下流程:

  1. “扫描”数组内容。
  2. 找到数组中的第一个成员。
  3. 对阵列成员运行特定的 PowerShell 命令(“执行某些操作”)。
  4. 通过访问数组存储、获取数组中的第二个成员、运行请求的 PowerShell 命令等,重新开始该过程。

此循环过程将在 ForEach PowerShell 语句找到数组中的“最后一个成员”后停止。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

在下图中,我们可以看到一个 PowerShell 命令的示例,其中包含“ForEach PowerShell 语句”+ PowerShell 变量。

  • 第 1#3 部分 - 在这一部分中,我们声明变量的名称,并使用“Get”PowerShell 命令的结果“充电”“变量存储”。
  • 第 2#3 部分 - 在这部分中,我们启动“ForEach PowerShell stamen”+声明附加变量的名称,该变量用于表示数组中的特定成员。
  • 第 3#3 部分 - 在这部分(以大括号开头),我们定义特定的 PowerShell 命令,该命令针对数组中的每个成员单独“执行”。这是“做某事”部分。使用 Loop 语句时,特定的 PowerShell 命令写在大括号之间。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

如何对数组中的成员进行寻址?

众所周知,数组是成员的集合。当我们使用使用“ForEach PowerShell 语句”的 PowerShell 命令时,我们希望寻址或引用数组中的每个成员,并将特定的 PowerShell 命令“应用”到每个特定成员。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

从技术上讲,我们可以使用几种方法来与“数组成员对象”相关。

在本文中,我想回顾一下该方法,其中我们使用了一个表示“成员对象”的附加变量。

ForEachPowerShell 语句知道如何访问“数组空间”(由“数组变量”表示),并循环遍历数组。

在每个循环中,ForEachPowerShell 语句从数组中“拉出”特定成员(由“成员变量”表示),运行所需的 PowerShell 命令,然后继续处理“下一个数组成员”。

代表数组成员的变量的名称只是我们选择的任意名称。

最好的做法是选择一个有意义的变量名,这有助于我们轻松区分“成员”和“数组”。

在下图中,我们可以看到“ForEach PowerShell语句”命令的结构,其中我们使用两个不同的变量来定义数组和数组中的成员。

在我们的示例中,变量 $Mailbox 代表数组中的每个成员,变量 $ExchangeMailboxes 代表数组本身。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

为了能够演示变量和数组的概念,让我们使用以下两个示例:

示例1:查看特定数组成员

在下一个示例中,我们使用名为 $ExchangeMailboxes 的变量来存储通过使用 PowerShell 命令 Get-mailbox 创建的数组。

完整的PowerShell是:

$ExchangeMailboxes = Get-Mailbox

在此阶段,我们有一个包含一个或多个成员(Exchange Online 邮箱)的变量。理论上,我们无法“知道”“变量空间”中存储了什么。

为了能够查看存储在变量 $ExchangeMailboxes 中的第一个数组成员,我们可以使用以下 PowerShell 命令:

$ExchangeMailboxes[0]

查看存储在变量 $ExchangeMailboxes 中的第二个数组成员。

$ExchangeMailboxes[1]

等等。

PowerShell 控制台输出示例

PS C:\> $ExchangeMailboxes = Get-Mailbox

PS C:\> $ExchangeMailboxes[0]

Name  Alias ServerName    ProhibitSendQuota
----  ----- ----------    -----------------
Adele Adele amxpr05mb0646 49.5 GB (53,150,220,288 bytes)

PS C:\> $ExchangeMailboxes[1]

Name             Alias ServerName    ProhibitSendQuota
----             ----- ----------    -----------------
admin_3a5bb52c62 Bob   he1pr05mb1369 49.5 GB (53,150,220,288 bytes)

示例 2:编写显示每个数组成员的 PowerShell 循环语句

除了演示如何对每个数组成员执行 Loop 语句的目的之外,以下示例没有“真正的目的”。

在此示例中,我们要求 PowerShell 获取存储在变量 $ExchangeMailboxes 中的每个数组成员,并在 PowerShell 控制台屏幕上写入使用以下语法的通知:This is数组成员之一 - “(Exchange 邮箱)” +

PowerShell 命令示例

$ExchangeMailboxes = Get-Mailbox
ForEach ($Mailbox in $ExchangeMailboxes) {
    Write-host This is one of the array members - "(Exchange mailbox)" - $Mailbox
}

PowerShell 控制台输出示例

This is one of the array members - Exchange mailbox - Adele
This is one of the array members - Exchange mailbox - Alice Good
This is one of the array members - Exchange mailbox - Alicia Keys
This is one of the array members - Exchange mailbox - Angelina Jolie
This is one of the array members - Exchange mailbox - Aretha Franklin
This is one of the array members - Exchange mailbox - Beatles the
This is one of the array members - Exchange mailbox - Beyonce
This is one of the array members - Exchange mailbox - Billy
This is one of the array members - Exchange mailbox - Bob Marley

如何指定特定Array成员的身份?

在本节中,我想讨论以下主题:如何指定特定数组成员的身份?

如前所述,我们希望特定的 PowerShell 命令将在阵列的每个成员上运行。

为了使 PowerShell 能够执行此任务,我们需要使用一种方法来帮助 PowerShell 分别与每个成员“关联”。换句话说,我们需要“告诉”PowerShell,Array中每个成员的“身份”是什么,

要在 PowerShell 环境中指定数组中成员的身份,我们使用以下语法:

代表“成员对象”的变量名+“点字符”+代表对象标识的对象属性之一。

听起来令人困惑且难以理解?

我所知道的唯一解决方案是——一遍又一遍地阅读所提供的信息和示例,直到您能够看到“完整的图片”。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

在下图中,我们可以看到用于与数组中的特定成员相关的语法示例。

在我们的示例中,用于表示数组成员的变量是 $Mailbox,我们使用的“对象标识属性”是 DisplayName

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

对象身份”和“身份属性”

这给我们带来了下一个问题——“对象同一性”的含义是什么,“身份属性”的含义又是什么?

答案是每个“PowerShell 对象”都有一个“身份”,就像我们每个人都有一个身份一样。

让问题变得更加复杂的是,每个 PowerShell 对象都可以拥有多个身份,就像我们每个人都可以拥有多个身份一样,例如私人姓名、昵称、社会安全号码等。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

在下图中,我们可以看到基于 Exchange Online 的环境中 Exchange 邮箱的所有可用身份的示例。

如果你因为多重身份的多样性而“头痛”,没关系!

实际上,我们并不使用这些“身份”的所有类型,而是仅使用一组常用的特定身份。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

数组成员和两种常见的关系类型

在本节中,我想讨论我所描述的主题“数组成员和两种常见的关系类型”。

从技术上讲,我们可以定义对象之间的四种类型的关系:

  1. 一对一
  2. 一对多
  3. 多对一
  4. 多对多

为了能够定义“一对一”关系,我们不需要使用数组和“ForEach”PowerShell 语句。

关于我描述为“多对多”的关系,我不想在当前的文章中涉及这种类型的关系,因为它可能会变得有点复杂。

在许多场景中,我们处理的最常见的关系可以描述为一对多或多对一的关系。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

一对多关系 - 示例

定义为“一对多”的关系涉及到一个场景,在该场景中,我们希望使一个特定对象(一个)能够“影响”多个对象(数组)。

换句话说,使特定对象能够为对象数组中的每个成员“做某事”。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

为了能够演示这种关系,让我们使用分配权限的管理任务。

例如,John 是 Exchange Online 管理员。我们希望为 John 分配对每个现有 Exchange Online 邮箱的完全访问权限。

  • 在我们的示例中,该“数组”包括所有 Exchange Online 邮箱
  • 每个 Exchange Online 邮箱均被视为阵列中的成员。
  • John 代表当前关系中的“One”。
  • Exchange Online 邮箱代表当前关系中的“许多”。

多对一关系 - 示例

定义为“多对一”的关系涉及一种场景,在该场景中,我们希望使多个对象(许多)“影响”特定或单个对象(一个)。

换句话说,使一组对象(多个对象)能够对特定对象“做某事”。

为了能够演示这种关系,让我们使用分配权限的管理任务。

例如,我们希望为“属于”IT 组的所有用户分配“帮助台邮箱”(一个)的完全访问权限,该邮箱用作帮助台票证的邮箱。

  • 在我们的示例中,“阵列”包括所有 IT 成员。
  • 每个 IT 用户都被视为阵列中的成员。
  • IT 成员代表当前关系中的“许多”。
  • “帮助台邮箱”代表当前关系中的“一个”。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

使用PowerShell Loop语句+变量+定义两种常见的关系类型

在本节中,我想“说唱”到目前为止我们已经回顾过的几个主题,这样我们就能够更好地理解“整体情况”。

使用 PowerShell ForEach 语句示例 - 一对多关系的示例

在本节中,我们演示了一种被描述为“一对多”的关系。

场景描述

在我们的场景中,John 是 Exchange 管理员。我们想要为 John 分配对所有现有 Exchange Online 邮箱的完全访问权限。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

为了能够满足这一要求,我们创建了一个 PowerShell Loop 命令,其中包括以下部分:

第 1#3 部分 - 在此部分中,我们定义一个名为 $ExchangeMailboxes 的变量,它将“保存”PowerShell 命令 Get-Mailbox 的输出。

指定的 PowerShell 命令将获取所有现有 Exchange Online 邮箱的“列表”。

$ExchangeMailboxes = Get-Mailbox

第 2#3 部分 - 在这部分中,我们定义了一个名为 $Mailbox 的附加变量,用于表示“Exchange 邮箱数组”中的每个成员(存储在变量 $Mailbox 中的信息) >$ExchangeMailboxes)。

ForEach ($Mailbox in $ExchangeMailboxes)

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

第 3#3 部分 - 在此部分中,我们定义 PowerShell 命令,该命令将为用户“John”分配每个 Exchange Online 邮箱的完全访问权限。

Add-MailboxPermission -identity $Varibale.<Identity> -user <Identity> -AccessRights FullAccess

引用每个数组成员标识

请注意我们用于引用每个数组成员(每个 Exchange Online 邮箱)标识的语法。

我们使用的语法是$Mailbox.DisplayName

每个成员的身份是通过使用临时保存数组中每个成员的变量名 ($Mailbox) + 特定的“身份”属性来“写入”的。

在我们的示例中,我们使用“DisplayName”作为身份属性。

这两部分的“组合”使我们能够在“ForEach PowerShell 语句”执行的循环过程中单独“识别”每个数组成员。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

PowerShell ForEach 语句示例 - 多对一关系示例

在本节中,我们将演示一种被描述为“多对一”的关系。

场景描述

IT 使用名为“HelpDesk”的共享邮箱,用于存储组织用户打开的帮助台票证。

我们希望让每个 IT 成员能够拥有名为 - HelpDesk 的共享邮箱的完全访问权限。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

第 1#3 部分 - 在此部分中,我们定义一个名为 $ITMembers 的变量,它将“保存”PowerShell 命令的输出。

Get-User | Where {$_.Title -eq "Administrator"}

指定的 PowerShell 命令将获取所有现有用户的“列表”,其标题包含值 - “管理员”。

$ITMembers = Get-User | Where {$_.Title -eq "Administrator"}

第 2#3 部分 - 在这部分中,我们定义了一个名为 $User 的附加变量,用于表示“IT 数组”中的每个成员(变量 中存储的信息) $ITMembers)。

ForEach ($User in $ITMembers)

第 3#3 部分 - 在这一部分中,我们定义了 PowerShell 命令,该命令将为每个 IT 成员分配“帮助台邮箱”的完全访问权限。

Add-MailboxPermission -identity <Identity> -user $user.<Identity> -AccessRights FullAccess

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

引用每个数组成员标识

请注意我们用于引用每个数组成员(每个 IT 成员)身份的语法。

我们使用的语法是 $User.Alias

数组中每个成员的身份是通过使用临时保存数组中每个成员的变量名 ($User) + 特定的“身份属性”来“写入”的。

在我们的示例中,我们使用“别名”作为身份属性。

这两部分的“组合”使我们能够单独“识别”每个数组成员。

[玩转系统] 使用“ForEach”语句和变量创建通过数组的循环 | PowerShell环境|第 2 部分#2

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯