这是我的问题的基础,我正在尝试从多个 Web 应用程序的所有网站集中删除大量用户。我的总体目标是从近 10,000 个网站集(大约 15 个 Web 应用程序中的所有网站集)中删除大约 50,000 名用户。
我目前有一种方法可以做到这一点,即拥有一个用户列表和一个站点列表,然后简单地遍历站点并从每个站点中删除每个用户。
我想知道是否有更有效的方法来执行此操作,或者是否有一种方法可以从 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 个用户,但这仍然意味着完成这项任务需要数百天,让我认为必须有更好的方法来做到这一点。
我尝试将 Web 应用程序 url 添加为数组中的站点之一,但它并没有像我想象的那样工作,因为它没有从其中的每个站点集中删除用户。
如果有人知道如何更好地做到这一点,或者有什么方法可以大大加快我所拥有的速度,我将不胜感激。谢谢!