首页 > 解决方案 > 尝试看看是否有更好的方法来重建对象

问题描述

我知道这样做的唯一方法是添加大量代码来构建自定义对象来放置我的值并传递。我希望有一种更有效的方法并寻求建议。

我想弄清楚两个部分:逻辑与下面相同,只是命令不同。

  1. Get-ADUser -resultsize 10对象 A - 从命令中返回多个结果 。
    1a。要完成第 1 部分,在对象 A 的 foreach 循环中。我想:( $MyObjA += Object A个人)来自 foreach 循环。

  2. 增加复杂性(也许)
    2a。我希望(对象 A)Get-ADUser从左到左加入(对象 B)的输出,Get-Mailbox将它的所有属性组合到对象 A 并复制对象 A。因此记录将显示对象 A 和对象 B。

现在我只在上面的提问中使用了Get-ADUserGet-Mailbox,因为这些是每个人都知道的命令。话虽这么说,如果我使用那些我想要做的命令,我就不需要了。所以请指导我了解以我想要的方式处理对象的最佳方式。

下面的真正问题是通过https://enoten.com/使用 UDM Pro 。

他们的物品不像我想的那么友好,但它就在那里。我的最终目标是构建功能来分解网站,直到功能可以告诉我可用的数字以及分配给谁的数字。我已经成功了一半。我真的希望我不必构建自定义对象,或者至少我知道如何构建。
每个功能都建立在以前的功能之上。我当前的问题是在Get-UDMRange_DIDBlocks_withAvailableNumbers我试图做的程序中,组的单个对象CustomObject += Object A在哪里。object A我正在尝试建立一个相同对象的新组。

Function Get-UDMLocationNumberBlock_ID
{
    Param ($SiteCode)
    $Return = ''
    #Get-UdmLocation | Where {$_.name -like '*012a*'}
    #$Location = Get-UdmLocation | Where {$_.name -like "*$Sitecode*"}

    $Location = Get-UdmLocation | Where {$_.code -like "*$Sitecode*"}
    $Return = $Location.id

    Return $Return
}
Function Get-UDMLocationNumberBlock_NAME
{
    Param ($SiteCode)
    $Return = ''
    #Get-UdmLocation | Where {$_.name -like '*012a*'}
    $Location = Get-UdmLocation | Where {$_.name -like "*$Sitecode*"}

    #$Location = Get-UdmLocation | Where {$_.code -like "*$Sitecode*"}
    $Return = $Location.Name

    Return $Return
}
Function Get-UDMRange_DIDBlocks_byName
{
    Param ($SiteCode)

    $Return = ''
    $Return = Get-UdmRmNumberBlock | where {$_.rangeName -like "*$Sitecode*"}

    Return $Return
}
Function Get-UDMRange_DIDBlocks_byBlockNumber
{
    Param ($DIDBlockNumber)

    $Return = ''
    $Return = Get-UdmRmNumberBlock | where {$_.phoneNumber -like "*$DIDBlockNumber*"}

    Return $Return
}
Function Get-UDMRange_DIDBlocks_withAvailableNumbers
{
    Param ($SiteCode)
    $DIDBlocks = Get-UDMRange_DIDBlocks_byName -SiteCode $SiteCode
    $AvailDIDBlocks = ''

    foreach ($DIDBlock in $DIDBlocks)
    {
        if ($DIDBlock.usedQuantity -ne $DIDBlock.Quantity)
        {
                $AvailDIDBlocks += $DIDBlock
        }
    }
    Return $AvailDIDBlocks
}
Function Get-UDMRangesNumbers_bySite
{
    param ($Sitecode,[bool] $OnlyDIDBlocksWithAvailableNumbersInThem = $true)

    if ($OnlyDIDBlocksWithAvailableNumbersInThem)
    { #excludes DID where the block of numbers are full
        $AvailDIDBlocks = Get-UDMRange_DIDBlocks_withAvailableNumbers -SiteCode $Sitecode
    }
    else
    { #includes DID where the block of numbers are full
        $AvailDIDBlocks = Get-UDMRange_DIDBlocks -SiteCode $Sitecode
    }

    foreach ($AvailDIDBlock in $AvailDIDBlocks)
    {
        $DIDNumbers = Get-UdmRmNumber | where {$_.phoneNumberBlockId -eq $AvailDIDBlock.id}

        foreach ($DIDNumber in $DIDNumbers)
        {
            $DIDNumbersfromDIDBlocks += $DIDNumber
        }
    }
    Return $DIDNumbersfromDIDBlocks
}
Function Get-UDMRangesNumbers_bySpecificDID
{
    param ($DIDBlockNumber)

    $AvailDIDBlocks = Get-UDMRange_DIDBlocks_byBlockNumber -DIDBlockNumber $DIDBlockNumber

    foreach ($AvailDIDBlock in $AvailDIDBlocks)
    {
        $DIDNumbers = Get-UdmRmNumber | where {$_.phoneNumberBlockId -eq $AvailDIDBlock.id}

        foreach ($DIDNumber in $DIDNumbers)
        {
            $DIDNumbersfromDIDBlocks += $DIDNumber
        }
        #$DIDNumbersfromDIDBlocks += Get-UdmRmNumber | where {$_.phoneNumberBlockId -eq $AvailDIDBlock.id}
    }
    Return $DIDNumbersfromDIDBlocks
}

标签: arrayspowershellobjectmultidimensional-arrayhashtable

解决方案


Stephane van Gulick 在http://powershelldistrict.com/how-to-combine-powershell-objects/创建的函数可能会对您有所帮助。

该函数的基本内容是:

Function Combine-Objects {
    Param (
        [Parameter(mandatory=$true)]$Object1, 
        [Parameter(mandatory=$true)]$Object2
    )
    $arguments = [Pscustomobject]@()
    foreach ( $Property in $Object1.psobject.Properties) {
        $arguments += @{$Property.Name = $Property.value}  
    }
    foreach ( $Property in $Object2.psobject.Properties) {
        $arguments += @{ $Property.Name= $Property.value}
    }
    $Object3 = [Pscustomobject]$arguments
    return $Object3
}

推荐阅读