0

最初の投稿、私は一日中これを研究してきましたが、私は知恵の終わりです! $Global:CBCGroups という配列があり、$Global:CBCTempHolder という常に変化する変数の値を格納したいと考えています。$Global:CBCTempHolder が変更されるたびに、その内容を += を使用して配列 $Global:CBCGroups に追加する必要があります (つまり:

$Global:CBCGroups += $Global:CBCTempHolder

CBCGroups の列は、CBCGroup と Element です。同じことが $Global:CBCTempHolder にも存在しますが、値はすべての "For" ステートメントで変化します。コードは次のとおりです。

$Global:CBCGroups = @()


for ($z = 0; $z -lt $Global:UniqueCCData.count; $z +=1)
{
If ($Global:UniqueCCData[$z]."AD Group".Contains("CBC_CBC_") -eq $True)
{
        $Global:CBCTempHolder = @(0) * 1 | select CBCGroup,Element
        $Global:CBCTempHolder.CBCGroup = $Global:UniqueCCData[$z]."AD Group"
        $Global:CBCTempHolder.Element = $z
        $Global:CBCGroups += $Global:CBCTempHolder
        $Global:UniqueCCData[$z]."AD Group" = $Global:UniqueCCData[$z]."AD Group".Replace("CBC_CBC_","CBC.CBC")

    }
}

したがって、基本的に何が起こっているかは、次の方法で $Global:CBCGroups に新しい要素を追加するたびです。

$Global:CBCGroups += $Global:CBCTempHolder

$Global:CBCTempHolder の値を変更してから $Global:CBCTempHolder.CBCGroup の値を手動で変更するたびに、代入演算子を使用して行に 5 つの要素を追加し、値を変更することに気付きました。 $Global:CBCTempHolder を再度手動で実行すると、$Global:CBCGroups の最後の 5 つの要素が同じ値に変更されます。$Global:CBCGroups の各要素が、配列に追加された時点からの値を維持する必要があります。

$Global:CBCTempHolder は真の配列ではないことに気付きましたが、新しいリストに追加する必要がある 2 つの名前付き要素が含まれています。どうすればこれを達成できますか?

4

1 に答える 1

0

問題を示すコードは次のとおりです。

$UniqueCCData = @()
$UniqueCCData += new-object psobject -property @{ "AD Group" = "Domain Users" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "CBC_CBC_Enterprise Admins" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "CBC_CBC_Help Desk" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "CBC_CBC_Marketing" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "CBC_CBC_Sales" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "Domain Admins" }
$CBCGroups = @()
for ($z = 0; $z -lt $UniqueCCData.count; $z += 1)
{
    if ($UniqueCCData[$z]."AD Group".Contains("CBC_CBC_") -eq $True)
    {
        $CBCTempHolder = @(0) * 1 | select CBCGroup,Element
        $CBCTempHolder.CBCGroup = $UniqueCCData[$z]."AD Group"
        $CBCTempHolder.Element = $z
        $CBCGroups += $CBCTempHolder
        $UniqueCCData[$z]."AD Group" = $UniqueCCData[$z]."AD Group".Replace("CBC_CBC_","CBC.CBC")
    }
}
$CBCTempHolder.CBCGroup = "CBC_CBC_VIPs"
$CBCTempHolder.Element = 5
$CBCGroups += $CBCTempHolder
$CBCGroups

出力は次のとおりです。

CBCGroup                    Element
--------                    -------
CBC_CBC_Enterprise Admins         1
CBC_CBC_Help Desk                 2
CBC_CBC_Marketing                 3
CBC_CBC_VIPs                      5
CBC_CBC_VIPs                      5

問題は、オブジェクトへの参照が割り当てられていることです。そのため、オブジェクトが変更されると、それを参照しているオブジェクトも変更されたように見えます。これを回避して、一意のオブジェクトを CBCGroups の各インデックスに割り当てる方法。これが私がそれを解決する方法です:

function CBC_clone($group, $i)
{
    $temp = @(0) * 1 | select CBCGroup,Element
    $temp.CBCGroup = $group.Replace("CBC_CBC_","CBC.CBC")
    $temp.Element = $i
    return $temp
}
$UniqueCCData = @()
$UniqueCCData += new-object psobject -property @{ "AD Group" = "Domain Users" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "CBC_CBC_Enterprise Admins" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "CBC_CBC_Help Desk" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "CBC_CBC_Marketing" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "CBC_CBC_Sales" }
$UniqueCCData += new-object psobject -property @{ "AD Group" = "Domain Admins" }
$CBCGroups = @()
for ($z = 0; $z -lt $UniqueCCData.count; $z += 1)
{
    if ($UniqueCCData[$z]."AD Group".Contains("CBC_CBC_") -eq $True)
    {
        $CBCGroups += (CBC_clone $UniqueCCData[$z]."AD Group" $z)
    }
}
$CBCGroups += (CBC_clone "CBC_CBC_VIPs" 5)
$CBCGroups

これにより、目的の出力が生成されます。

CBCGroup                 Element
--------                 -------
CBC.CBCEnterprise Admins       1
CBC.CBCHelp Desk               2
CBC.CBCMarketing               3
CBC.CBCSales                   4
CBC.CBCVIPs                    5
于 2012-07-10T22:42:27.500 に答える