« 困るなら | トップページ | 徹底的に »

2017年9月15日 (金)

Windows Updateを勝手に走らせないための工夫

ちょっと気温は低めで、ボチボチ長袖でもいいかも、という気候。

実際、長袖の人を結構見かけた。

薄曇りの天気だった。

午後、またうっすらと暈が見えた。

連続で見られるって嬉しいねぇ。

更に、今日は幻日も見られた!

右側に幻日。

ちょっと大きくして。

最初見た時は、左側にもあった。

でも、すぐには撮影できず、少し時間が経つと、右だけになっていた。

残念だったけれど、見られただけよかった!

Windows Update 昨日の続き。

Windows Updateを勝手に走らせないための工夫!

Windows Updateのサービスを、あの画面でいちいち有効・無効にするのも面倒くさい。

もうちょっと楽に出来ないかな?と思った。

僕は、普段、アプリを起動する時、コマンドライン型のランチャーを使っている。

使わせてもらっているのは、Launchy

これのお陰で、いちいち、スタート画面からアプリを選択しなくてすむ。

上記では、firefoxまで入れているけれど、学習してくれるので、fだけ入れれば、Firefoxを起動させられることも可能。

こういうのを使っているから、バッチファイルを使って起動させることも可能。

色々とやり方があるし、そのバッチファイルも作り方によって、動かし方も変わる。

ここでは、色んなパターンで、Windows Updateの有効・無効の仕方を書いてみようと思う。

まず、基本中の基本。

コマンドラインでもWindows Updateは有効・無効にできる。

管理者権限で、コマンドプロンプトを起動し、次を入力。

[Windows Updateを有効]

  • sc config wuauserv start= delayed-auto

    sc start wuauserv

[Windows Updateを無効]

  • sc stop wuauserv

    sc config wuauserv start= disabled

これで、いちいちサービス画面を立ち上げないですむ。

もちろん、他のサービスもこういう感じで、有効・無効が出来る。

ただ、これだと、いちいち打ち込むのも面倒だし、コピペするにしても、どこかに記録しておかないといけない。これもまた面倒。

よって、上記のコマンドを打つバッチファイルをそれぞれ作る。

そうすれば、1行で済ますことが出来る。

これでも、まだちょっと問題が。

コマンドプロンプトを管理者権限で起動しないといけないので、これもちょっと手間。

よって、それぞれのバッチファイルに対して、ショートカットを作成する。

そのショートカットを、管理者権限で実行するようにすればよい。

例えば、デスクトップ画面に、Windows Updateを有効にするバッチファイル、無効にするバッチファイル、それぞれのショートカット(管理者権限で実行する設定済み)、計4つのファイルを作っておく。

そうすれば、有効にする時は、そのショートカットを、無効にする時には、そのショートカットをダブルクリックするだけ。

僕のように、Launchyを使っていれば、デスクトップ画面でダブルクリックする必要性はなく、それらファイルを置いているフォルダを読み込むようにしておけば、こんな感じで有効・無効を切り替えられる。

これだけでも、ちょーーーーー楽になるのである!

以上が、ベーシックなやり方、かつ、初心者向け。

ここからは、ちょっと高度、というか、もう少し凝ったやり方で、かつ、プログラミングが好きな人向けのやり方。(笑)

分類するとこうなる。

・難易度低:バッチファイル2個+ショーットカット2個(管理者権限実行)
これは、上記のこと。

ここからは、次の3つについて説明。

・難易度中:バッチファイル2個(引数なし、中で管理者権限実行)

・難易度中:バッチファイル1個(中で管理者権限実行+引数)+ショーットカット2個

・難易度高:バッチファイル1個+Launchy(コマンドライン型ランチャー)

正直、ショートカットを作って、それに管理者権限を持たせて実行するっていうのも、なんか「スマート」じゃない。

