technoolli
Goto Top

Per GPO bestimmten User auf den Client und Server löschen

Hallo Admin Kollegen,

Ich möchte gerne unter

C:\Users\Test

Das Profil und den User "Test" komplett löschen lassen auf allen Clients und Servern.

Dies möchte Ich gerne per GPO realisieren.

Hat jemand ne Idee ?

Dankeschön

Content-ID: 62846046370

Url: https://administrator.de/forum/per-gpo-bestimmten-user-auf-den-client-und-server-loeschen-62846046370.html

Ausgedruckt am: 22.12.2024 um 23:12 Uhr

niraxx
niraxx 11.06.2024 aktualisiert um 16:20:33 Uhr
Goto Top
würde ich per Batch oder Powershell-Befehle in einer Computerrichtlinie machen.

Für das saubere Löschen des Benutzerprofils gibt es hier eine Lösung: Profile sauber löschen via Batch
13034433319
13034433319 11.06.2024 aktualisiert um 17:37:38 Uhr
Goto Top
Mache ich mittels PS Startskript und GPO:
function Remove-Userprofile {
    [cmdletbinding(SupportsShouldProcess=$true,ConfirmImpact="High")]  
    param(
        [Parameter(mandatory=$true)][string[]]$identity
    )
    begin {
        if(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(544)){
            write-error "CMDLet needs to be run elevated!" -Category PermissionDenied  
            break
        }
        Add-Type –MemberDefinition '[DllImport("ntdll.dll")] public static extern int RtlAdjustPrivilege(int Privilege, bool Enable, bool CurrentThread, ref bool EnabledOut);' -name token -namespace priv | out-null  
        9,17,18 | %{[void][priv.token]::RtlAdjustPrivilege($_,1,0,[ref]0)}
        $userprofiles = Get-CimInstance Win32_Userprofile | ?{!$_.Special -and !$_.Loaded}
    }
    process{
        foreach($ident in $identity){
            if ($ident -notlike 'S-1-5*'){  
                try{
                    $ident = (New-Object System.Security.Principal.NTAccount($ident)).Translate([System.Security.Principal.SecurityIdentifier]).Value
                }catch{}
            }
            $profile = $userprofiles | ?{$_.SID -eq $ident}
            if ($profile){
                if ($PSCmdlet.ShouldProcess($ident,"Remove user profile")){  
                    Write-Verbose "Removing profile for identity '$ident'"  
                    # remove userprofile
                    $profile | Remove-CimInstance
                    # remove profile data
                    if (Test-Path -LiteralPath $profile.LocalPath -PathType Container){
                        remove-item -LiteralPath $profile.LocalPath -Recurse -Force
                    }
                }
                
            }else{
                Write-Warning "Profile for identity '$ident' not found."  
            }
        }
    }
    end{}
}

Remove-Userprofile -identity 'Test' -verbose  

Gruß
Technoolli
Technoolli 13.06.2024 um 09:20:12 Uhr
Goto Top
Zitat von @13034433319:

Mache ich mittels PS Startskript und GPO:
function Remove-Userprofile {
    [cmdletbinding(SupportsShouldProcess=$true,ConfirmImpact="High")]  
    param(
        [Parameter(mandatory=$true)][string[]]$identity
    )
    begin {
        if(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(544)){
            write-error "CMDLet needs to be run elevated!" -Category PermissionDenied  
            break
        }
        Add-Type –MemberDefinition '[DllImport("ntdll.dll")] public static extern int RtlAdjustPrivilege(int Privilege, bool Enable, bool CurrentThread, ref bool EnabledOut);' -name token -namespace priv | out-null  
        9,17,18 | %{[void][priv.token]::RtlAdjustPrivilege($_,1,0,[ref]0)}
        $userprofiles = Get-CimInstance Win32_Userprofile | ?{!$_.Special -and !$_.Loaded}
    }
    process{
        foreach($ident in $identity){
            if ($ident -notlike 'S-1-5*'){  
                try{
                    $ident = (New-Object System.Security.Principal.NTAccount($ident)).Translate([System.Security.Principal.SecurityIdentifier]).Value
                }catch{}
            }
            $profile = $userprofiles | ?{$_.SID -eq $ident}
            if ($profile){
                if ($PSCmdlet.ShouldProcess($ident,"Remove user profile")){  
                    Write-Verbose "Removing profile for identity '$ident'"  
                    # remove userprofile
                    $profile | Remove-CimInstance
                    # remove profile data
                    if (Test-Path -LiteralPath $profile.LocalPath -PathType Container){
                        remove-item -LiteralPath $profile.LocalPath -Recurse -Force
                    }
                }
                
            }else{
                Write-Warning "Profile for identity '$ident' not found."  
            }
        }
    }
    end{}
}

