Supprimer l'utilisateur AD et ses dossiers associés à l'aide du script Powershell

0

Est-il possible de supprimer un utilisateur AD et ses dossiers associés? La structure du dossier est:

D:\Users\Profiles
D:\Users\Redirect
D:\Users\Data

J'essaie d'utiliser le script suivant qui supprime les utilisateurs qui ne se sont pas connectés depuis 90 jours. Ce n'est pas ce que je veux.

function Delete-ADUser
{
    Param($userName = $(throw 'Enter a username to delete'))
    $searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"","(&(objectcategory=user)(sAMAccountName=$userName))")
    $user = $searcher.findone().GetDirectoryEntry()
    $user.psbase.DeleteTree()
}


$NumDays = 90
$LogDir = ".\Removed-User-Accounts.log"

$currentDate = [System.DateTime]::Now
$currentDateUtc = $currentDate.ToUniversalTime()
$lltstamplimit = $currentDateUtc.AddDays(- $NumDays)
$lltIntLimit = $lltstampLimit.ToFileTime()
$adobjroot = [adsi]''
$objstalesearcher = New-Object System.DirectoryServices.DirectorySearcher($adobjroot)
$objstalesearcher.filter = "(&(objectCategory=person)(objectClass=user)(lastLogonTimeStamp<=" + $lltIntLimit + "))"
$users = $objstalesearcher.findone()

Write-Output `n`n"----------------------------------------" "ACCOUNTS OLDER THAN "$NumDays" DAYS" "PROCESSED ON:" $currentDate "----------------------------------------" `
| Out-File $LogDir -append

if ($users.Count -eq 0)
{
       Write-Output "  No account needs to be removed." | Out-File $LogDir -append
}
else
{
       foreach ($user in $users)
       {
              # Read the user properties
              [string]$adsPath = $user.Properties.adspath
              [string]$displayName = $user.Properties.displayname
              [string]$samAccountName = $user.Properties.samaccountname
              [string]$lastLogonInterval = $user.Properties.lastlogontimestamp

              # Delete the user
              Delete-ADUser $samAccountName

              # Convert the date and time to the local time zone
              $lastLogon = [System.DateTime]::FromFileTime($lastLogonInterval)

              Write-Output "  Removed user " $displayName" | Username: "$samAccountName" | Last Logon: "$lastLogon"`n" `
              | Out-File $LogDir -append
       }
}

Question: Comment puis-je modifier le script qui me demandera un nom d'utilisateur pour entrer et supprimer ses dossiers?

Valentin Bajrami
la source
Quelle est la relation entre l'utilisateur du domaine et ces dossiers?
evilSnobu
@kamikatze Ces utilisateurs sont des utilisateurs de domaine. Je pouvais supprimer manuellement l'utilisateur, puis ses dossiers, mais je pensais le faire d'un coup.
Valentin Bajrami
Où se trouvent ces dossiers? Sur un ordinateur client? Sur un partage de réseau?
evilSnobu
@kamikatze ces dossiers sont des dossiers partagés, de sorte \\addsServer\$Profiles\%username% et ainsi de suite
Valentin Bajrami

Réponses:

1

En supposant que vous exécutez ceci sur "includesServer", $ profilePath est local sur la machine et D: \ Profiles \ nom_utilisateur stocke le profil de l'utilisateur.

$GoodbyeList = 'JDoe', 'KDoe', 'LDoe'
$profilePath = 'D:\Profiles'

foreach ($user in $GoodbyeList) {
    Remove-ADUser -Identity $user
    Remove-Item "$profilePath\$user" -Recurse -Force -Verbose
}
evil Snobu
la source
fonctionne bien! Est-il possible de fournir le nom d'utilisateur en tant que paramètre?
Valentin Bajrami
Pour référence future, remplacez la première ligne par:param ([Parameter(Mandatory=$true)] [string[]]$GoodbyeList)
evilSnobu
0

si vos utilisateurs ne partagent pas l'emplacement racine commun pour les répertoires de base, vous pouvez interroger les attributs de répertoire de base de chaque utilisateur avant de supprimer des dossiers.

foreach ($ user dans $ GoodbyeList) {Remove-ADUser -Identity $ user $ homeDirectory = (Get-ADUser $ user -Propriétés homeDirectory | Select-Object -ExpandProperty homeDirectory) Remove-Item "$ homeDirectory" -Recurse -Force -Verbose}

Andrzej
la source