如何仅针对 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
写主机“n
nt 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
希望大家用得上
问候
杰卡耶塔诺
我可能需要第二套想法。
这是要实现的目标: 我需要在哈希表(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
写主机“n
nt 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
希望大家用得上
问候 杰卡耶塔诺