programing

PowerShell을 사용하여 하드 및 소프트 링크 만들기

linuxpc 2023. 5. 6. 14:06
반응형

PowerShell을 사용하여 하드 및 소프트 링크 만들기

PowerShell 1.0은 Unix 버전과 유사한 하드 및 소프트 링크를 만들 수 있습니까?

만약 이것이 내장되어 있지 않다면, 누가 이것을 모방한 ps1 스크립트가 있는 사이트를 알려줄 수 있습니까?

이것은 좋은 껍질의 필요한 기능입니다, IMHO. :)

윈도우즈 10(및 일반적으로 Powershell 5.0)에서는 New-Item cmdlet을 통해 심볼 링크를 생성할 수 있습니다.

용도:

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:

여기에 이미지 설명 입력

당신은 전화할 수 있습니다.mklink가 제공한.cmdPowerShell에서 심볼릭 링크를 만듭니다.

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

합격해야 합니다/d로.mklink대상이 디렉토리인 경우.

cmd /c mklink /d c:\path\to\symlink c:\target\directory

하드 링크의 경우 Sysinternals Junction과 같은 것을 제안합니다.

"pscx" 모듈 추가

아니요, PowerShell에 내장되어 있지 않습니다.그리고.mklink유틸리티는 "내부 명령"으로 직접 내장되어 있기 때문에 Windows Vista/Windows 7에서는 자체적으로 호출할 수 없습니다.

PowerShell Community Extensions(무료)를 사용할 수 있습니다.다양한 유형의 재분석 지점에는 여러 cmdlet이 있습니다.

  • New-HardLink,
  • New-SymLink,
  • New-Junction,
  • Remove-ReparsePoint
  • 기타 등등.

Windows 7에서 명령어는 다음과 같습니다.

fsutil hardlink create new-file existing-file

PowerShell은 전체 경로(c:\Windows\system32) 또는 확장자(.exe) 없이 이를 찾습니다.

새 심볼 링크:

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"

교차로를 시도해 보세요.exe

SysInternals의 Junction 명령줄 유틸리티를 사용하면 Junction을 쉽게 만들고 삭제할 수 있습니다.

진일보한 내용

  • MS 용어: 소프트!= 심볼릭
    Microsoft는 "soft link"를 "junction"의 다른 이름으로 사용합니다.
    하지만, "상징적 링크"는 완전히 다른 것입니다.
    MSDN: Windows의 하드 링크연결을 참조하십시오.
    (이것은 "소프트 링크""상징 링크"("symbolic link") 같은 의미를 갖는 용어들의 일반적인 사용과는 정반대입니다.)

이 유틸리티를 사용할 수 있습니다.

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

저는 두 개의 답(@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"""
    }
}

MKLINK를 위한 네이티브 래퍼가 있는 PowerShell 모듈을 작성했습니다. https://gist.github.com/2891103

다음에 대한 기능 포함:

  • 새 심볼 링크
  • 새 하드 링크
  • 새 접합부

MKLINK 출력을 캡처하고 필요한 경우 적절한 PowerShell 오류를 발생시킵니다.

사실, Sysinternals는 junction명령은 디렉터리에서만 작동하므로(이유는 묻지 않음) 파일을 하드 링크할 수 없습니다.저는 찬성합니다.cmd /c mklink되지 않는 알 수 없음) 소링경의우에(PowerShell에서 직접 지원되지 않음), 또fsutil하드 링크용.

Windows XP 외에는 아무것도 .junction디렉토리로 제한될 수 있습니다.

저는 이것이 외부의 도움 없이 간단한 방법이라는 것을 알았습니다.네, 오래된 도스 명령을 사용하지만 작동하고 쉽고 명확합니다.

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

이것은 DOS dir 명령을 사용하여 심볼릭 링크 속성을 가진 모든 항목을 찾고, 특정 링크 이름 뒤에 대상 "[] 괄호가 있고, 각 항목(아마도 하나)에 대해서는 대상 문자열만 추출합니다.

언급URL : https://stackoverflow.com/questions/894430/creating-hard-and-soft-links-using-powershell

반응형