Questo script in PowerShell cicla su tutte le WebApplication e tutte le site Collection, di una farm SharePoint, e cancella gli utenti presenti nel file e non più esistenti in Active Directory.

Come input usa un file CSV generato tramite lo script Verificare se gli utenti della farm esistono in AD

Nel file DeleteSPUsersReadedFromCSV.txt viene scritto il log degli utenti cancellati (vedi $logfile)
PowerShell: DeleteSPUsersReadedFromCSV.ps1
#File: DeleteSPUsersReadedFromCSV.ps1
#cancella gli utenti letti da un file CSV da SharePoint
#prima verifica che l'utente non esista in ActiveDIrectory
 
$ErrorActionPreference = "Stop"
  
function ConvertTo-Sid ($NtAccount) {
  (new-object system.security.principal.NtAccount($NTaccount)).translate([system.security.principal.securityidentifier])
}

$file = ".\CheckIfUserExistInAD.txt"
#leggo gli utenti da cancellare
$users = Import-Csv $file | ? {$_.Name -ne "SHAREPOINT\system"}

Write-Host "Cancello da SharePoint gli utenti letti dal file: $file" -ForegroundColor Yellow
Write-Host "Utenti letti: $($users.Count)" -ForegroundColor Yellow
$usersToDelete = @{}
#ricontrollo che gli utenti non esistano in AD
$users| % {
  $userlogin = $_.Name
  try {
	$userloginAD = $userlogin.Replace("i:0#.w|", "")
    #se risolvo il SID l'utente esiste
    $sid =  (ConvertTo-Sid $userloginAD).Value.ToLower()
  } catch {
	$usersToDelete.Add($userlogin, "")
  }
}

Write-Host "Utenti da CANCELLARE: $($usersToDelete.Count)" -ForegroundColor Red
Read-Host "Premi invio per proseguire"

$logfile = ".\DeleteSPUsersReadedFromCSV.txt"
"" > $logfile 
 
Get-SPWebApplication | Get-SPSite -Limit ALL | % {
  $w = $_.RootWeb
  #elenco di tutti gli utenti della site collection
 
  write-host ""
  write-host "$($w.url) - $($users.count)" -foregroundcolor green
	
  $spusers = $w.SiteUsers 

  $usersToDelete.GetEnumerator()  | % {
   	$userlogin = $_.Name
	#Write-Host "." -NoNewline
	if($spusers[$userlogin] -ne $null) {
  	  #se effettivamente l'utente non esiste in AD, lo cancello
	  Write-Host "" 
	  $msg = "Cancello $userlogin da $($w.url)"
	  $msg >> $logfile 
      write-host $msg -foregroundcolor red
	  Remove-SPUser $userlogin -web $w  -Confirm:$false
	}
  }
  $w.Dispose()
}
#verifica
#$d = Get-Content $file 
#$d | % {$a = $_.Replace("Cancello ", ""); $i = $a.IndexOf(" da "); if($i -gt 0) {$a.substring(0, $i)}} | sort -Unique > .\verifica.txt
Potrebbe interessarti anche: