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
}