わたし

自分の写真
おのれの そうさくで うちゅうを しはいするのが ゆめでした

【bat】勝手に再起動して勝手にログインし、自動ログインする設定を勝手に戻すbatをつくろう

 注意! レジストリエディタを編集します

何か起きた場合自己責任でお願いします。

(一応動作テストは行いましたが保証はし切れません)


実質勝手に再起動して勝手にログインするだけである。


■準備するもの

・ソースコードをコピペするテキストエディタ

 ※メモ帳でOK



■つくりかた

①以下の内容(色付きのところまで)をメモ帳にコピーする

@echo off

rem batのカレントディレクトリに移動
cd /d %~dp0

rem 実行ファイルパス
set FILEPATH=%~0
rem バックアップ レジストリファイルの名前
set BACK_UP_REGFILE1=backupautlogon.reg
rem レジストリキーの名前
set REGKEY_NAME1="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
set REGKEY_NAME2="HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce"
rem ユーザー名
set ACCOUNTUSER_NAME=%username%
rem パスワード
set USER_PASSWORD=
rem ユーザードメイン名(下の行の"rem"を削除)
rem set DOMAINUSER_NAME=%userdomain%


rem パスワード未設定チェック
if "%USER_PASSWORD%"=="" (
    echo "パスワードが設定されていません。処理を中止します。"
    pause
    exit /b
)

rem 管理者権限に昇格
whoami /priv | find "SeDebugPrivilege" > nul
if %errorlevel% neq 0 (
    powershell start-process %FILEPATH% -verb runas
    exit
)

rem ****************************************************************
rem メイン処理
rem ****************************************************************
rem バックアップファイルの有無で条件分岐
if not exist %BACK_UP_REGFILE1% (
    call :RUNTHISFILE
    call :REGKEY_EXPORT
    call :REGKEY_ADD
    echo "10秒後に再起動します"
    shutdown /r /t 10
    exit /b
) else (
    call :REG_BACKUP
)

exit /b


rem ****************************************************************
rem サブルーチン
rem ****************************************************************
:RUNTHISFILE
set /p answer="再起動後に何かするファイルだよ 実行しますか?(y/n): "
if /i not %answer%==y (
    exit
)
exit /b

:REGKEY_EXPORT
rem レジストリキーのエクスポート
reg export %REGKEY_NAME1% %BACK_UP_REGFILE1%
exit /b

:REGKEY_ADD
rem アカウント情報の登録
reg add %REGKEY_NAME1% /v AutoAdminLogon /t REG_SZ /d 1 /f
reg add %REGKEY_NAME1% /v DefaultUsername /t REG_SZ /d %ACCOUNTUSER_NAME% /f

rem 本当はここでパスワード入力&レジストリ登録したいが、確認が困難なため断念
rem set /p USERPASSWORD="パスワードを入力:"
rem reg add %REGKEY_NAME1% /v DefaultPassword /t REG_SZ /d %USERPASSWORD% /f

reg add %REGKEY_NAME1% /v DefaultPassword /t REG_SZ /d %USER_PASSWORD% /f

rem PCがドメイン参加している場合、以下の"rem"を削除
rem reg add %REGKEY_NAME1% /v DefaultDomainName /t REG_SZ /d %DOMAINUSER_NAME% /f


rem 自動起動スクリプトの登録
reg add %REGKEY_NAME2% /v RebootRun /t REG_SZ /d "%FILEPATH%" /f

exit /b

rem ******************再起動後の処理******************************
:REG_BACKUP
rem レジストリを元に戻す
reg delete %REGKEY_NAME1% /v AutoAdminLogon /f
reg delete %REGKEY_NAME1% /v DefaultUsername /f
reg delete %REGKEY_NAME1% /v DefaultPassword /f
reg import %BACK_UP_REGFILE1%
del /q %BACK_UP_REGFILE1%
exit /b



②上のほう(17・18行目)の

rem パスワード
set USER_PASSWORD=

の『USER_PASSWORD=』の後にパスワードを記入

ログイン中のアカウントのパスワードを入力する。


③保存

 ファイル名は拡張子を.batにしてくれればあとは何でも可

 ・拡張子と文字コードに注意

 ファイルの種類:すべてのファイル(*.*)を選択してファイル名の最後に「.bat」をつける ※画像.txtつけてますスイマセン

 エンコード:メモ帳の場合はANSI

  他はSHIFT_JISとかで保存してください。




 

④実行

ファイルをダブルクリック

 実行するか聞かれたらyを入力してEnter

 (yかY以外が入力されたら実行しない)

⑤勝手に再起動


◆おそらく気になるであろうこと◆

Q.  パスワードを記入しなかった場合はどうなりますか?

A.  ファイル実行時にパスワードがねーぞと怒られ、設定がされる前に処理が終わります(何も起こりません)

Q.  パスワードを間違えたら?

A. 再起動後のログインに失敗します

  パスワードを手動で入力し、ログインが成功すると再起動後の処理(見た目上は不明)が行われます。


■何をしたんですか?

レジストリの一部をいじりました

レジストリ:PCの設定内容が保存されている場所

      コマンドラインで変更できるのでスクリプトを作成して複数の設定変更を自動で行わせることができる

      ※ただしOSのバージョンが上がるにつれて複雑化し難しくなる傾向がある


今回いじったのは「ログイン後1度だけファイルを実行するレジストリ」「自動ログインの設定をするレジストリ」です。


■わからない人は飛ばしてもいい説明■

【具体的な処理】

・バックアップレジストリファイルのエクスポート

 現在のレジストリ状態をREGファイル(バックアップ)として作成

  やんわり言うと変更・削除した設定のみ戻すことができる

  (何を?と思った人はレジストリキーで調べてください)

・自動ログインするアカウントの設定

 「自動ログインの設定をするレジストリ」に①自動ログインをオン②ログイン中のアカウント名③パスワードを設定

・自動起動するスクリプトの登録

 「ログイン後1度だけファイルを実行するレジストリ」に自分自身のファイルのパスを登録

・再起動

(再起動後)

※バックアップレジストリファイルがある場合、処理の途中まで飛ばす

・レジストリの設定を元に戻す

 追加した分の削除

・バックアップレジストリファイルの実行

 ※できる人はpause入れてもらうとわかりますがエラーが出ます

 →上で説明した「変更・削除した設定のみ戻す」ため、新たに追加された値(設定)は削除されない(それで「一部の値が変更できませんでした」という内容のエラーが表示されるようです)

 なので、追加(変更)した値を削除してファイルを実行することで、追加した分は消え、変更した分は元に戻ります。

「ログイン後1度だけファイルを実行するレジストリ」の設定内容は自動的に削除されるため、削除作業は不要

・バックアップレジストリファイルを削除


上の内容をいじると、使えそうな内容のものができるかもしれません(PC名変更と再起動を挟んだキッティングスクリプトとか)。ご自由に編集ください。

レジストリについては今後も気が向いたら触れる予定。