Remove-Userprofile -identity 'Test' -verbose  

Gruß

Bei mir kommt dort folgende Fehlermeldung und es geht nicht:

Remove-Userprofile -identity 'Test' -verbose
AUSFÜHRLICH: Vorgang "CIM-Instanzen aufzählen" mit den folgenden Parametern durchführen, "'namespaceName' =
root\cimv2,'className' = Win32_Userprofile".
AUSFÜHRLICH: Vorgang "CIM-Instanzen aufzählen" wurde abgeschlossen.
WARNUNG: Profile for identity 'Test' not found.
13034433319
13034433319 13.06.2024 aktualisiert um 09:29:32 Uhr
Goto Top
Du hattest nicht spezifiziert ob es sich um einen lokalen User auf den Maschinen oder Domain-User handelt.
WARNUNG: Profile for identity 'Test' not found.
Wenn es kein lokaler User auf den Maschinen ist sondern ein AD-User bitte auch die Domain vor dem Usernamen angeben!

Remove-Userprofile -identity 'DOMAIN\Test' -verbose  
Technoolli
Technoolli 13.06.2024 aktualisiert um 09:32:53 Uhr
Goto Top
Hmm geht irgendwie nicht, also der Vollständigkeit halber, folgendes:

Nutzername ist
Install

Dies ist ein Domain Nutzer Admin Account, dieser muss auf allen Clients und Servern im Netzwerk gelöscht werden.
Das man im Benutzer Ordner den nicht mehr findet.
13034433319
13034433319 13.06.2024 aktualisiert um 09:35:22 Uhr
Goto Top
Läuft hier schon seit ewigen Zeiten einwandfrei als Startskript per GPO auf die Maschinen deployed, du musst es also fehlerhaft angewendet haben.
Technoolli
Technoolli 13.06.2024 aktualisiert um 09:38:30 Uhr
Goto Top
Ok Ich habe es nochmal probiert ohne Domain konnte er den Ordner löschen... liegt wohl daran das ich auf den Test PC gerade das Konto nicht angemeldet habe, hatte es zum testen gelöscht, muss ich erst neu ziehen.
13034433319
13034433319 13.06.2024 aktualisiert um 09:37:59 Uhr
Goto Top
hatte es zum testen gelöscht, muss ich erst neu ziehen.
Jepp, so kann das ja nicht hinhauen, das geht nur wenn der Profileintrag des Users auch noch in der Registry vorhanden ist.
Technoolli
Technoolli 13.06.2024 um 09:38:17 Uhr
Goto Top
Aber kann Ich das wie oben geschrieben auch auf die gesamte Domaine ausweiten ?
13034433319
Lösung 13034433319 13.06.2024 aktualisiert um 09:40:38 Uhr
Goto Top
Zitat von @Technoolli:

Aber kann Ich das wie oben geschrieben auch auf die gesamte Domaine ausweiten ?

Ja sicher steht doch oben schon x mal.

Nimm eine GPO, dort das Skript als Computer-Startskript definieren und auf die gewünschte OU anwenden, das wolltest du ja auch in deinem Beitrag!
Dies möchte Ich gerne per GPO realisieren.