Cancellare da SharePoint 2010 gli utenti non esistenti in AD
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)
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