Как манипулировать значениями Hashtable для конкретного ключа в powershell? - PullRequest
0 голосов
/ 27 мая 2019

Мне может понадобиться второй набор идей здесь.

Вот чего нужно достичь: мне нужно выполнить задачу в Hashtable (Powershell) для каждого значения определенного ключа

Я пишу сценарий для включения репликации dfsr иЯ застрял, потому что
необходимо выполнить следующую команду:

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

Если я сам запускаю команду на терминале PowerShell, он работает без проблем.

На Hashtable у меня уже есть следующее:

Содержимое списка серверов группировки
Имя Значение
---- -----
Имя группы1 {Сервер1, Сервер2}
Имя группы2 {Сервер6, Сервер9}

Какойтеперь должно быть проще, верно?Думая как массив:

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 и значение Value: 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}
a Тест
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

Write-Host "n n t VM_list: t" $ ($ vm_list)

Надеюсь, что вы, ребята, можете помочь

Любая идея будет больше, чемоценили.

1 Ответ

0 голосов
/ 28 мая 2019

Так что я нашел ответ, не могу поверить, что это было так просто, возможно, сходило с ума.

Я делюсь возможным решением для сообщества;)

"всегда естьнесколько способов добраться до места, так что это может быть один;) "

  $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

Печать содержимого нового массива, отметил, что онбудет содержать значения из ключа d

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

результат:

Источник Адресат IPV4 Адрес IPV6 Адрес Байт Время (мс) ------ ----------- ----------- ----------- ----- -------- Исходный сервер Server2 10.114.xy 32 0
Исходный сервер Server210.114.xy 32 0
Исходный сервер Server2 10.114.xy 32 0
Исходный сервер Server2 10.114.xy 32 0

Надеюсь, вы, ребята, можете его использовать

С уважением, JCayetano

...