Windowsでは mklink
でシンボリックリンクを作成するのに権限を求められる。
長年謎だった、権限のない外部コマンド内からシンボリックリンクを作成する方法が分かったので共有。
(権限を得るために一回閉じて「管理者として実行する」で立ち上げ直さなければいけないと思っていたがそうする必要がなくなった。)
powershell -command start-process cmd.exe '/c mklink "<TO>" "<FROM>"' -verb runas
上記の<TO>
がリンク作成先、<FROM>
がリンク元ファイル(適度読み替えてください)。
*nix 系の ln
や mv
と引数の位置が逆だから気を付けて。
引数を最後に持ってきたい場合は -argumentlist
を使う
powershell -command start-process cmd.exe -verb runas -argumentlist '/c mklink "<TO>" "<FROM>"'
- 「このアプリがデバイスに変更を加えることを許可しますか」というユーザアカウント制御が現れるので対話用。
- 細かい理屈は分からないが powershell が UAC の権限を昇格しているらしい(
-verb runas
のところがstart-process
の権限を昇格)。 -
runas /user:administrator mklink
とやる手法は Windows Vista 以降はadministratorが無効化されているしやるのに設定を変更しなければいけないらしくてお手軽(実用的)とは言い難い。
参考: