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
가 제공한.cmd
PowerShell에서 심볼릭 링크를 만듭니다.
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
'programing' 카테고리의 다른 글
Objective-C에서 문자열에 다른 문자열이 포함되어 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.05.06 |
---|---|
JsonRequestBehavior가 필요한 이유는 무엇입니까? (0) | 2023.05.06 |
몽고 셸의 모든 사용자를 나열하는 방법은 무엇입니까? (0) | 2023.05.06 |
Python: 목록에 항목 추가 N회 (0) | 2023.05.06 |
Git merge는 차이가 있지만 "이미 최신"이라고 보고합니다. (0) | 2023.05.06 |