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-Key: 62846046370

Url: https://administrator.de/contentid/62846046370

Printed on: June 18, 2024 at 14:06 o'clock

Member: niraxx
niraxx Jun 11, 2024 updated at 14:20:33 (UTC)
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
Member: hempel
hempel Jun 11, 2024 updated at 15:37:38 (UTC)
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ß
Member: Technoolli
Technoolli Jun 13, 2024 at 07:20:12 (UTC)
Goto Top
Zitat von @hempel:

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.
Member: hempel
hempel Jun 13, 2024 updated at 07:29:32 (UTC)
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  
Member: Technoolli
Technoolli Jun 13, 2024 updated at 07:32:53 (UTC)
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.
Member: hempel
hempel Jun 13, 2024 updated at 07:35:22 (UTC)
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.
Member: Technoolli
Technoolli Jun 13, 2024 updated at 07:38:30 (UTC)
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.
Member: hempel
hempel Jun 13, 2024 updated at 07:37:59 (UTC)
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.
Member: Technoolli
Technoolli Jun 13, 2024 at 07:38:17 (UTC)
Goto Top
Aber kann Ich das wie oben geschrieben auch auf die gesamte Domaine ausweiten ?
Member: hempel
Solution hempel Jun 13, 2024 updated at 07:40:38 (UTC)
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.