バッチファイルを直に管理者権限で実行できないか?と思って調べてみたけれど、残念ながら、直接バッチファイルを管理者権限で実行することは出来なさそう。

その代わり、Powershellを使って、バッチファイルの中で、管理者権限でコマンドを走らせる、というのが出来るというのを知った。

やり方は2つ。

  • cd /d %~dp0

    for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i

    if NOT "%LEVEL%"=="High" (

    @powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process %~f0 -Verb runas"

    goto :EOF

    )

と、

  • whoami /PRIV | find "SeLoadDriverPrivilege" >NUL

    echo %errorlevel%

    if not errorlevel 1 goto start

    powershell.exe -Command Start-Process "%~0" -Verb Runas

    goto :EOF

書いている内容は違うけれど、基本動作は同じ。

最初に、管理者権限で起動しているかをチェックし、起動していなければ、管理者権限に変更し、再度、自身を実行する。
既に管理者権限があるなら、そこへ飛ぶ。

それぞれ書き方は違うけれど、簡単に書くとこういう感じの再帰的プログラムのようだ。

細かいことはこれ以上ここでは書きません。ネット上に解説があるし。(苦笑)

Windows Updateの有効・無効のコマンドを合わせたものは後述するので、とりあえず、上記は管理者権限でコマンドを実行させられるんだ、と思ってくれればいいでしょう。

上記のどちらかと、次のWindows Updateを有効・無効にするプログラムを組み合わせれば、完成。

  • :start

    if 1 EQU %1 goto winupdatestart

    if 2 EQU %1 goto winupdatestop

    :winupdatestart

    sc config wuauserv start= delayed-auto

    sc start wuauserv

    goto :EOF

    :winupdatestop

    echo %1

    sc stop wuauserv

    sc config wuauserv start= disabled

    goto :EOF

  • :start

    IF 1 EQU %1 (

    sc config wuauserv start= delayed-auto

    sc start wuauserv

    ) ELSE IF 2 EQU %1 (

    sc stop wuauserv

    sc config wuauserv start= disabled

    )

どちらでも同じ。

goto文が好きなら、前者。
それが嫌いで、IF文でいいなら、後者。

引数をもらって、それで判断している。

どちらも、「1」が引数だったら、Windows Updateを有効、
「2」が引数だったら、Windows Updateを無効にする。

「1」や「2」が嫌だったら、別のものに変更して下さい。

管理者権限で実行させるプログラムは、ネットの情報では、引数の情報はなかった。

あれこれやっていて、やっと見つけた!という感じだった。(笑)

  • cd /d %~dp0

    for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i

    if NOT "%LEVEL%"=="High" (

    @powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process %~f0  "%~1" -Verb runas"

    goto :EOF

    )

-----

  • whoami /PRIV | find "SeLoadDriverPrivilege" >NUL

    echo %errorlevel%

    if not errorlevel 1 goto start

    powershell.exe -Command Start-Process "%~0"  "%~1" -Verb Runas

    goto :EOF

前者も後者も「 "%~1"」がそれ。

引数を受け取るには、こういう書き方をしないといけないらしい。

これで、ベーシックな情報が揃った。

では、難易度ごとに。

-------------------------------

難易度中:バッチファイル2個(引数なし、中で管理者権限実行)

「winupdate_start.bat」というファイルを作る。

  • @echo off

    cd /d %~dp0

    for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i

    if NOT "%LEVEL%"=="High" (

    @powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process %~f0 -Verb runas"

    goto :EOF

    )

    sc config wuauserv start= delayed-auto

    sc start wuauserv

「winupdate_stop.bat」というファイルを作る。

  • @echo off

    cd /d %~dp0

    for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i

    if NOT "%LEVEL%"=="High" (

    @powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process %~f0 -Verb runas"

    goto :EOF

    )

    sc stop wuauserv

    sc config wuauserv start= disabled

これらは、引数を用いず、バッチファイルを分けて、有効・無効を切り替える処理。

