根据对象值过滤对象

时间:2019-08-13 10:15:17

标签: powershell object

将VMware环境中的VLAN与UCS环境中的VLAN进行比较。首先,我将VMware中可用的所有VLAN读入$vCenterVLANList,这将返回一个如下所示的对象:

Portgroup VLANID
--------  ---
MgmtVLAN  5
ProdVLAN  10
QVLAN     15

(课程的实际列表要长得多)

然后在我的UCS系统中,我要按VLAN ID搜索具有该ID的所有VLAN。一个VLAN ID可以多次存在,但可以使用不同的名称:

Name         ID
--------     ---
MgmtVLAN     5
ProdVLANDC1  10
ProdVLANDC2  10
QVLAN        15
TESTVLAN     20

上面的列表是使用Get-UCSCentralVLANs获得的。

我现在通常要做的是在foreach上创建一个$vCenterVLANList循环,然后为每个端口组搜索Get-UCSCentralVLANs中的VLAN ID并创建一个新的对象,我将该端口组解析为该对象,VLANID和UCSCentral VLAN名称。

试图学习编写一些更好的PowerShell,所以我希望这也可以在一个衬里中完成,从而导致:

Portgroup VLANID UCSVLAN
--------  ---    -----
MgmtVLAN  5      MgmtVLAN
ProdVLAN  10     ProdVLANDC1
ProdVLAN  10     ProdVLANDC2
QVLAN     15     QVLAN

因此我将建立一个foreach循环,如:

$MatchedVLANs = @()
foreach ($VLAN in $vCenterVLANList) {
    $UCSVLANs = Get-UCSCentralVLANs | Where-Object( $_.ID -eq $VLAN.ID)
    foreach ($FoundVLAN in $UCSVLANs) {
        $row = "" | select Name, ID, UCSName
        $row.Name = $VLAN.Name
        $row.ID = $VLAN.ID
        $row.UCSName = $FoundVLAN.Name
        $MatchedVLANs += $row
    }
}

0 个答案:

没有答案