葛飾でひっそり暮らすIT屋の G Suite メモ

Google Apps で快適業務ライフなノウハウを伝えます

バッチファイルを管理者としてバッチファイルのディレクトリで実行する

PowerShell

Windows Server の設定を自動化するためにバッチファイルを使うことがよくあります。

その際、Administrator ではないユーザーで作業をすることもよくありますね。むしろ、そちらの方が多いでしょうか。 そんな状況で出くわすのが、管理者モードでバッチファイルを実行すると、作業ディレクトリがシステム フォルダになること。

なんとも初歩的なことですが、最近この問題に出くわし、解決したのでその方法を、忘れないうちに書いておこうと思います。

と言ってもやり方は簡単です。

バッチファイルの最初に下記のコマンドを記述するのです。

"cd %~dp0"

これで、作業ディレクトリがバッチファイルを格納しているフォルダになります。

'%~dp0' の 'd' がドライブ、 'p' がドライブを除いたパスを意味します。ちなみに 'n' も使えるのですが、これはファイル名を表します。試しに下記のテキストをコピーして、拡張子を ".bat" として保存し、"管理者で実行" をしてみてください。

### ここから ###
cd %~dp0
dir
pause
### ここまで ###

コマンドプロンプトの画面で作業ディレクトリが変更されたうえでコマンドが実行されていることを確認できると思います。

最近はコマンド プロンプトで作業を行うことがずいぶんと減りました。ただ、PowerShellスクリプト ファイルを実行するときにコマンド プロンプトのバッチ ファイルを使います。

PowerShell はデフォルトでスクリプトの実行が許可されていません。ですから、バッチファイルに、一時的に許可をしつつスクリプトを実行するコマンドを書いています。しかも、システム情報にアクセスする場合、管理者モードでないとエラーになるんですね。

まだまだコマンドプロンプトを手放すことはできなさそうです…