PowerShellやバッチファイルで,
「管理者として実行」したかどうかを判定する例文は下記の通り.
PowerShell
if (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Output "管理者として実行しました. シンボリック・リンクの作成を試みます. "
CMD /C MKLINK /D "$Env:HOME\.emacs.d" "$Env:USERPROFILE\Dropbox\.emacs.d"
}
else {
Write-Warning "管理者として実行していません. シンボリック・リンクの作成はできません. "
exit 1
}
ifの条件式が長いので, 文末の`(バッククォート)により,
条件式を複数行に分けて書いていることに注意.
参考
バッチファイル
NET SESSION > NUL 2>&1
IF %ERRORLEVEL% == 0 (
ECHO 管理者として実行しました. シンボリック・リンクの作成を試みます.
MKLINK /D %HOME%\.emacs.d %USERPROFILE%\Dropbox\.emacs.d
) ELSE (
ECHO 管理者として実行していません. シンボリック・リンクの作成はできません. >&2
EXIT /B 1
)
NET SESSIONは本来の用途ではなく, 単に管理者特権の有無の判定に使用されている.
よって, NET SESSIONでなくとも, 管理者特権が必要なコマンドであれば良いようだ.
参考