Sub-redes duplas para um site (AD)

3

Estou tentando criar sub-redes em sites existentes carregados de um arquivo .txt. Meu código é assim:

<#Add subnets to matching sites#>
        $i=0
        foreach($_ in $subnetList){
            $currentSites = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites
            if($currentSites.Subnets -match $_){
                continue
            }else{                            
                New-ADReplicationSubnet -Name $_ -Site $siteList[$i]
                $i++
            }
        }

O $subnetList e o $siteList têm o seguinte conteúdo:

$subnetList = 
    10.0.0.0/21
    10.0.5.0/21
    10.0.9.0/24
    10.0.11.0/24
    10.0.14.0/24
    10.0.19.0/24

<#SITENAME1 has 2 occurences.#>
$siteList = 
    SITENAME1
    SITENAME1
    SITENAME2
    SITENAME3
    SITENAME4
    SITENAME5

O problema é que quando SITENAME1 tem a primeira sub-rede adicionada, retorna um erro na segunda tentativa:

New-ADReplicationSubnet : An attempt was made to add an object to the directory 
with a name that is already in use

Existe alguma maneira de adicionar uma sub-rede extra a este site? Technet fala sobre a opção -Instance . Eu não tenho certeza de como implementar isso, eu tenho medo.

EDIT: Eu também perguntei exatamente essa mesma pergunta no StackOverflow sem sucesso. Visto que esta é talvez mais uma comunidade orientada para o Active Directory, eu queria tentar a minha sorte aqui. Se isso for contra as regras, vou deletar minha pergunta.

    
por ses 24.09.2013 / 21:42

2 respostas

3

Primeiro, ter duas listas separadas com pares de valores de chave e > não é tão brilhante, mas vamos trabalhar com ela.

A lógica condicional atual do seu script nunca detectará sub-redes existentes. $currentSites será sempre uma coleção de sites, não um único objeto de site. A coleção não possui o parâmetro Subnets e a instrução sempre retornará false, pois uma é sempre $null e uma é sempre uma string.

A recuperação de toda a lista de sites em cada iteração é demorada e desnecessária, vamos tentar trabalhar com os dados que já temos em vez

Como o índice n na matriz $siteList sempre corresponde ao índice n na matriz $subnetList , vamos usar um loop for regular com um contador comum $n :

for ($n = 0; $n -lt $subnetList.Count; $n++)
{
    // Let's see if the subnet exists, and what site it's assigned to
    $existingSubnet = Get-ADReplicationSubnet $subnetList[$n] -Properties Site -ErrorAction SilentlyContinue

    if(-not($existingSubnet))
    {
        // None exist already, go ahead
        New-ADReplicationSubnet $subnetList[$n] -Site $siteList[$n]
    }
    else
    {
        if(($existingSubnet.Site).ToString() -ne $siteList[$n])
        {
            // It exists but not in the right site
            Set-ADReplicationSubnet $subnetList[$n] -Site $siteList[$n]
        }
    }
}

Faça um favor a si mesmo, consolide os dois arquivos em um único arquivo CSV. Então você pode usar foreach o que você quiser: -)

Exemplo de CSV separado por ponto-e-vírgula (SitesNSubnets.csv):

Subnet;SiteName
10.0.0.0/21;SITENAME1
10.0.5.0/21;SITENAME1
10.0.9.0/24;SITENAME2
10.0.11.0/24;SITENAME3
10.0.14.0/24;SITENAME4
10.0.19.0/24;SITENAME5

Em seguida, use Import-CSV para importá-lo:

$data = Import-CSV -Path .\SitesNSubnets.csv -Delimiter ";"

foreach ($entry in $data)
{
    Write-Host "This is the subnet: " + $entry.Subnet + " and this is the corresponding site: " $entry.SiteName
}
    
por 25.09.2013 / 02:17
2

Um objeto de sub-rede, quando vinculado a um objeto de site, informa ao Active Directory e ao servidor membro a que site o servidor membro do domínio pertence.

Você não pode adicionar objetos de sub-rede duplicados ao Active Directory.

Você não pode vincular um objeto de sub-rede a vários sites.

Você pode fazer uso de objetos de sub-rede que contêm espaço de endereço sobreposto.

A menos que seus servidores estejam usando alguma forma de física quântica de TI que eu não conheça, não faz sentido que um servidor pertença ao site 'Miami' e ao site 'Dallas' simultaneamente, não é?

O que você pode fazer é definir sub-redes menores e mais específicas dentro de uma sub-rede maior para sites diferentes. Por exemplo, você poderia atribuir a sub-rede 10.0.0.0/8 a Dallas e, em seguida, atribuir a 10.2.0.0/16 a Miami. O Active Directory dará precedência à sub-rede mais específica. Você pode até mesmo adicionar um objeto de sub-rede / 32 ao Active Directory se quiser forçar um host específico a autenticar-se em um site específico.

<#SITENAME1 has 2 occurences.#>
$siteList = 
    SITENAME1
    SITENAME1

POR QUE?!?! Que sentido isso faz? Como Zoredache disse, isso está quebrado. Você não pode ter dois sites com o mesmo nome.

Aqui está eu tentando adicionar um site chamado Arlington quando eu já tenho um site chamado Arlington:

Aquiestoudefinindováriosobjetosdesub-rede,todosvinculadosaomesmosite,dosquaistantoasub-rede10.1.2.64/26quantoarede10.0.0.0/24seencaixamdentrodasuper-rede10.0.0.0/8':'

    
por 24.09.2013 / 22:08