treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

PowerShellのTIPS:管理者権限でコマンド実行できるコマンドレット

PowerShellで役に立ちそうなコマンドレットのメモです。
今回はPowerShell版runasといえそうな、Start-Processコマンドレットのオプションをご報告です。

管理者権限でコマンド実行

通常のユーザ権限でコマンドプロンプトを起動しているときに、管理者権限を要するコマンドを実行する際には、いったんrunasコマンドで管理者実行したコマンドプロンプト画面を別に開いてからコマンドを実行します。

runas /user:%管理者アカウント% cmd

例えば、ビルトインのAdministratorなら「runas /user:Administrator cmd」を実行します。
実行後にはコマンドプロンプト画面に
「administrator のパスワードを入力してください:  」
と表示されるので、Administratorのパスワードを入力すると、

このように「管理者:」とあるコマンドプロンプト画面が表示されます。

PowerShell版startコマンド=Start-Process

PowerShellでは「Start-Process」コマンドレットでオプションを付与することで「管理者として実行」を選択してアプリケーションを実行するのと同じ起動方法ができます。

■Start-Process
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.3

Start-ProcessはPowerShellを起動したコンピュータ上で1つ以上のプロセスを開始するときに使うコマンドレットです。
実行可能ファイルやスクリプトをStart-Processで指定することによって、ダブルクリックしたときのように起動することができます。

書式は

Start-Process -FilePath "cmd.exe"

コマンドプロンプト画面(cmd.exe)を開くときの基本の書式は上記のようになります。この部分を、

Start-Process -FilePath "c:\temp\testlog.txt"

のように、フルパスでアプリケーションではないファイルを指定することもできます。
実行ファイル名の箇所はテキストファイル(.txt)やWordファイル(.docx)をフルパス指定すると、startコマンドのごとく、関連付けされたプログラムを自動的に起動して、そのプログラムで指定したファイルを開くことができます。

管理者として実行:Start-Process & -Verb runas

前述のStart-Processページの中ほどに「管理者として PowerShell を起動する」という表記があります。

書式は、

Start-Process %実行ファイル名% -Verb RunAs

とあります。例には「-FilePath」という引数がありますが、おそらくパスが通っているPowerShellとかcmd.exeのような実行ファイルは「-FilePath」がなくても起動してくれます。

早速やってみます。管理者ではないPowerShellウインドウを開いて

Start-Process cmd -Verb runas

と実行すると、UACの確認画面が表示されて、

「管理者:」実行のコマンドプロンプト画面が起動してきました。

PowerShellの画面も同様に、

Start-Process powershell -Verb runas

と実行することで

「管理者:」実行のPowerShellウインドウが起動してきました。(UAC画面は省略できないけど。)

これは上手く使えないものか

UACでどうせ認証が入るので、ユーザ権限(PCのビルトインUsersグループとかドメインのDomain Usersグループの権限)では管理者アカウントのID・パスワードが必要になるのはこれまでのrunasと同様ですが、管理者権限が既にあるユーザアカウントで実行すれば、runasのような別ユーザで実行でなく「管理者:」実行のコマンド扱いになるので、バッチファイルの処理に上手く応用すると使える処理になりそうな感じがしています。

まだ、なんとなくしかイメージできていませんが、その内、これを使ってなにかバッチファイルを一工夫してみようと思います。