站点的双子网 (AD)

站点的双子网 (AD)

我正在尝试在从 .txt 文件加载的现有站点中创建子网。我的代码如下所示:

<#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++
            }
        }

$subnetList$siteList以下内容:

$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

我遇到的问题是,当 SITENAME1 添加第一个子网时,它在第二次尝试时返回错误:

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

有没有办法继续为该站点添加额外的子网?Technet 讨论了该-Instance切换。我不确定如何实现这一点。

编辑:我也在 StackOverflow 上问过同样的问题,但没有结果。鉴于这也许更像是一个面向 Active Directory 的社区,我想在这里试试运气。如果这违反规则,我会删除我的问题。

答案1

首先,拥有 2 个带有相应键->值对的单独列表并不是那么好,但让我们使用它。

脚本的当前条件逻辑永远不会检测到现有子网。$currentSites将始终是站点的集合,而不是单个站点对象。该集合没有Subnets参数,语句将始终返回 false,因为 one 始终是$null, one 始终是字符串。

每次迭代都检索整个站点列表既耗时又不必要,让我们尝试使用已有的数据

n由于数组中的索引$siteList始终与数组n中的索引相对应$subnetList,因此我们使用带有公共计数器的常规 for 循环$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]
        }
    }
}

不过,请帮自己一个忙,将两个文件合并为一个 CSV 文件。然后,您就可以使用foreach您想要的所有文件 :-)

分号分隔的 CSV 示例 (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

然后使用Import-CSV导入它:

$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
}

答案2

当子网对象链接到站点对象时,它会告诉 Active Directory 和成员服务器域成员服务器属于哪个站点。

您不能将重复的子网对象添加到 Active Directory。

您不能将子网对象链接到多个站点。

利用包含重叠地址空间的子网对象。

除非您的服务器使用我不知道的某种 IT 量子物理学,否则服务器同时属于“迈阿密”站点和“达拉斯”站点是没有意义的,不是吗?

您可以做的是将较大的子网中的较小、更具体的子网定义到不同的站点。例如,您可以将 10.0.0.0/8 子网分配给达拉斯,然后将 10.2.0.0/16 分配给迈阿密。Active Directory 将优先考虑更具体的子网。如果您想强制某个特定主机向特定站点进行身份验证,您甚至可以将 /32 子网对象添加到 Active Directory。

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

为什么?!?!这有什么意义?正如 Zoredache 所说,这有问题。你不能有两个同名的网站。

当我已经有一个名为 Arlington 的站点时,我尝试添加一个名为 Arlington 的站点:

在此处输入图片描述

这里我定义了几个子网对象,它们都链接到同一个站点,其中 10.1.2.64/26 子网和 10.0.0.0/24 网络都位于 10.0.0.0/8“超网”内:

在此处输入图片描述

相关内容