倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

PowerShell v5 でシンボリックリンクを作る

Windows 10 でデフォルトの PowerShell v5 から、シンボリックリンクを作れるようになったそうなので試してみました。 自分の PowerShell のバージョンを調べるには

PS> $PSVersionTable

とします。

準備

PowerShell からシンボリックリンクを作成するには管理者権限が必要なので、PowerShell をアイコンから起動するときに右クリックして「管理者として実行」を選びましょう。

シンボリックリンクの作成

PowerShell でシンボリックリンクの作成するには「New-Item」コマンドレットを使います。 このコマンドレット自体は昔からありますが、パラメータとして「-ItemType SymbolicLink」を指定します。 例えば、カレントディレクトリにある「log.txt」というファイルに対するシンボリックリンク「log.symlink」を作りたい場合は以下のようにします:

PS> New-Item -Path . -Name log.symlink -Value log.txt -ItemType SymbolicLink

  • Value パラメータにディレクトリを指定すればディレクトリに対するシンボリックリンクが作られます。

シンボリックリンクの削除

シンボリックリンクを削除するには、通常のファイルと同じように Remove-Item (もしくは del, rmdir)コマンドレットを使います:

PS> Remove-Item log.symlink

ファイルに対するシンボリックリンクを rmdir で削除することもできるようです(まぁ、単なるエイリアスだし)。 ディレクトリに対するシンボリックリンクを同様に削除しようとすると「子がある」とかって言って参照先を削除しようとしてそうでビビる。 なんか他の削除方法があるのかもしれません。

その他のリンクの作成

これは PowerShell v5 でなくても可能だと思いますが、シンボリックリンクの他にジャンクションハードリンクというのも作れます。 これらの違いについては以下の記事を参照:
www.atmarkit.co.jp
ジャンクションやハードリンクを作るには、シンボリックリンクの場合で ItemType を変更するだけです。 また、管理者権限は必要ありません。

ジャンクション
ジャンクションはディレクトリのみ可能。 「log」ディレクトリに対するジャンクション「tolog」を作成するには以下のようにします:

PS> New-Item -Path . -Name tolog -Value log -ItemType Junction

ハードリンク
ハードリンクも作り方は同様。

PS> New-Item -Path . -Name log.lnk -Value log.txt -ItemType hardlink

まぁ、難しくないですね。

PS.

secpol で管理者以外にもシンボリックリンクを作成する権限を与えても、いまいち「管理者として実行」せずにシンボリックリンクがうまく作れない。 他のプログラムから呼び出すのをどうしたらいいのかわからないっす。
はじめようWindows PowerShell

はじめようWindows PowerShell

【改訂新版】 Windows PowerShell ポケットリファレンス

【改訂新版】 Windows PowerShell ポケットリファレンス