如何仅针对 powershell 中的特定键操作 Hashtable 的值?

How to manipulate the values of Hashtable for just specific key in powershell?

我可能需要第二套想法。

这是要实现的目标: 我需要在哈希表(Powershell)中对特定键的每个值执行任务

我正在编写启用 dfsr 复制的一部分脚本,但我卡住了,因为
需要执行以下命令:

New-DfsReplicationGroup-GroupName“” | New-DfsReplicatedFolder -FolderName "" | Add-DfsrMember -ComputerName Server1,Server2

如果我 运行 命令在 powershell 终端上运行没有任何问题。

在哈希表上我已经有以下内容:

分组服务器列表的内容
名称值
---- -----
群组名称 1 {Server1, Server2}
群组名称 2 {Server6, Server9}

现在应该更容易了吧? 以数组的形式思考:

Write-Verbose "Configuring a full-DFSr connection "
       for ($i = 0 ; $i -lt $server_list.Count ; $i++) 
       {
           for ($j = $i + 1 ; $j -lt $server_list.Count ; $j++) 
            { 
              Write-Verbose ("Adding bidirectional connections between the member computers named {0} and {1}" -f $server_list[$i],$server_list[$j])
                 $dfs_connection_status = Add-DfsrConnection -GroupName $GroupName -SourceComputerName $server_list[$i] -DestinationComputerName $server_list[$j]
                  Write-Output $dfs_connection_status
            } 

       }

但是我无法弄清楚一旦找到密钥如何操作内容

然后我从那个脚本部分休息了一下,决定把它分解成一个简单的 a+b

看看下面的内容:

其中 $($key.Name) 有 键 value:d 和值内容 is:1,4,5

行如下

$num = @{a= "Test"
         b= "Test2"
         c= "Test3"
         }

$num.d = @() #adds to an array
$num.d+= '1'
$num.d+= '4'
$num.d+= '5'

$result= $num[0]+$num[1] or if decided $result= $num[0]+$num[2]

如果 (1+5)

,结果应为“5”或“6”
 $num.GetEnumerator() | Sort-Object -Property Value | Where-Object {$_.Key} 

名称值
---- -----
d {1, 4, 5}
一个测试
b 测试 2
c 测试 3

   #$sum+= $num.ContainsKey("d")+$num.ContainsKey("d")+1
   $num.GetEnumerator() | Sort-Object -Property Value | Where-Object {$_.Key} 
      if ($num.ContainsKey("d")) { $num['d'] } 

如果找到 d 键,则根据需要操作值内容。考虑我的 dfsr 原始脚本,一旦找到组名,就会启用双向复制 Server1 -> Server2 和 Server2 -> Server1

我无法让它工作所以我决定创建一个新数组(可能不是真正需要的)我在想什么好所以你找到 d 键现在让我们将所有内容移动到一个新数组所以我们可以操纵它。

$vm_list+=$num.Values |对象 {$num.ContainsKey("d")} | % ToString

写主机“nnt VM_list:t”$($vm_list)

希望大家帮帮忙

任何想法都将不胜感激。

所以我找到了答案,不敢相信这是那么容易,也许我正在失去理智。

我正在向社区分享一个可能的解决方案 ;)

“总是有多种方法可以到达一个地方,所以这可以 成为一个;)"

  $script:vmlist = @{}     #Hashtable
    $vm_list = @()           #Array

    $vmlist.d = @()
    $vmlist.d+= 'Server1'    
    $vmlist.d+= 'Server2'


    if ($vmlist.ContainsKey("d"))  #Looking for a particular Key
{ 
$vmlist['d']    
    $vm_list+= $vmlist['d']
    Write-Host "`n`n`t VM_list:`t`t $($vm_list)`n`n$($vm_list[0])`n$($vm_list[1])`n$($vm_list[2])"
    Test-Connection $vm_list[0+1]
}
     else {Write-Host "Value not found"}

打印哈希表的内容

VM_list:  Server1 Server2

打印新 Array 的内容,注意到它将包含键 d

中的值
VM_list[0]:Server1
VM_list[1]:Server2

结果:

源目标IPV4地址IPV6地址字节时间(毫秒) ------ ---------- ---------- ---------- ----- ------ -- 服务器源Server2 10.114.x.y 32 0
服务器源Server2 10.114.x.y 32 0
服务器源Server2 10.114.x.y 32 0
服务器源Server2 10.114.x.y 32 0

希望大家用得上

问候 杰卡耶塔诺