将对象存储和读取到对象或数组中

时间:2017-01-15 16:16:43

标签: arrays powershell object

我需要创建VEEAM复制作业。在创建作业时,我需要提供SourceNetworks列表并匹配TargetNetworks。我有一个CSV文件,其中包含文本中的匹配列表,然后我运行一个cmdlet来检索匹配的网络对象。

CSV:

SourcePortGroup, TargetPortGroup
VLAN 103,LAN0_DMZ
VLAN 120,LAN0_JDE
VLAN 121,LAN0_IT-BDC

我写了一个foreach,在其中我使用以下方法检索网络对象:

foreach ($item in $csvlist) {
  Get-VBRServer -Name $SourceESXi | Get-VBRViServerNetworkInfo | Where-Object {
    $_.NetworkName -eq $Mapping.SourcePortGroup
  }
  Get-VBRServer -Name $TargetESXi | Get-VBRViServerNetworkInfo | Where-Object {
    $_.NetworkName -eq $Mapping.TargetPortGroup
  }
}

这在调试时有效,我得到了正确的结果,这是一个对象。但是现在我需要将它们存储在一个新对象或一个数组中,以便稍后在创建作业时我可以轻松地使用源和目标映射。

我不知道存储结果的最佳方法是什么,然后在需要时调用它们。

1 个答案:

答案 0 :(得分:0)

假设每个Get-VBRServer语句每次迭代只生成一个项目,您可以使用哈希表将源映射到目标网络:

$networks = @{}
foreach ($item in $csvlist) {
  $key = '{0}/{1}' -f 
  $networks[$key] = @{
    'Source' = Get-VBRServer -Name $SourceESXi |
               Get-VBRViServerNetworkInfo |
               Where-Object { $_.NetworkName -eq $Mapping.SourcePortGroup }
    'Target' = Get-VBRServer -Name $TargetESXi |
               Get-VBRViServerNetworkInfo |
               Where-Object { $_.NetworkName -eq $Mapping.TargetPortGroup }
  }
}