最近 PC の調子が悪く、スリープ後に Wi-Fi が動作しなくなったりします。
色々調べるとどうもデバイスが読み込まれていない場合やエラーとなっているケースがほとんどで、今までは Ctrl + X でデバイス マネージャーを起動して対処していました。
こんな感じに選択したうえでボタンを押す必要があり、なかなか手間がかかっていたのです。
そこで、手数を減らすべく、 PowerShell での実行を考えました。
実行だけであれば、以下のコマンドレットを打つだけでこの機能を利用できるのですが、管理者権限の PowerShell を起動してから打ち込む必要もあり、バッチ化を行えないかとみてみました。
pnputil /scan-devices
Windows 11 では、 PowerShell のバッチ拡張子である ps1 は標準で紐づけされていないため、このコマンドをファイル化するだけでは対応ができません。
そこで、コマンドプロンプトのバッチファイルと連携し、同対応を自動化してみました。
ちょっと面倒なのですが、以下の内容を bat ファイルとして保存し、実行すると自動化ができるようになります。
bat ファイル
@echo off
PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs }"
PAUSE
ps1 ファイル
pnputil /scan-devices
pause
この 2 つのファイルを同じ名前の拡張子違いとして保存します。
こうすることでコマンドプロンプトから UAC で管理者権限での起動を経て PowerShell コマンドレットを実行することができました。
bat ファイルでは PowerShell をプロファイルなしで起動し、さらにプロセスを起動するコマンドレットを用いて管理者権限、プロファイルなし、実行ポリシーのバイパスパラメータを入れて同名の ps1 ファイルを起動する。という内容ですね。
管理権限での起動はこのようにする必要があるので、ちょっと面倒ですね。
あまりいないと思いますが、同じような問題に遭遇した場合はこのようなバッチを作っておくと楽ができるので是非お試しください。
音楽:MADAMA BUTTERFLY