【问题标题】:How to manipulate the values of Hashtable for just specific key in powershell?如何为powershell中的特定键操作Hashtable的值?
【发布时间】:2019-05-27 18:40:51
【问题描述】:

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

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

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

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

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

在 Hashtable 上,我已经有了以下内容:

分组服务器列表的内容
名称 值
---- -----
组名 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]

如果 (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 | Where-Object {$num.ContainsKey("d")} | % ToString

写主机 "nnt VM_list:t" $($vm_list)

希望大家帮忙

任何想法都会不胜感激。

【问题讨论】:

    标签: hashtable powershell-4.0


    【解决方案1】:

    所以我找到了答案,真不敢相信这很容易让我失去理智。

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

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

      $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"}
    

    打印Hashtable的内容

    VM_list:  Server1 Server2
    

    打印新 Array 的内容,注意它将包含 Key d 中的值

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

    结果:

    源目标 IPV4Address IPV6Address 字节时间(毫秒) ------ ----------- ------------ ----------- ----- ------ -- 服务器源 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

    希望大家可以使用

    问候 杰卡耶塔诺

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2011-05-22
      • 2012-03-02
      • 2016-02-22
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多