powershell como remover link simbólico quebrado

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

O erro está relacionado ao fato de o rm -force tentar remover itens dentro de onde quer que o link esteja apontando. Como posso remover essa coisa usando a linha de comando? Onde posso relatar bugs do PowerShell / Shell? Parece que o PowerShell não está no ms connect.

Ian Kelling
fonte

Respostas:

8

Tentar:

cmd /c rmdir testlink

cmd não sabe sobre rm

Pausado até novo aviso.
fonte
Funciona, agora onde poderia informar a Microsoft sobre esse bug?
23610 Ian Kelling
O PS ainda não possui, mklinkportanto, faz sentido que ele não saiba lidar com os quebrados. Eu chamaria isso de "solicitação de recurso" em vez de "bug". Eu imagino que já está no roteiro. Aqui está um link para feedback: connect.microsoft.com/PowerShell
Pausado até novo aviso.
obrigado. Não sei como eu perdi o link ms connect antes.
23909 Ian Kelling
1

Use o comando mountvol / d

Liste o GUID:

PS C:> Mountvol

então

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

substituindo o GUID relevante no acima

SS64
fonte
Não há indicação de qual volume corresponde ao link simbólico quebrado que desejo excluir.
23610 Ian Kelling
Eu ainda não tentei ainda, mas eu não acho que importa, basta executar 'mountvol' no servidor e deve listar todos os pontos de montagem de todos os volumes (juntamente com seus GUIDs)
SS64
1

Eu uso .net do powershell para fazer isso

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

Onde $ Path é igual ao caminho do seu link simbólico. O rmdir não fornece resultados consistentes e quase sempre retorna um erro quando executado a partir do PowerShell, independentemente de ter sido bem-sucedido ou não.

pizzim13
fonte