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

[玩转系统] PowerShell - 哈希表数组

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

PowerShell - 哈希表数组


[玩转系统] PowerShell - 哈希表数组

创建哈希表数组

要在 PowerShell 中创建哈希表数组:

  • 创建一个数组。
  • 创建两个或多个哈希表。
  • 使用 += 运算符将哈希表(在第二步中创建)添加到数组(在第一步中创建)。

创建哈希表数组:

$arrayOfHashTables = @()

$hashTable1 = [ordered]@{
                "firstName" = "Mehvish"
                "lastName" = "Ashiq"
                department="Computer Science"
             }
$hashTable2 = [ordered]@{
                "firstName" = "Tahir"
                "Raza" = "Ashiq"
                department="Designs & Arts"
             }

$arrayOfHashTables += $hashTable1
$arrayOfHashTables += $hashTable2

$arrayOfHashTables

输出 :

Name                  Value
----                  -----
firstName             Mehvish
lastName              Ashiq
department            Computer Science
firstName             Tahir
Raza                  Ashiq
department            Designs & Arts

首先,我们使用 @() 表示的数组运算符创建一个数组并将其保存在 $arrayOfHashTables 变量中。接下来,我们创建了两个哈希表,分别存储在 $hashTable1$hashTable2 中;每个都包含包裹在 @{} 周围的键值对。或者,我们可以使用 [ordered] 让键值对的顺序与创建哈希表时插入的顺序相同。如果我们不使用[ordered],哈希表数组将如下所示。

输出 :

Name               Value
----               -----
department         Computer Science
firstName          Mehvish
lastName           Ashiq
department         Designs & Arts
firstName          Tahir
Raza               Ashiq

创建完哈希表后,我们使用 += 运算符在 $arrayOfHashTables 中添加 $hashTable1$hashTable2 。或者,您还可以使用 + 运算符将哈希表添加到哈希表数组中,如下所示:

使用+运算符:

$arrayOfHashTables = @()

$hashTable1 = [ordered]@{
                "firstName" = "Mehvish"
                "lastName" = "Ashiq"
                department="Computer Science"
             }
$hashTable2 = [ordered]@{
                "firstName" = "Tahir"
                "Raza" = "Ashiq"
                department="Designs & Arts"
             }

$arrayOfHashTables = $arrayOfHashTables + $hashTable1
$arrayOfHashTables = $arrayOfHashTables + $hashTable2

我们创建了两个哈希表($hashTable1$hashTable2);现在,如果我们必须再添加 10 个或 15 个怎么办?现在会发生什么?这会导致代码冗余。为了避免这种情况,我们将其编写在名为 Test.ps1 的脚本中,并传递一个或多个哈希表作为参数。怎么做呢?让我们在下一节中了解这一点。

将数据从参数传递到哈希表数组

要将数据从参数传递到哈希表数组:

  • 创建一个 .ps1 文件,假设为 Test.ps1
  • 使用 param 块接受哈希表数组作为参数。
  • 使用 Write-Host cmdlet 显示自定义消息。
  • 使用 foreach 循环迭代哈希表数组。
  • 使用嵌套的 foreachGetEnumerator() 方法来迭代每个哈希表条目。
  • 对于上述循环的每个嵌套迭代,使用 Write-Host cmdlet 以 key=value 格式写入键及其值。

Test.ps1 脚本从参数获取数据到哈希表数组:

param(
    [hashtable[]]$Hashtables
)

Write-Host "Hashtables: @("

foreach($hashtable in $Hashtables){
    Write-Host "  @{"
    foreach($entry in $hashtable.GetEnumerator()){
        Write-Host "    " $entry.Key = $entry.Value
    } 
    Write-Host "  }"
}

Write-Host ")"

使用以下命令执行上述脚本:

.\Test.ps1 -Hashtables @{ firstName = "Aftab"; lastName = "Raza"; department = "Game Development"},@{ firstName = "Azher"; lastName = "Raza"; department = "Mathematics"}

输出 :

Hashtables: @(
  @{
     department = Game Development
     firstName = Aftab
     lastName = Raza
  }
  @{
     department = Mathematics
     firstName = Azher
     lastName = Raza
  }
)

首先,我们使用带有 param 关键字的 param 块,后跟左括号和右括号 (());该块接受一个或多个参数。我们用它来将哈希表数组作为参数。

关键是我们如何确保这个脚本只接受哈希表数组作为参数。我们可以为参数分配一个 type 并包含一个 [Parameter()] 块。在下面的示例中,我们可以看到一个仅接受 hashtable[] 类型的哈希表数组的参数。

指定参数类型:

param(
    [Parameter()]
    [hashtable[]]$Hashtables
)

我们在上面提供的脚本 (Test.ps1) 的不同位置使用 Write-Host cmdlet 将自定义输出/消息写入主机;这里的主机是我们的PowerShell控制台或终端。

接下来,使用 foreach 循环迭代哈希表数组 ($Hashtables)。在每次迭代中,我们使用嵌套的 foreach 和 GetEnumerator() 方法来循环遍历哈希表的每个条目,并使用 Write-Host 写入 key=value cmdlet。

GetEnumartor() 方法的作用是什么?此方法用于获取一个枚举器(IEnumerator 对象),我们用它来迭代指定的集合,在我们的例子中是一个哈希表。

这就是 PowerShell 中哈希表数组的全部内容。

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

取消回复欢迎 发表评论:

关灯