Powershell, wie man defekten Symlink entfernt

9
PS C:\> cmd /c mklink /d testlink non-existent-dir
symbolic link created for testlink <<===>> non-existent-dir
PS C:\> rm .\testlink
Remove-Item : C:\testlink is a NTFS junction point. Use the Force parameter to delete or modify.
At line:1 char:3
+ rm <<<<  .\testlink
    + CategoryInfo          : WriteError: (C:\testlink:DirectoryInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : DirectoryNotEmpty,Microsoft.PowerShell.Commands.RemoveItemCommand

PS C:\> rm -force .\testlink
Remove-Item : Could not find a part of the path 'C:\testlink'.
At line:1 char:3
+ rm <<<<  -force .\testlink
    + CategoryInfo          : WriteError: (C:\testlink:String) [Remove-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

PS C:\>

Der Fehler hängt mit der Tatsache zusammen, dass rm -force versucht, Elemente darin zu entfernen, wo immer der Link zeigt. Wie kann ich dieses Ding über die Kommandozeile entfernen? Wo kann ich Powershell- / Shell-Fehler melden? Es scheint, dass Powershell nicht auf MS Connect ist.

Ian Kelling
quelle

Antworten:

8

Versuchen:

cmd /c rmdir testlink

cmd weiß nicht über rm

Bis auf weiteres angehalten.
quelle
Funktioniert, wo könnte MS nun über diesen Fehler informiert werden?
Ian Kelling
PS hat noch mklinknicht, also macht es Sinn, dass es nicht weiß, wie man mit kaputten umgeht. Ich würde es eher eine "Feature-Anfrage" als einen "Bug" nennen. Ich würde mir vorstellen, dass es bereits auf der Roadmap steht. Hier ist jedoch ein Link für Feedback: connect.microsoft.com/PowerShell
Bis auf weiteres angehalten.
Vielen Dank. Ich weiß nicht, wie ich den ms connect Link zuvor verpasst habe.
Ian Kelling
1

Verwenden Sie den Befehl mountvol / d

Listen Sie die GUID auf:

PS C:> Mountvol

dann

PS C:> mountvol \? \ Volume {2eca078d-5cbc-43d3-aff8-7e8511f60d0e} \ / d

Ersetzen der entsprechenden GUID oben

SS64
quelle
Es gibt keinen Hinweis darauf, welches Volume dem defekten Symlink entspricht, den ich löschen möchte.
Ian Kelling
Ich habe es noch nicht versucht, aber ich denke nicht, dass das wichtig ist. Führen Sie einfach 'mountvol' auf dem Server aus und es sollten alle Mount-Punkte auf allen Volumes (zusammen mit ihren GUIDs)
aufgelistet sein
1

Ich benutze dazu .net von Powershell

[System.IO.Directory]::Delete($Path,$true)

Wobei $ Path gleich dem Pfad Ihres Symlinks ist. rmdir liefert kein konsistentes Ergebnis und gibt fast immer einen Fehler zurück, wenn es von Powershell ausgeführt wird, unabhängig davon, ob es erfolgreich war oder nicht.

pizzim13
quelle