Laden...

rekursives Löschen von Directorys auf Remote Systemen

Erstellt von InspectorGadget vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.877 Views
I
InspectorGadget Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren
rekursives Löschen von Directorys auf Remote Systemen

Hi,

da ich neu hier bin Stelle ich mich kurz vor. Guten Tag ich bin der Neue 😄

Also mein geplantes Vorhaben:

GUI Basteln über der die möglichkeit besteht Remote Windows Profile zurückzusetzten/ zu löschen.

Aktuell : Hostname/IP - Adress eintragen und prüfen ob Client im Netzwerk verfügbar, wenn ja komplette Userprofile in eine Listbox ausgeben - Check funktioniert.

Es kann lokal und remote mit Directory.Move() die Verzeichnisse umbennen und kopieren. Dabei muss die Anwendung jedoch mit Administrativen Rechten gestartet werden, was aber ok ist.

Jedoch schaffe ich es nicht mit Directory.Delete() das Verzeichnis zu löschen, lokal ja - remote nein.

Man beachte das mein Account die Administrativen Berechtigungen besitzt. Gibt es hier eine Besonderheit die mir trotz Admin rechte verbietet Dateien remote zu löschen?

Wenn mir jemand einen Ansatz geben kann wäre ich echt dankbar. 😉 😉

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo InspectorGadget,

willkommen im Forum, ich bin einer der Alten 😃

Jedoch schaffe ich es nicht mit Directory.Delete() das Verzeichnis zu löschen, lokal ja - remote nein.

Warum nicht? Bekommst du einen Fehler? Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 5

Wie hast du es denn probiert und welchen Pfad verwendest du dabei? Nutzt du die Amdin-Freigabe z.B. \....\C$... oder wie gehst du vor?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

T
2.224 Beiträge seit 2008
vor 6 Jahren

Hast du ggf. nicht die Überladung mit Rekursiv true verwendet?
Sonst knallt er nur mit dem Pfad weg, wenn der Ordner nicht leer ist, was ja der fall sein dürfte.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

I
InspectorGadget Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren

Vielen dank erstmal für die Antworten,

@gfoidl - den Pfad setze wie folgt zusammen

var sourceDicUserProf = @"\\" + txtHostname.Text + "\\c$\\Users\\" + lBoxExistingProfile.SelectedItem.ToString();

Wenn ich mir das ganze in Messagebox anzeigen lasse passt auch der Pfad.

@T-Virus Das ganze rufe ich wie folgt auf

Directory.Delete(sourceDicUserProf, true);

Als Fehler erhalte ich

Access to the path '\HostnameOrIP\c$\Users\NameDesUsers\AppData\Local\Microsoft\Windows' is denied.

oder

Could not find file 'Application Data'.

Die Fehlermeldung ist bei den Userprofilen unterschiedlich.

Die Anwendung wird aber mit Administrationsrechten gestartet. Wenn ich mich Remote mit den Clients connecte kann ich die Directorys löschen.

D
985 Beiträge seit 2014
vor 6 Jahren

Wie muss ich mir das mit dem Remote connecten und Directory löschen vorstellen?

Alles über den Explorer? (vor allem das Löschen auch?)

I
InspectorGadget Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren

@ Sir Rufo -

Ja, via Explorer. Wollte nur damit sicherstellen das meine Berechtigung mir das Erlauben.

***
Vllt. kurze Info - bin Sysadmin und um mir für diverse Sachen das leben zu vereinfachen hab ich irgendwie C# für mich entdeckt 😃

D
985 Beiträge seit 2014
vor 6 Jahren

Schau dir Cannot delete directory with Directory.Delete(path, true) an (und vor allem die Kommentare durchlesen).

Die zickigen Verzeichnisse sind Junctions (ReparsePoint) und bedürfen einer entsprechenden Behandlung.

I
InspectorGadget Themenstarter:in
4 Beiträge seit 2017
vor 6 Jahren

Hallo Sir Rufo,

vielen Dank für Link.

Ich hab das ganze seit 5 oder 6 Stunden versucht, immer noch negativ.

Access denied.

Habe aus dem oben genannten Link folgenden Code Schnipsel bezogen und diverse anpassungen versucht :


public static void DeleteDirectory(string target_dir)
{
    string[] files = Directory.GetFiles(target_dir);
    string[] dirs = Directory.GetDirectories(target_dir);

    foreach (string file in files)
    {
        File.SetAttributes(file, FileAttributes.Normal);
        File.Delete(file);
    }

    foreach (string dir in dirs)
    {
        DeleteDirectory(dir);
    }

    Directory.Delete(target_dir, false);
}

Wobei ich festgestellt habe das alle Dateien gelöscht sind, jedoch hängt er sich noch an den Verzeichnissen und Unterverzeichnissen auf.

Vorerst eine Quick&Dirty Lösung :

System.Diagnostics.Process.Start("cmd.exe", "/c" + @"rmdir /s/q " + sourceDicUserProf);

Wäre trotzdem dankbar falls noch jmd eine Idee hat.