WindowsでCMDまたはプログラムをSYSTEM(LocalSystem)として実行する方法

SYSTEMアカウントをいじらざるを得ない時もあります。頑固なシステムファイルを削除したり、システムの奥深くにある問題をトラブルシューティングしたり、あるいはうまく動作しないサービスに手を加えたりしたい場合もあるでしょう。しかし、Windowsは権限を厳しく制限しているため、通常の管理者権限ではうまくいかないことがよくあります。そこで、PSExecなどのツールやタスクスケジューラでタスクを設定することで、SYSTEMレベルの権限を昇格させることができます。ただし、SYSTEMアカウントをいじるのはリスクを伴うことを覚えておいてください。まるで子供に超能力を与えるようなものです。注意しないと、誤ってシステムを壊してしまう可能性があります。

PSExecを使用してWindowsでCMD/プロセスをSYSTEMとして実行する方法

PSExec を取得し、SYSTEM としてコマンドを実行する

おそらくこれが一番簡単な方法でしょう。PSExecはSysinternalsが提供する非常に便利なツールで、システムプロセスを簡単に起動できます。Windowsカーネルに直接フックすることで、通常はロックされている操作も実行できるため、非常に便利です。ある設定ではダウンロード、解凍、実行と簡単に思えるかもしれませんが、UACやウイルス対策のフラグによってWindowsが最初の試行をブロックしてしまうこともあります。その場合は、psExec.exeファイルのブロックを解除し、コマンドプロンプトを管理者権限で実行してください。正直なところ、私の経験では、すべてがうまくいくまでこの手順を数回繰り返す必要があるかもしれません。

まず、Sysinternalsの公式サイトからPSExecを入手します。「C:\Tools\」や「C:\PSTools\」など、分かりやすい場所に解凍してください。Windowsの挙動が不安定なので、ファイルのブロックを解除する必要があるかもしれません。「」を右クリックしpsexec.exe「プロパティ」を開いて「ブロック解除」をクリックしてください。

次に、管理者権限でコマンドプロンプトを開き、「コマンドプロンプト(管理者)」または「Windowsターミナル(管理者)」Windows Key + Xを選択します。次に、保存した場所に移動します。psexec.exe

cd C:\PSTools\

SYSTEM として実行されるコマンド プロンプトを起動するには、次のように入力します。

psexec -i -s cmd.exe

新しいコマンドプロンプトウィンドウが開き、SYSTEMが表示されます。確認するには、「NT AUTHORITY\SYSTEM」whoamiと入力してください。

この新しいセッションから、ほぼ何でもできます。ロックされたファイルの削除、サービスの停止、通常は操作できないプロセスの強制終了などです。ただし、間違ったコマンドを実行するとシステムが破損したり、起動できなくなったりする可能性があるため、注意してください。そのため、この方法は、自分が何をしているのかを十分理解している場合のみ使用することをお勧めします。

ヒント: の代わりに特定のプログラムを実行したい場合はcmd.exe、 の部分をプログラムのフルパス( )に置き換えてください"C:\Program Files\MyApp\app.exe"。パスにスペースが含まれている場合は、引用符で囲んでください。

PSExecをリモートまたは別のユーザーとして実行する

別のマシンで SYSTEM レベルのアクセスが必要な場合は、リモート マシンの名前を入力できます。

psexec -s \\remote-computer cmd.exe

に遭遇した場合はCouldn’t install PSEXESVC service、コマンドプロンプトが管理者権限で実行されていること、およびWindowsがサービスをブロックしていないことを確認してください(ウイルス対策ソフトやローカルポリシーを確認すると解決する場合があります)。再起動したり、残っているPSEXESVCサービスを終了したりするだけで問題が解決する場合もあります。

正直なところ、 Winhanceなどのサードパーティ製ツールもいくつかありますが、ほとんどの場合、PSExecで十分です。ただし、ウイルス対策ソフトの誤検知には注意してください。PSExecは権限が高いため、誤検知されてしまうことが多いからです。

タスクスケジューラ経由でシステムタスクをトリガーする方法

スクリプトやプログラムをSYSTEMとして実行するためのスケジュールされたタスクを設定する

これは、Windowsの起動時や特定の時間にSYSTEM権限でスクリプトを実行するなど、何かを自動的に実行させたい場合に便利です。Windowsに「これをSYSTEM権限で実行して」と指示するだけで、ログインしたり管理者権限で毎回プロンプトを操作したりすることなく、自動的に実行されます。

  1. タスク スケジューラを開きます。taskschd.msc[実行] ダイアログ ( Windows Key + R) に入力し、Enter キーを押します。
  2. 新しいタスクを作成します。「基本タスクを作成」または「タスクを作成」(その他のオプション)を選択します。完全な制御が必要な場合は、後者を選択してください。
  3. 全般タブで、「スクリプトをSYSTEMとして実行」のような名前を付けます。ユーザーフィールドでユーザーまたはグループの変更をクリックし、SYSTEM(またはNT AUTHORITY\SYSTEM)と入力して[OK]をクリックします。最上位の権限で実行にチェックが入っていることを確認してください。チェックが入っていないと、Windowsによってブロックされる可能性があります。
  4. トリガータブに切り替えて、スクリプトをトリガーするタイミングを選択します。起動時ログオン時、あるいはカスタムスケジュールなどを選択できます。
  5. アクション で、実行する内容を指定します。PowerShell スクリプトの場合は、プログラム/スクリプト を に設定しますpowershell.exe。次に、引数の追加 で以下を入力します。
    • -ExecutionPolicy バイパス -非対話型 -ファイル “C:\PS\MySampleScript.ps1”

    この設定により、トリガーが起動するたびに、PowerShell が SYSTEM 権限でバックグラウンドで気付かれずに実行されるようになります。

  6. 完了したら「OK」をクリックし、タスクを右クリックして「実行」を選択してテストします。スクリプトがSYSTEM権限で実行されるはずです。つまり、ユーザーがログインしておらず、UACプロンプトも表示されません。

このアプローチは、システムメンテナンスの自動化や、起動時にスクリプトを静かに実行する場合に最適です。ただし、何かを一度だけ実行したい場合は、トリガーは不要です。スケジューラから手動でタスクを実行してください。

以前は、XPなどの古いバージョンのWindowsでは、at 10:23 /interactive cmd.exeSYSTEMコマンドプロンプトを開くなどのコマンドを使うことができましたが、現在は使えなくなりました。新しいバージョンのWindows(Windows 11を含む)では、セキュリティ上の理由からこの方法は無効になっているため、タスクスケジューラまたはPSExecを使用してください。

総じて、これらの方法は、Windowsの奥深くまで入り込むための強力な手段であり、頭を悩ませることなく操作できます。ただし、システムレベルの設定をいじると逆効果になる可能性があることを常に覚えておいてください。控えめに、そして慎重に使用してください。