PowerShell, jak usunąć uszkodzony link symboliczny

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:\>

Błąd związany jest z faktem, że rm-force próbuje usunąć elementy w każdym miejscu, w którym wskazuje link. Jak mogę usunąć tę rzecz za pomocą wiersza polecenia? Gdzie mogę zgłaszać błędy PowerShell / Shell? Wygląda na to, że PowerShell nie działa na MS Connect.

Ian Kelling
źródło

Odpowiedzi:

8

Próbować:

cmd /c rmdir testlink

cmd nie wie o tym rm

Wstrzymano do odwołania.
źródło
Działa, gdzie teraz można powiadomić MS o tym błędzie?
Ian Kelling
PS mklinkjeszcze nie ma, więc ma sens, że nie wie, jak radzić sobie z uszkodzonymi. Nazwałbym to „żądaniem funkcji”, a nie „błędem”. Wyobrażam sobie, że jest już w planie. Oto link do opinii: connect.microsoft.com/PowerShell
Wstrzymany do odwołania.
dzięki. Nie wiem, jak wcześniej przegapiłem łącze ms connect.
Ian Kelling,
1

Użyj polecenia mountvol / d

Wymień GUID:

PS C:> Mountvol

następnie

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

zastępując odpowiedni GUID w powyższym

SS64
źródło
Nie ma wskazania, który wolumin odpowiada zepsutemu dowiązaniu symbolicznemu, które chcę usunąć.
Ian Kelling
Jeszcze tego nie próbowałem, ale nie sądzę, żeby to miało znaczenie, po prostu uruchom „mountvol” na serwerze i powinien wyświetlić listę wszystkich punktów montowania na wszystkich woluminach (wraz z ich identyfikatorami GUID)
SS64
1

W tym celu używam .net z PowerShell

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

Gdzie $ Path jest równe ścieżce twojego dowiązania symbolicznego. rmdir nie zapewnia spójnego wyniku i prawie zawsze zwraca błąd podczas uruchamiania z PowerShell, niezależnie od tego, czy się powiódł, czy nie.

pizzim13
źródło