以下是我的问题的基础,我试图从多个Web应用程序中的所有网站集中删除非常大的用户列表。我的总体目标是从近10,000个网站集中删除大约50,000个用户(大约15个Web应用程序中的所有网站集)。
我目前有一种方法可以通过拥有一个用户列表和一个站点列表来完成此操作,并简单地循环遍历站点并从每个站点中删除每个用户。
我想知道是否有更有效的方法来执行此操作,或者是否有一种方法可以从Web应用程序中删除用户并将其级联到每个网站集中。
以下是我目前的情况:
$users = get-content $userList
$sites = get-content $siteList
Write-Host "Getting all listed sites"
Write-Host "Getting all listed users"
$siteArray = @()
for ($i=0; $i -lt $sites.length; $i++)
{
try
{
$rmUserCount = 0
$userNotExist = 0
$failedRm = 0
Write-Host "Working on" $sites[$i]"..."
for ($c=0; $c -lt $users.length; $c++)
{
Write-Host "Attempting to remove user" $users[$c] -ForegroundColor Yellow
try
{
write-host $isuser
$isUser = Get-SPUser -Identity $users[$c] -web $sites[$i] -ErrorAction SilentlyContinue
}
catch
{
}
if($isUser)
{
try
{
Remove-SPUser -Identity $users[$c] -Web $sites[$i] -Confirm:$false
Write-Host "The user" $users[$c] "was removed from the site" $sites[$i] -ForegroundColor Green
$rmUserCount++
}
catch
{
Write-Host "The user still exists and was not removed" -ForegroundColor Red
$failedRm++
}
}
else
{
$userNotExist++
Write-Host "user" $users[$c] "does not exist on" $sites[$i]"... moving on"
}
$isuser=$null
}
$addInArrayOut = $rmUserCount.ToString() + " users removed from " + $sites[$i].ToString() + ", " + $userNotExist.ToString() + " users did not exist on the site, " + $failedRm.ToString() + " users failed to be removed"
$siteArray += $addInArrayOut
}
catch
{
Write-Host $_ $Error[0] -ForegroundColor Red
}
}
从我使用measure命令的计算中,我可以每秒删除大约10个用户,但这仍然意味着完成此任务需要数百天,让我觉得必须有更好的方法来执行此操作。
我尝试将网络应用程序网址添加为数组中的某个网站,但它没有像我想象的那样工作,因为它没有从其中的每个网站集中删除用户。
如果有人知道如何更好地做到这一点,或者是一种大幅加快我所拥有的方式,我会非常感激。谢谢!