Windowsでsudoしたい

Linux使ってる人は、Windowsで管理者に昇格させる時、わざわざファイルの場所開いて逆クリックして「管理者として実行」を選ぶのめんどいと思っているのではないでしょうか？

Linuxみたいにsudoでできないのかなと思った人もいるんではないでしょうか？

**できます**

Pathが通っているディレクトリ(例えば、``C:\Windows\System32``)に以下のバッチファイルを置くだけでsudo suコマンドが実現できます。

```bat:sudo.bat
@echo off
powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process \"%1\" -Verb runas"
@echo on
```

ただ、フルパスを引数に与えても実行できないソフトもありますので注意してください。

今回はWindows 10でやっていますが、Windows 7でも使えることは確認しています。
ただし、PowerShellがないとできません。

お知らせ
コマンドライン引数に与えたアプリケーションにコマンドライン引数を２つ以上与えるとどうもだめみたいです。
改良しているので、今は与えるコマンドラインは１つまでにしてください。

参考記事
[WindowsのPowerShellを管理者権限で起動する方法](http://qiita.com/syui/items/7d42d7e691010ee212fb)

>## 追記１
>PowerShell側の問題なのか私が間違えてるのか分かりませんが、どうもコマンドライン引数を２個以上与えられないみたいです。

>## 追記２
>あんな長いコマンド打たなくてももっと短くできました。
>
>```bat:sudo.bat
>powershell.exe Start-Process "%1" -Verb runas 
>```
>あと、コマンドライン引数の渡し方もありました。でもコマンドライン渡すとなると、バッチファイルでやるとめちゃくちゃめんどいのでexe化しました。
>~~32bit OSの方は[LinuxCommand-x86.7z](http://aimegu.webcrow.jp/download/other/LinuxCommand-x86.7z)~~
>~~64bit OSの方は[LinuxCommand-x64.7z](http://aimegu.webcrow.jp/download/other/LinuxCommand-x64.7z)~~
>sudo.exeの他にバッチファイルでsu.exe、ls.bat、clear.batも同梱されています。Pathが通ってるディレクトリに置いて使ってください。
>あと、記事からsu.batを消しました。シェルを管理者権限で起動する際にsudo suってやりたくて作ってただけで、su単体でやるとただ単にcmd.exeが立ち上がるだけという仕様なので、Linuxコマンド「su」とは挙動が違うので。
>その代わりではないのですが、sudo.exeをsudo suってやった時に管理者権限でコマンドプロンプトが起動する仕様にしておきました。sudo su.exeとやっちゃうと挙動変わっちゃうので気をつけてください。
>コマンドラインは
>
>```shell-session:sudo.exe
>sudo [実行したいアプリケーション] [アプリケーションに与えるコマンドライン]
>```
>
>```shell-session:su.exe
>su [ユーザー名] [cmd.exeに与えるコマンドライン引数]
>```
>lsとclearは書くことないので省略させてください。あと、su.exeが本当のLinuxのsuコマンドと少し仕様が違うのは許してください
>
>## 追記３
>Linuxコマンドパックにpasswd.exeを追加しました。Windowsの仕様上、管理者権限を要求されちゃいますが、ご容赦下さい。
>## 追記４
>sudo.exeにバグがあったので修正しました
>## 追記５
>コマンドライン引数を与える方法が分かりました
>
>```bat:sudo.bat
>powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process \"%1\" -Verb runas -ArgumentList %2,%3,%4,%5,%6"
>```
>ここではコマンドライン５個までしか書いてないんですけど、このように%2,%3,%4,%5,%6,%7,%8,…と列挙していく必要があり、こっちのコマンドラインでやる場合、今のところ良い解決策が浮かんでいません。
>ただ、追記２で書いた方法でしたら、強引ではありますが、こんな手段があります。
>
>```bat:sudo.bat
>powershell.exe Start-Process %1 -Verb runas -ArgumentList \"%2\"
>```
>この方法だと以下のようにコマンドラインを作成すればできることにはできます。
>
>```shell-session:cmd.exe
>sudo [アプリケーション名] "[アプリケーションに渡すコマンドライン]"
>```
>気を付けないといけないのは、アプリケーションに渡すコマンドラインは全てダブルクオーテーションで括って渡さないとエラーになるということくらいです
>## 追記６
>PowerShell Script版ができあがりましたので書いておきます
>
>```powershell:sudo.ps1
>$ExecutionApplication = $Args[0]
>$WorkingPath = Split-Path $ExecutionApplication
>if ($Args.Length -gt 1) {
>	$arglist = $Args[1]
>	if ($Args.Length -gt 2)
>	{
>		for ($i = 2; $i -lt $Args.Length; $i++) 
>		{
>			$arglist = $arglist + "," + $Args[$i]
>		}
>	}
>	Start-Process $ExecutionApplication -Verb runas -WorkingDirectory $WorkingPath -ArgumentList $arglist
>}
>else
>{
>	Start-Process $ExecutionApplication -Verb runas -WorkingDirectory $WorkingPath
>}
>```
>sudo.ps1というファイル名でパス通ってるとこに保存してオレオレコードサイニング証明書でも作ってデジタル署名して使って下さい
> ## 追記７
> 実行ファイルに私のクリエイター活動用商号「明月」のでですがデジタル署名しました 
>
> 32bit OSの方は[LinuxCommand-x86.7z](https://www.meigetsu.jp/downloads/LinuxCommand-x86.7z)
>64bit OSの方は[LinuxCommand-x64.7z](https://www.meigetsu.jp/downloads/LinuxCommand-x64.7z)
>
>追記２でアップロードしてるのと同じものではありますが、追記２の方のリンクでダウンロードできるものはデジタル署名してないので非推奨です。自分で挙動等を確認して自分でデジタル署名したいというのでなければこっちをダウンロードして下さい