Benutzer mit den meisten Antworten
Ordnerstruktur per Script loeschen, welches in der Ordnerstruktur enthalten ist

Frage
-
Hi,
ich habe einen Ordner C:\Test. In diesem Ordner liegt ein Powershellscript mit dem man den Ordner C:\Test mit allen Dateien und Unterordnern löschen kann. Mir ist bewusst das man den Ordner nicht löschen kann da das Script darin ausgeführt wird.
Also hab ich mir gedacht, dass wenn ich in dem Script auf löschen Drücke, ein zweites Script und eine Verknüpfung die dieses Script aufruft, in den Ordner C:\temp kopiert wird und in dem vorherigen Script diese Verknüpfung aufgerufen wird und sich das erste Script beendet.
In dem Script welches nun über die Verknüpfung auf C:\temp aufgerufen wird, wird der Ordner C:\Test gelöscht.
Es zeigt aber trotzdem noch an das der Ordner nicht gelöscht werden kann, da er noch verwendet wird...
Hoffe ich hab es nicht zu kompliziert geschrieben...
Hier mein Code:
Copy-Item C:\Test\Deinstallationsscript.ps1 C:\temp Copy-Item C:\Test\Deinstallation.lnk C:\temp start C:\temp\Deinstallation.lnk $Erstes_Script.close()
Die 2 Dateien werden auch einwandfrei kopiert
start-sleep -seconds 5 Remove-Item C:\Pflegemenü_Data -Force -Recurse
Ich habe sogar eine 5 Sekundenpause eingefügt damit sich das erste Script richtig beenden kann und trotzdem funktioniert es nicht...
Danke für eure Hilfe und einen schönen Feierabend :)
MfG McMaggi
- Bearbeitet MCMaggi Montag, 19. September 2016 13:42
Antworten
-
Du brauchst kein zweites Script.
Powershell Scripte werden in den Speicher geladen und laufen dort. Du kannst das Script File einfach von seinem eigenen Code aus Löschen. Das Script läuft trotzdem weiter.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Neu: Powershell Code Manager v5 ! Link
(Schneller, besser + komfortabler scripten.)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Montag, 19. September 2016 14:06
- Als Antwort markiert MCMaggi Dienstag, 20. September 2016 05:40
-
Moin,
Denniver hat natürlich recht, ABER: Du musst natürlich irgendwie zu dem Skript kommen, um es aufzurufen! Und wenn Du das per Explorer tust, dann ist es das offene Explorer-Fenster, das das Löschen verhindert und nicht das ausgeführte Skript :-)
Gerade getestet:
Remove-Item (Get-Item $PSScriptRoot).FullName -Recurse
funktioniert, wenn man es per powershell c:\tempt\testfolder\deltest.ps1 aufruft, nicht aber, wenn man dahin browst und mit der rechten Maustaste drauf klickt.
Evgenij Smirnov
msg services ag, Berlin -> http://www.msg-services.de
my personal blog (mostly German) -> http://it-pro-berlin.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.comIn theory, there is no difference between theory and practice. In practice, there is.
- Bearbeitet Evgenij Smirnov Montag, 19. September 2016 14:45
- Als Antwort markiert MCMaggi Dienstag, 20. September 2016 05:40
Alle Antworten
-
Du brauchst kein zweites Script.
Powershell Scripte werden in den Speicher geladen und laufen dort. Du kannst das Script File einfach von seinem eigenen Code aus Löschen. Das Script läuft trotzdem weiter.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Neu: Powershell Code Manager v5 ! Link
(Schneller, besser + komfortabler scripten.)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Montag, 19. September 2016 14:06
- Als Antwort markiert MCMaggi Dienstag, 20. September 2016 05:40
-
Moin,
Denniver hat natürlich recht, ABER: Du musst natürlich irgendwie zu dem Skript kommen, um es aufzurufen! Und wenn Du das per Explorer tust, dann ist es das offene Explorer-Fenster, das das Löschen verhindert und nicht das ausgeführte Skript :-)
Gerade getestet:
Remove-Item (Get-Item $PSScriptRoot).FullName -Recurse
funktioniert, wenn man es per powershell c:\tempt\testfolder\deltest.ps1 aufruft, nicht aber, wenn man dahin browst und mit der rechten Maustaste drauf klickt.
Evgenij Smirnov
msg services ag, Berlin -> http://www.msg-services.de
my personal blog (mostly German) -> http://it-pro-berlin.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.comIn theory, there is no difference between theory and practice. In practice, there is.
- Bearbeitet Evgenij Smirnov Montag, 19. September 2016 14:45
- Als Antwort markiert MCMaggi Dienstag, 20. September 2016 05:40
-
Also wenn du es wirklich per Hand aufrufst, kannst du es auch per Hand löschen. Oder gleich -was viel cleverer wäre- einfach nicht in dem zu löschenden Verzeichnis spreichern. :)
Also ich denke es geht hier um irgendwas automatisch ablaufendes...
Blog: http://bytecookie.wordpress.com
Neu: Powershell Code Manager v5 ! Link
(Schneller, besser + komfortabler scripten.)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.
-
Also wenn du es wirklich per Hand aufrufst,
Evgenij Smirnov
msg services ag, Berlin -> http://www.msg-services.de
my personal blog (mostly German) -> http://it-pro-berlin.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.comIn theory, there is no difference between theory and practice. In practice, there is.
-
-
Ich glaube ich habe mein Problem nicht genau genug erklärt. Ich rufe per Verknüpfung auf dem Desktop ein Skript im Ordner C:\testordner auf. Dieses Script enthält einen Button 'löschen'. Per Klick auf diesen Button möchte ich das sich der Ordner in dem das Script liegt löscht und das Script sich anschließend schließt bzw. erst schließt und dann löscht je nachdem wie es am einfachsten geht.
Danke für eure Hilfe :)
Grüße
-
Kannst du. Get-Content liest das Skript als Textdatei ein und hat danach keine weitere Verbindung zu der Datei. Du kannst sie also löschen. Das Skript ist dann im Hauptspeicher als Text verfügbar (in der Variablen).
Was aber nicht gehen wird, ist dass du mit der Verknüpfung das Skript aufrufst, dass du löschen willst. Sowas musst du irgendwie basteln, vielleicht mit temporären Skripten und einer temporären Verknüpfung.
Aber ehrlich, warum willst du sowas?
-
Es ist für eine Art "Programm" damit wenn man das nicht mehr will einfach löschen kann ohne den Ordner zu suchen. Das war ja nur ein ein Beispiel mit dem C:\Testordner. Es sind mehrere Ordner und dann hab ich gedacht wenn man das "Programm" nicht mehr nutzt, klickt man einfach auf den Button und die Ordner werden alle von alleine gelöscht ohne das der Benutzer etwas tun muss.
Trotzdem danke für eure Hilfe :)
Grüße
-
Aha, ein sich selbst aufräumendes Programm. Find ich gut. Üblicherweise macht man das über einen Installer und seine Deinstallationsroutine. :)
Aber wenn du einen Weg findest den offenen Explorer-Handle auf die Datei programatisch zu schliessen, was grundsätzlich irgendwie gehen sollte, dann sollte dein Weg auch gehen, ohne zweites Script. Die Frage ist nur, lohnt sich der Aufwand oder hast du nicht in der gleichen Zeit einen Installer gebastelt? :)
Grüße, DenniverBlog: http://bytecookie.wordpress.com
Neu: Powershell Code Manager v5 ! Link
(Schneller, besser + komfortabler scripten.)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.
-
-
> Würde mich dennoch interessieren ob es nicht noch anders geht :)Mit dem Holzhammer, ja: Ermittle Dein Arbeitsverzeichnis, und wenn esdas ist, das Du löschen willst, kopiere Dich selbst nach %TEMP% und rufeDich dort erneut auf - asynchron in einem neuen Prozess :)Oder schreib das Verzeichnis, das Du löschen willst, in diependingfilerenameoperations und boote neu :D