277

PowerShell 1.0は、Unixの種類に類似したハードリンクとソフトリンクを作成できますか?

これが組み込まれていない場合、誰かがこれを模倣するps1スクリプトがあるサイトを教えてもらえますか?

これは、優れたシェルであるIMHOに必要な機能です。:)

4

11 に答える 11

346

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

ここに画像の説明を入力してください

于 2016-01-20T16:41:00.897 に答える
283

PowerShellからmklinkによって提供されるを呼び出して、シンボリックリンクを作成できます。cmd

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

ターゲットがディレクトリの場合は、に/d渡す必要があります。mklink

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

ハードリンクについては、SysinternalsJunctionのようなものをお勧めします。

于 2011-04-05T09:07:51.260 に答える
45

「pscx」モジュールを追加します

いいえ、PowerShellには組み込まれていません。また、ユーティリティは「内部コマンド」として直接組み込まれmklinkているため、Windows Vista /Windows7では単独で呼び出すことはできません。cmd.exe

PowerShell Community Extensions(無料)を使用できます。さまざまなタイプのポイントを再解析するためのコマンドレットがいくつかあります。

  • New-HardLink
  • New-SymLink
  • New-Junction
  • Remove-ReparsePoint
  • その他。
于 2009-05-21T19:23:24.643 に答える
24

Windows 7では、コマンドは次のとおりです。

fsutil hardlink create new-file existing-file

PowerShellは、フルパス(c:\ Windows \ system32)または拡張子(.exe)なしでそれを検出します。

于 2012-04-10T13:18:58.883 に答える
15

新規-シンボリックリンク:

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"
于 2013-10-24T14:02:57.337 に答える
10

ジャンクション.exeを試してください

SysInternalsのJunctionコマンドラインユーティリティを使用すると、ジャンクションの作成と削除が簡単になります。

参考文献

于 2009-05-21T20:59:40.737 に答える
5

このユーティリティを使用できます。

c:\Windows\system32\fsutil.exe create hardlink
于 2009-05-21T20:41:09.793 に答える
5

2つの答え(@bviktorと@jocassid)を組み合わせました。Windows10およびWindowsServer2012でテストされました。

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"""
    }
}
于 2017-04-03T19:55:07.483 に答える
3

MKLINKのネイティブラッパーを持つPowerShellモジュールを作成しました。https://gist.github.com/2891103

次の機能が含まれています。

  • 新規-シンボリックリンク
  • 新規-ハードリンク
  • 新しいジャンクション

MKLINK出力をキャプチャし、必要に応じて適切なPowerShellエラーをスローします。

于 2012-06-07T20:31:01.743 に答える
1

実際、Sysinternals junctionコマンドはディレクトリでのみ機能するため(理由は聞かないでください)、ファイルをハードリンクすることはできません。ソフトリンク(PowerShellで直接サポートされていないcmd /c mklink理由がわかりません)またはfsutilハードリンクを使用します。

Windows XPで動作するために必要な場合は、Sysinternals以外は何も知らないjunctionので、ディレクトリに制限される可能性があります。

于 2011-04-29T15:36:18.807 に答える
-2

私はこれが外部の助けなしの簡単な方法だと思いました。はい、それは古風なDOSコマンドを使用しますが、それは機能し、簡単で、明確です。

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

これは、DOS dirコマンドを使用して、シンボリックリンク属性を持つすべてのエントリを検索し、特定のリンク名の後にターゲット "[]"ブラケットを付けてフィルタリングし、それぞれ(おそらく1つ)に対してターゲット文字列のみを抽出します。

于 2013-04-10T15:31:21.203 に答える