Удаление списка пользователей из всех семейств сайтов в веб-приложении

Вот основа моего вопроса: я пытаюсь удалить очень большой список пользователей из всех семейств сайтов в нескольких веб-приложениях. Моя общая цель - удалить около 50000 пользователей из почти 10000 семейств сайтов (все семейства сайтов примерно в 15 веб-приложениях).

В настоящее время у меня есть способ сделать это, имея список пользователей и список сайтов, и просто просматривая сайты и удаляя каждого пользователя с каждого сайта.

Мне интересно, есть ли более эффективный способ сделать это, и или есть ли способ удалить пользователя из веб-приложения и сделать это каскадом в каждом из семейств сайтов.

Ниже то, что у меня сейчас есть:

$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 пользователей в секунду, но это по-прежнему означает, что для выполнения этой задачи потребуются сотни дней, и я думаю, что для этого должен быть лучший способ.

Я попытался добавить URL веб-приложения в качестве одного из сайтов в массиве, и он не работал так, как я думал, потому что он не удалял пользователя из каждого семейства сайтов в нем.

Если у кого-то есть идеи, как сделать это лучше, или способ радикально ускорить то, что у меня есть, я был бы очень признателен. Спасибо!

0 ответов

Другие вопросы по тегам