我试图通过使用下面的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" }
}
}
有人可以帮我解决这个问题。
答案 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网站名称不完全匹配,则此代码会给您带来大量误报。