0

我对所有东西都使用 powershell 5.1 版。我的问题的背景是我正在使用 powershell DSC 为各种节点创建 Web 应用程序和应用程序池。对于除最后 2 个服务器之外的每个服务器,每个 Web 应用程序都有一个唯一的应用程序池,因此一切正常。在最后 2 台服务器上,由于内存问题,有几台正在共享应用程序池。我将给定站点的名称引用与服务帐户一起存储在节点数据中,然后在非节点数据中我放置更详细的详细信息(rt 版本、池名称等)。不使用连接这些数据没有问题连接对象库。我给将被重用的应用程序池提供了冗余名称,以便理想情况下我可以在排序后使用“Get-Unique”或将 -Unique 传递给排序操作。哈希表的集合似乎忽略了这一点(可能是因为它们本质上是唯一的,所以我是一个假人)。现在我已经多次讨论过这个类型,使用 add-member 等。我的代码很糟糕,所以最新版本如下。感谢您的任何有效输入。

$a = @()
        $JoinedObject = Foreach ($SiteName in $Node.Sites)
        {
            $ConfigurationData.Sites | Where-Object {$_.Name -eq $SiteName[0]} | Foreach-Object{
                $test =$_ | Select-object $_.PoolConfigName, $_.PoolName, $_.PoolRtVer | Sort-Object -Unique
                }
                
                
                foreach($i in $test)
                {
                    if ($a -notcontains $i)
                    {
                    #write-host $i #, $i.GetType()
                    $a = $a + $i
                    }
                }
                #write-host $a
                
            #Write-host $test, $test.Gettype()
            
            #write-host $a[0] | select -Unique
            #write-host $_.PoolName
            #write-host $_.PoolRtVer
        }

输出仍然包含重复项

@{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssW=; EssWebServices=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWeb
ServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4
.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssRo=; EssWebServicesRO=; v4.0=} @{ApEssW=; EssWebServices=; v4.0=} @{ApEssOhr1=;
 EssWebServicesOhr1=; v4.0=}
4

1 回答 1

0

我想我不想把这个作为一个悬而未决的问题,因为我想出了一个“解决方案”(意思是,经过大量的试验/错误后效果不佳)。

我迭代将第一个循环绑定到一个完整的集合中,然后迭代它以将其转换为 PSCustomObject 以轻松访问/操作。然后对其进行迭代以通过属性名称获取不同的值。然后对其进行迭代以使用那些显式值。

我希望那些更精通 PowerShell 基础知识的人不会因为摇头而受到打击。

        $FullSiteCollection = @(@())
        $PoolCollection = @(@())
        $JoinedObject = Foreach ($SiteName in $Node.Sites)
        {
            $ConfigurationData.Sites | Where-Object {$_.Name -eq $SiteName[0]} | Foreach-Object{
                #$test =$_ | Select-object $_.PoolConfigName, $_.PoolName, $_.PoolRtVer | Sort-Object -Unique
                $test =$_ | select @{ Label="RunAs";Expression={$SiteName[1]}},@{ Label="PoolName";Expression={$_.PoolName}},@{ Label="PoolConfigName";Expression={$_.PoolConfigName}},@{ Label="PoolRtVer";Expression={$_.PoolRtVer}}
                }
        $FullSiteCollection+=$test
        }
        foreach($i in $FullSiteCollection)
        {
            $i = [pscustomobject]@{
                        RunAs=$i.RunAs
                        PoolName=$i.PoolName
                        PoolConfigName=$i.PoolConfigName
                        PoolRtVer=$i.PoolRtVer
                    }
            if ($PoolCollection.PoolName -notcontains $i.Poolname)
            {$PoolCollection = $PoolCollection + $i}
        }
        foreach($Pool in $PoolCollection)
        {
           #xWebAppPool $Pool.PoolConfigName (yadda yadda)
于 2021-07-14T19:20:07.507 回答