如何仅针对Powershell中的特定键来操纵Hashtable的值?

时间:2019-05-27 18:40:52

标签: hashtable powershell-v4.0

在这里我可能需要第二组想法。

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

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

New-DfsReplicationGroup -GroupName“” | New-DfsReplicatedFolder -FolderName“” | Add-DfsrMember-计算机名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)有 关键值:d,值内容为: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]

结果应为'5'或'6',如果(1 + 5)

 $num.GetEnumerator() | Sort-Object -Property Value | Where-Object {$_.Key} 

名称值
---- -----
d {1,4,5}
测试
b Test2
c Test3

   #$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

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

希望你们能帮忙

任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以我找到了答案,简直不敢相信这可能使我失去了头脑。

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

”总有多种方法可以到达某个地点,因此可以 成为一个;)”

  $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

打印新数组的内容,请注意它将包含键d中的值

VM_list[0]:Server1
VM_list[1]:Server2

结果:

源目标IPV4地址IPV6地址字节时间(ms) ------ ----------- ----------- ----------- --------- - 服务器源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

希望你们可以使用它

问候 卡耶塔诺(JCayetano)