1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1ファイルでPowerShellを管理者として実行できるバッチファイル

Posted at

先日、1 ファイルで PowerShell を管理者として実行できるバッチファイルが必要になった。そこで、これまでは単独で利用していた 1、2 のコードを、3 のように組合わせて使用することで作成できた。

  1. PowerShell をダブルクリックで実行できるように、バッチファイルに埋め込んで使用するとき

    • ファイルの1行目に次を記述する
    @powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[System.Management.Automation.ScriptBlock]::create((Get-Content \"%~f0\"|Where-Object{$_.readcount -gt 1}) -join \"`n\");&$s" %*&goto:eof
    
    • 2行目以降に PowerShell を記述する
    • 拡張子 .bat で保存する

  2. ダブルクリックでバッチファイルを管理者として実行できるようにするとき

    • ファイルの先頭に次を記述する
    @echo off
    
    cd /d %~dp0
    
    whoami /priv | find "SeDebugPrivilege" > nul
    if %errorlevel% neq 0 (
        @powershell start-process %~0 -verb runas
        exit
    )
    
    • 次の行以降に、管理者として実行したいコマンドを記述する
    • 拡張子 .bat で保存する

  3. 1つのバッチファイルでPowerShellを管理者として実行できるようにするとき

    • 次のように 2、1 の順に記述する
    • @powershell -NoProfile で始まる行において、$_.readcount -gt 11$_.readcount -gt 11 のように、その行の行番号に変更する
    • その数字より大きい行番号の行に書かれたコードが、PowerShell のコードとして実行される
    @echo off
    
    cd /d %~dp0
    
    whoami /priv | find "SeDebugPrivilege" > nul
    if %errorlevel% neq 0 (
        @powershell start-process %~0 -verb runas
        exit
    )
    
    @powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[System.Management.Automation.ScriptBlock]::create((Get-Content \"%~f0\"|Where-Object{$_.readcount -gt 11}) -join \"`n\");&$s" %*&goto:eof
    
    • 次の行以降に、管理者として実行したい PowerShell を記述する
    • 拡張子 .bat で保存する
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?