比较AD站点和SCCM边界

时间:2016-03-15 04:22:09

标签: powershell

我试图通过使用下面的powershell脚本来比较Active Directory站点与SCCM边界,但是它没有按预期提供输出。 SCCM中实际有3个AD站点可用,但是该脚本为我提供了SCCM边界中没有可用AD站点的输出。

$sites = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Sites 
$CMBoundary = Get-CMBoundary | select value 
foreach ($adsite in $sites.name) { 
   foreach ($cmb in $CMBoundary.value ) { 
       if (($cmb | select value) -eq ($adsite | select name)) { 
           "$adsite available in CM" 
            } 
            else { "$adsite is NOT in CM $cmb" } 
            } 
     } 

有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

想想我看到了这个问题。

在第3行,您为.Name选择了$sites属性,并将其存储在$adsite中,用于循环的每一步。

foreach ($adsite in $sites.name) { 

但是,您还可以尝试使用以下行重新获取.Name属性:

if (($cmb | select value) -eq ($adsite | select name))

这不起作用。您已将$adsite设置为等于$sites.Name中的任何内容,但这不会为.Name提供$adsite属性。

再次尝试此操作,这次删除了第二个Select语句。失败的原因是没有任何东西可以比较。我修改了你的代码以删除这个逻辑,让我知道它是否有效。

 foreach ($adsite in $sites.name) { 
   foreach ($cmb in $CMBoundary.value ) { 
       if ($cmb -eq $adsite) { 
           "$adsite available in CM" 
            } 
            else { "$adsite is NOT in CM $cmb" } 
            } 
     } 

但请注意,如果您的边界名称与AD网站名称不完全匹配,则此代码会给您带来大量误报。