0

这是我的问题的基础,我正在尝试从多个 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 添加为数组中的站点之一,但它并没有像我想象的那样工作,因为它没有从其中的每个站点集中删除用户。

如果有人知道如何更好地做到这一点,或者有什么方法可以大大加快我所拥有的速度,我将不胜感激。谢谢!

4

0 回答 0