だから、「 "%~1"」は、削除している。

こうやって、引数も使わずに、ファイルを分けた方がある意味、わかりやすいと思う。

-------------------------------

難易度中:バッチファイル1個(中で管理者権限実行+引数)+ショーットカット2個

これは、バッチファイルを1つにし、引数で有効・無効を切り替える。
その代わり、引数を渡すために、ショートカットを2個作る。

もう一つ別の管理者権限のプログラムを使用してみよう。
もちろん、前者の方でもいい。

ファイル名を「winupdate_switch.bat」にしてみましょうか。何でもいいですよ。(笑)

  • @echo off

    whoami /PRIV | find "SeLoadDriverPrivilege" >NUL

    echo %errorlevel%

    if not errorlevel 1 goto start

    powershell.exe -Command Start-Process "%~0" "%~1" -Verb Runas

    goto :EOF

    :start

    IF 1 EQU %1 (

    sc config wuauserv start= delayed-auto

    sc start wuauserv

    ) ELSE IF 2 EQU %1 (

    sc stop wuauserv

    sc config wuauserv start= disabled

    )

IF文で有効・無効を処理するものにした。

ショートカットの名前は、好きなものにして下さい。
「winupdate_start.lnk」とか「winupdate_stop.lnk」とか。

ショートカットを作成する時、有効のショートカットの中では、「パス\winupdate_switch.bat 1」、
無効のショートカットの中では、「パス\winupdate_switch.bat 2」という具合に、引数を書いてあげる。

これで、それぞれのショートカットをダブルクリックすれば、それぞれが動作する。

-------------------------------

最後。

難易度高:バッチファイル1個+Launchy(コマンドライン形式のランチャー)

正直、難易度高っていう訳ではない。

ただ、Launchyを使うかどうかだけ。(笑)

Launchyのいいところは、こうやって引数も渡せるところ。

コマンドを書いた後に、Tabキーを押せば、また書き込めるので、そこに引数を打つ。

上記であれば、有効になるし、「2」を渡せば、無効になる。

Launchyって、もう開発が止まっていて、これ以上進化はない。

その代わり、ここから派生したランチャーがいくつか出ている。

それらを試したことがあるけれど、なんだかんだとLaunchyに戻ってしまうのである。(笑)

理由は、Launchyが一番メモリ消費量が少なく、使い勝手は良いし、標準で、Windowsのコントロールパネルの中にあるものも起動させられるから。

これが案外重宝するのである。

Device Managerとか、Printerに関するものとか、ほとんどのものを起動させられる。

Launchyに限らず、引数を渡せるランチャーを使えば、バッチファイルは一つで済むし、ショートカットも不要。

ファイル名を上記のように、「winupdate.bat」にしてみましょうか。もちろん、何でもいいですよ。(笑)

  • @echo off

    cd /d %~dp0

    for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i

    if NOT "%LEVEL%"=="High" (

    @powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process %~f0 "%~1" -Verb runas"

    goto :EOF

    )

    IF 1 EQU %1 (

    sc config wuauserv start= delayed-auto

    sc start wuauserv

    ) ELSE IF 2 EQU %1 (

    sc stop wuauserv

    sc config wuauserv start= disabled

    )

以上。

と、色々と試行錯誤した結果、こういう感じで、ファイル1つで、Windows Updateを有効・無効にするようにしたのである。

バッチファイルの中で、管理者権限で実行できる、というのはとてもいいね。

応用すれば、色んなサービスをこうやって、有効・無効に出来る。

好みで好きなものを選んで、Windows Updateの有効・無効を切り替えてくださいね。

Windows Updateは、自分でコントロールする!

そして、Windows Updateが「勝手に走るので困る!」なんていうことはなくしましょう!(笑)

|

« 困るなら | トップページ | 徹底的に »

パソコン・インターネット」カテゴリの記事

日本写真珍現象」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 困るなら | トップページ | 徹底的に »