Создание жестких и мягких ссылок с помощью PowerShell
может ли PowerShell 1.0 создавать жесткие и мягкие ссылки, аналогичные разновидности Unix?
Если это не встроено, может кто-нибудь указать мне на сайт, который имеет сценарий ps1, который имитирует это?
Это необходимая функция любой хорошей оболочки, ИМХО. :)
11 ответов:
вы можете позвонить в
mklinkпредоставленcmd, из PowerShell, чтобы сделать символические ссылки:cmd /c mklink c:\path\to\symlink c:\target\fileвы должны пройти
/dдоmklinkесли целью является каталог.для жестких ссылок, я предлагаю что-то вроде Sysinternals Junction.
Windows 10 (и Powershell 5.0 в целом) позволяет создание символических ссылок с помощью командлета New-Item.
использование:
New-Item -Path C:\LinkDir -ItemType SymbolicLink -Value F:\RealDirили в вашем профиле:
function make-link ($target, $link) { New-Item -Path $link -ItemType SymbolicLink -Value $target }поворот на Режим Разработчика чтобы не требовать привилегий администратора при создании ссылок с
New-Item:
нет, он не встроен в PowerShell и утилиты
mklinkв Windows Vista / Windows 7 встроен непосредственно вcmd.exe. Вы можете использовать Расширения Сообщества PowerShell (бесплатно). Существует несколько командлетов для точек повторного анализа различных типов:
New-HardLink,New-SymLink,New-Junction,Remove-ReparsePoint- и другие.
в Windows 7, команда
fsutil hardlink create new-file existing-filePowerShell находит его без полного пути (c:\Windows\system32) или расширение (.исполняемый.)
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" }Удалить Символическую Ссылку:
Function Remove-SymLink ($link) { if (test-path -pathtype container $link) { $command = "cmd /c rmdir" } else { $command = "cmd /c del" } invoke-expression "$command $link" }использование:
New-Symlink "c:\foo\bar" "c:\foo\baz" Remove-Symlink "c:\foo\bar"
The Junction утилита командной строки от Sysinternals упрощает создание и удаление символических (мягких)ссылок. жесткие ссылки и соединения в Windows.
Я написал модуль PowerShell, который имеет собственные оболочки для MKLINK. https://gist.github.com/2891103
включает в себя функции для:
- New-Symlink
- New-HardLink
- New-Junction
захватывает выходные данные MKLINK и при необходимости выдает правильные ошибки PowerShell.
Я объединил два ответа (@bviktor и @jocassid). Он был протестирован на Windows 10 и 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""" } }
на самом деле Sysinternals
junctionкоманда работает только с каталогами (не спрашивайте меня, почему), поэтому она не может жестко связывать файлы. Я бы пошел сcmd /c mklinkдля мягких ссылок (я не могу понять, почему он не поддерживается непосредственно PowerShell), илиfsutilдля жестких ссылок.Если вам это нужно для работы на Windows XP, я не знаю ничего, кроме Sysinternals
junction, Так что вы можете быть ограничены в каталогах.
Я нашел этот простой способ без внешней помощи. Да, он использует архаичную команду DOS, но она работает, это легко, и это ясно.
$target = cmd /c dir /a:l | ? { $_ -match "mySymLink \[.*\]$" } | % ` { $_.Split([char[]] @( '[', ']' ), [StringSplitOptions]::RemoveEmptyEntries)[1] }это использует команду DOS dir, чтобы найти все записи с атрибутом символьной ссылки, фильтры по конкретному имени ссылки, за которым следуют целевые скобки " []", и для каждого - предположительно одного - извлекает только целевую строку.

Comments