simbolicos simbolico links link enlaces enlace eliminar ejemplos duros duro crear powershell symlink

powershell - simbolico - mklink/h



Crear enlaces duros y blandos con PowerShell (11)

Combiné dos respuestas (@bviktor y @jocassid). Fue probado en Windows 10 y Windows Server 2012.

function New-SymLink ($link, $target) { if ($PSVersionTable.PSVersion.Major -ge 5) { New-Item -Path $link -ItemType SymbolicLink -Value $target } else { $command = "cmd /c mklink /d" invoke-expression "$command ""$link"" ""$target""" } }

¿Puede PowerShell 1.0 crear enlaces duros y blandos análogos a la variedad Unix?

Si esto no está incorporado, ¿alguien me puede señalar a un sitio que tiene un script ps1 que imita esto?

Esta es una función necesaria de cualquier buen caparazón, en mi humilde opinión. :)


En Windows 7, el comando es

fsutil hardlink create new-file existing-file

PowerShell lo encuentra sin la ruta completa (c: / Windows / system32) o la extensión (.exe).


En realidad, el comando de junction Sysinternals solo funciona con directorios (no me preguntes por qué), por lo que no puede enlazar archivos. Me gustaría ir con cmd /c mklink para enlaces suaves (no puedo entender por qué no es compatible directamente con PowerShell) o fsutil para fsutil .

Si necesita que funcione en Windows XP, no conozco otra cosa que el junction Sysinternals, por lo que podría estar limitado a directorios.


Encontré esto de la manera más simple sin ayuda externa. Sí, usa un comando arcaico DOS pero funciona, es fácil y está claro.

$target = cmd /c dir /a:l | ? { $_ -match "mySymLink /[.*/]$" } | % ` { $_.Split([char[]] @( ''['', '']'' ), [StringSplitOptions]::RemoveEmptyEntries)[1] }

Utiliza el comando dir de DOS para buscar todas las entradas con el atributo de enlace simbólico, filtra el nombre específico del enlace seguido de los corchetes "[]" de destino, y para cada uno -presumiblemente uno- extrae solo la cadena objetivo.


Escribí un módulo de PowerShell que tiene envoltorios nativos para MKLINK. https://gist.github.com/2891103

Incluye funciones para:

  • New-Symlink
  • New-HardLink
  • New-Junction

Captura la salida de MKLINK y arroja los errores de PowerShell adecuados cuando es necesario.


La utilidad de línea de comandos Junction de Sysinternals facilita la creación y eliminación de enlaces simbólicos (software). Enlaces y uniones duros en Windows.


New-Symlink:

Function New-SymLink ($link, $target) { if (test-path -pathtype container $target) { $command = "cmd /c mklink /d" } else { $command = "cmd /c mklink" } invoke-expression "$command $link $target" }

Remove-Symlink:

Function Remove-SymLink ($link) { if (test-path -pathtype container $link) { $command = "cmd /c rmdir" } else { $command = "cmd /c del" } invoke-expression "$command $link" }

Uso:

New-Symlink "c:/foo/bar" "c:/foo/baz" Remove-Symlink "c:/foo/bar"


No, no está integrado en PowerShell y la utilidad mklink en Windows Vista / Windows 7 está integrada directamente en cmd.exe . Puede usar las extensiones de comunidad de PowerShell (gratis). Hay varios cmdlets para puntos de análisis de varios tipos:

  • New-HardLink ,
  • New-SymLink ,
  • New-Junction ,
  • Remove-ReparsePoint
  • y otros.

Puede llamar al mklink proporcionado por cmd , desde PowerShell para hacer enlaces simbólicos:

cmd /c mklink c:/path/to/symlink c:/target/file

Debe pasar /d a mklink si el objetivo es un directorio.

Para enlaces duros, sugiero algo como Sysinternals Junction .


Puedes usar esta utilidad:

c:/Windows/system32/fsutil.exe create hardlink


Windows 10 (y Powershell 5.0 en general) le permite crear enlaces simbólicos a través del cmdlet New-Item .

Uso:

New-Item -Path C:/LinkDir -ItemType SymbolicLink -Value F:/RealDir

O en tu perfil:

function make-link ($target, $link) { New-Item -Path $link -ItemType SymbolicLink -Value $target }

Active el Modo de desarrollador para no requerir privilegios de administrador al crear enlaces con New-Item :