2016年12月26日月曜日

PowerShell を使って「ネットワークドライブ上の」バッチファイルを管理者権限で実行する

「ブログズミ: PowerShell を使ってバッチファイルを管理者権限で実行する」 の補足記事です。
上記との違いは「ネットワークドライブ上の」バッチファイルである点です。
以下がそのバッチ

@echo off
rem 管理者権限があるかどうかチェック
whoami /PRIV | find "SeLoadDriverPrivilege" >NUL
if not errorlevel 1 goto start
rem ない場合は powershell 経由で自分自身を実行
rem %0 のドライブレターで検索して UNC パスを取得
for /f "usebackq tokens=1,2,3" %%i in (`net use`) do if "%%j" == "%~d0" SET UNC=%%k
rem net use で割当をしてから実行(既に割当たっている場合もあるので成否にかかわらずコマンド実行)
powershell.exe -Command Start-Process -FilePath cmd.exe -ArgumentList '/c "net use %~d0 %UNC% || %~dp0%~nx0"' -Wait -Verb Runas
goto :EOF
:start
cd /d %~dp0
rem ここからバッチ本来の処理
view raw runas-self.bat hosted with ❤ by GitHub


前回と異なる点は、 PowerShell で自分自身を起動する前に net use でトライブ割当をしている点です。
管理者権限のユーザーに移動すると、割当ていたネットワークドライブが見えない場合があるので、このような対応をしています。

参考

0 件のコメント:

コメントを投稿