スクリプト記述例

    スクリプト記述例


    記事の要約

    スクリプトの記述例と、スクリプト中の処理の流れ、処理のポイントについて説明します。
    説明の都合上、スクリプトの説明単位ごとにセルを分けています。

    TeraTerm SSH接続 + suコマンド昇格用スクリプト

    オートログインスクリプト解説

    #===============================================

    # TeraTerm(SSH)用のオートログインスクリプト(su昇格処理あり)

    # (c) 20xx NTT TechnoCross Corporation

    #

    # 前提条件

    # TeraTermのパスが下記レジストリのいずれかに設定されていること

    # ・HKEY_LOCAL_MACHINE\SOFTWARE\iDoperation\Client\TeraTermPath

    # ・HKEY_CURRENT_USER\SOFTWARE\iDoperation\Client\TeraTermPath

    #===============================================


    #-----------------------------------------------------------------------------

    # マクロ/vbsを復号する

    #-----------------------------------------------------------------------------


    decrypt TT.sso utf-16

    マクロを復号化する

    if not errorlevel 0 goto decrypt_failure_00

    復号に失敗した場合、ラベルdecrypt_failure_00に遷移する

    decrypt TTRun.vbs utf-16

    vbsを復号化する

    if not errorlevel 0 goto decrypt_failure_01

    復号に失敗した場合、ラベルdecrypt_failure_01に遷移する

    #-----------------------------------------------------------------------------

    # 秘密鍵ファイルをダウンロードする

    #-----------------------------------------------------------------------------


    download {ACCOUNT} 0

    ログイン対象のアカウント名をキーとして秘密鍵ファイルをダウンロードする

    if errorlevel 0 goto key_auth

    秘密鍵ファイルのダウンロードに成功した場合、ラベルkey_authに遷移する

    #-----------------------------------------------------------------------------

    # TeraTermを起動する(ID/PWD認証)

    #-----------------------------------------------------------------------------


    :pwd_auth

    「:」からはじまる行はラベルであり、「:」以降の文字列はラベル名を指す

    # アプリケーション起動

    waitexec wscript.exe //B "{USERTEMP}TTRun.vbs" "{USERTEMP}TT.sso" "{USERTEMP}" "{TTERM}" 60 1500 4 {IPADDR} {DBPORT} {ACCOUNT} {PASSWORD} {ROOTAC} {ROOTPWD} NULL

    TeraTerm用ラッパーを起動。(ラッパーからTeraTermを起動する)

    if execreturn 0 goto sso_continue_02

    TeraTermの起動に成功した場合、ラベルsso_continue_02に遷移する

    if not execreturn 1 goto exec_failure_02

    TeraTermの起動に失敗した場合、ラベルexec_failure_02に遷移する

    #-----------------------------------------------------------------------------

    # TeraTermを起動する(鍵認証)

    #-----------------------------------------------------------------------------


    :key_auth


    # アプリケーション起動


    waitexec wscript.exe //B "{USERTEMP}TTRun.vbs" "{USERTEMP}TT.sso" "{USERTEMP}" "{TTERM}" 60 1500 4 {IPADDR} {DBPORT} {ACCOUNT} {PASSWORD} {ROOTAC} {ROOTPWD} NULL

    TeraTerm用ラッパーを起動。(ラッパーからTeraTermを起動する)

    if execreturn 0 goto sso_continue_01

    TeraTermの起動に成功した場合、ラベルsso_continue_01に遷移する

    if not execreturn 1 goto exec_failure_01

    TeraTermの起動に失敗した場合、ラベルexec_failure_01に遷移する

    #-----------------------------------------------------------------------------

    # オートログイン処理の終了

    #-----------------------------------------------------------------------------


    :sso_continue_01

    # 鍵ファイル削除

    delete {ACCOUNT}


    鍵ファイルを削除する


    :sso_continue_02

    # マクロ削除

    delete TT.sso


    マクロを削除する

    # vbs削除

    delete TTRun.vbs

    vbsを削除する

    # 終了

    end

    オートログイン処理を終了する


    #--------------------------------------------------------------------------------

    # エラーポップアップ処理

    #--------------------------------------------------------------------------------

    以降は、エラー発生時にgoto で遷移した各ラベルの処理



    以降の各ラベルの処理は、エラーにあわせたメッセージダイアログの表示と、スクリプトの終了処理をする

    # TeraTerm起動失敗エラー処理(exec)

    :exec_failure_01

    # 鍵ファイル削除

    delete {ACCOUNT}

     

    :exec_failure_02

    # マクロ削除

    delete TT.sso

     

    # vbs削除

    delete TTRun.vbs

     

    if execreturn 2102 messagebox "マクロの雛形を読み込めませんでした。" "Err-2102 オートログインエラー"

    if execreturn 2102 end 2102

     

    if execreturn 2301 messagebox "マクロを出力できませんでした。" "Err-2301 オートログインエラー"

    if execreturn 2301 end 2301

     

    if execreturn 3001 messagebox "処理結果ファイルを初期化できませんでした。" "Err-3001 オートログインエラー"

    if execreturn 3001 end 3001

     

    if execreturn 4201 messagebox "パスワードを暗号化できませんでした。" "Err-4201 オートログインエラー"

    if execreturn 4201 end 4201

     

    if execreturn 5101 messagebox "TERATERM.INIを読み込めませんでした。" "Err-5101 オートログインエラー"

    if execreturn 5101 end 5101

     

    if execreturn 5301 messagebox "UTF-8のTERATERM.INIを出力できませんでした。" "Err-5301 オートログインエラー"

    if execreturn 5301 end 5301

     

    if execreturn 5302 messagebox "EUCのTERATERM.INIを出力できませんでした。" "Err-5302 オートログインエラー"

    if execreturn 5302 end 5302

     

    if execreturn 5303 messagebox "SJISのTERATERM.INIを出力できませんでした。" "Err-5303 オートログインエラー"

    if execreturn 5303 end 5303

     

    if execreturn 6002 messagebox "ターゲットに接続できませんでした。" "Err-6002 オートログインエラー"

    if execreturn 6002 end 6002

     

    if execreturn 6003 messagebox "ログインプロンプトを捕捉できませんでした。" "Err-6003 オートログインエラー"

    if execreturn 6003 end 6003

     

    if execreturn 6004 messagebox "パスワードプロンプトを捕捉できませんでした。" "Err-6004 オートログインエラー"

    if execreturn 6004 end 6004

     

    if execreturn 6005 messagebox "ユーザ認証が失敗しました。" "Err-6005 オートログインエラー"

    if execreturn 6005 end 6005

     

    if execreturn 6006 messagebox "パスワードプロンプトを捕捉できませんでした。" "Err-6006 オートログインエラー"

    if execreturn 6006 end 6006

     

    if execreturn 6007 messagebox "コマンドプロンプトを捕捉できませんでした。" "Err-6007 オートログインエラー"

    if execreturn 6007 end 6007

     

    if execreturn 6008 messagebox "suが失敗しました。" "Err-6008 オートログインエラー"

    if execreturn 6008 end 6008

     

    if execreturn 7001 messagebox "マクロの処理待ち合わせがタイムアウトしました。" "Err-7001 オートログインエラー"

    if execreturn 7001 end 7001

     

    if execreturn 7002 messagebox "処理結果ファイルを読み込めませんでした。" "Err-7002 オートログインエラー"

    if execreturn 7002 end 7002

     

    messagebox "予期せぬエラーが発生しました。" "Err-9999 シングルサイオンエラー"

    end 9999

     

    # マクロ復号エラー処理(decrypt)

    :decrypt_failure_00

    delete TT.sso

    delete TTRun.vbs

    messagebox "TeraTermマクロの復号に失敗しました。" "Err-200 オートログインエラー"

    end 200

     

    # vbs復号エラー処理(decrypt)

    :decrypt_failure_01

    delete TT.sso

    delete TTRun.vbs

    messagebox "vbsの復号に失敗しました。" "Err-201 オートログインエラー"

    end 201


    リモートデスクトップ接続・ドメイン認証用

    オートログインスクリプト解説

    #======================================================

    # リモートデスクトップ接続でサーバへリモートセッションでドメインログオンするスクリプト

    # (c) 20xx NTT TechnoCross Corporation

    #

    # 前提条件

    # wscript.exeのパスが環境変数PATHに設定されていること

    #======================================================


    # マウスロック開始

    mouselock on

    keyboardlock on

    スクリプト実行中のマウス操作とキーボード操作を禁止する

    #-----------------------------------------------------------------------------

    # vbsファイルを復号する

    #-----------------------------------------------------------------------------


    decrypt RDPRun.vbs utf-16

    vbsファイルを復号化する

     

    if not errorlevel 0 goto decrypt_failure_00

    復号化に失敗した場合、ラベルdecrypt_failure_00に遷移する

    #-----------------------------------------------------------------------------

    # リモートデスクトップ接続を起動する。

    #-----------------------------------------------------------------------------


    # アプリケーション起動

    cd "{INSTALL}"

    waitexec wscript.exe //B "{USERTEMP}RDPRun.vbs" ".\bin\tool\idoperation.rdp" "{IPADDR}" "{DOMAINNAME}" "{DOMAINAC}" "{DOMAINPWD}" "{INSTALL}"

    リモートデスクトップ接続ラッパーを起動。(ラッパーからリモートデスクトップ接続を起動する)

    if not execreturn 0 goto exec_failure_00

    リモートデスクトップの起動に失敗した場合、ラベルexec_failure_00に遷移する。

    # リモートデスクトップ接続の起動に 1.5秒(1500ミリ秒)待つ #環境によって調整要

    wait 1500

    起動に1.5秒(1500ミリ秒)待つ

    # 入力モードを「半角モード」にする

    imeoff

    IMEを半角入力モードにする

    #-----------------------------------------------------------------------------

    # リモート接続の警告ダイアログが表示された場合の処理

    # (接続するサーバが、端末から初めて接続する場合などに表示される)

    #-----------------------------------------------------------------------------

    「リモートデスクトップ」ダイアログに対する処理


    # リモート接続の警告ダイアログが表示されたか、確認する

    strcmp "リモート デスクトップ接続" 13488 "このコンピューターへの接続について今後確認しない(&O)"

    「リモートデスクトップ接続」ダイアログ中のオートメーションID 13488 の文字列を比較する

    if not errorlevel 0 goto sso_continue1

    比較結果が合致していない場合、ラベルsso_continue1に処理を遷移する

    # "リモート デスクトップ接続"ダイアログにフォーカスを設定する

    focus "リモート デスクトップ接続"

    「リモートデスクトップ接続」ダイアログにフォーカスを設定する

    if not errorlevel 0 goto focus_failure_00

    フォーカスが設定出来ない場合、ラベルfocus_failure_00へ遷移する

    # 次回以降、このダイアログが表示されないように、チェックボックスにチェックを入れる

    # checkbox"このコンピューターへの接続について今後確認しない(O)" に対し ALT+O キーを押す


    wait 500

     

    sendkeys %O

    0.5秒(500ミリ秒)待つ

     

    ALT+O キーを押す

    # button"接続(N)" に対し ALT+N キーを押す

    wait 500

     

    sendkeys %N

     

    wait 500


    0.5秒(500ミリ秒)待つ

     

    ALT+N キーを押す

     

    0.5秒(500ミリ秒)待つ

    #---------------------------------------

    # オートログイン処理継続

    #---------------------------------------

    :sso_continue1

    「:」からはじまる行はラベルであり、「:」以降の文字列はラベル名を指す

    #-----------------------------------------------------------------------------

    # 【英語OS対応】

    # リモート接続の警告ダイアログが表示された場合の処理

    # (接続するサーバが、端末から初めて接続する場合などに表示される)

    #-----------------------------------------------------------------------------

    英語OSの「リモートデスクトップ」ダイアログに対する処理

    # リモート接続の警告ダイアログが表示されたか、確認する

    strcmp "Remote Desktop Connection" 13488 "D&on't ask me again for connections to this computer"

    if not errorlevel 0 goto sso_continue2


    # "リモート デスクトップ接続"ダイアログにフォーカスを設定する

    focus "Remote Desktop Connection"

    if not errorlevel 0 goto focus_failure_00


    # 次回以降、このダイアログが表示されないように、チェックボックスにチェックを入れる

    # checkbox "D&on't ask me again for connections to this computer" に対し ALT+O キーを押す

    wait 500

    sendkeys %O


    # 「Connect]ボタン(ControlID=1)に対して、マウスクリックイベントを送る

    # button "Connect(N)" に対し ALT+N キーを押す

    wait 500

    sendkeys %N

    wait 500


    #---------------------------------------

    # オートログイン処理継続

    #---------------------------------------

    :sso_continue2


    #-----------------------------------------------------------------------------

    # グループポリシーによりパスワード入力を求められる場合の処理

    #-----------------------------------------------------------------------------

    グループポリシーに対する処理

    # Windows セキュリティダイアログにパスワード入力欄が存在するか確認

    strcmp "Windows セキュリティ" "PasswordField_2" "パスワード"

    Windows セキュリティダイアログにパスワード入力欄が存在するか確認

    if not errorlevel 0 goto sso_continue3

    存在しない場合、ラベルsso_continue3に処理を遷移する

    # "Windows セキュリティ"ダイアログにフォーカスを設定する

    focus "Windows セキュリティ"

    「Windows セキュリティ」ダイアログにフォーカスを設定する

    if not errorlevel 0 goto focus_failure_00

    フォーカスが設定出来ない場合、ラベルfocus_failure_00へ遷移する

    # パスワード入力

    wait 500

     

    sendkeys {DOMAINPWD} true

    0.5秒(500ミリ秒)待つ

     

    パスワードを入力する

    # button"OK" に対し ALT+O キーを押す

    wait 500

     

    sendkeys %o

     

    wait 500


    0.5秒(500ミリ秒)待つ

     

    ALT+o キーを押す


    0.5秒(500ミリ秒)待つ

    #---------------------------------------

    # オートログイン処理継続

    #---------------------------------------

    :sso_continue3


    #-----------------------------------------------------------------------------

    # 【英語OS対応】

    # グループポリシーによりパスワード入力を求められる場合の処理

    #-----------------------------------------------------------------------------

    英語OSのグループポリシーに対する処理


    # Windows セキュリティダイアログにパスワード入力欄が存在するか確認

    strcmp "Windows Security" "PasswordField_2" "Password"

     

    if not errorlevel 0 goto sso_continue4

     

    # "Windows セキュリティ"ダイアログにフォーカスを設定する

    focus "Windows Security"

    if not errorlevel 0 goto focus_failure_00

     

    # パスワード入力

    wait 500

    sendkeys {DOMAINPWD} true

     

    # button"OK" に対し ALT+O キーを押す

    wait 500

    sendkeys %o

    wait 500



    #---------------------------------------

    # オートログイン処理継続

    #---------------------------------------

    :sso_continue4


    #-----------------------------------------------------------------------------

    # オートログイン処理の終了

    #-----------------------------------------------------------------------------


    # 入力モードを元に戻し、マウスロック解除

    imerestore

    mouselock off

    keyboardlock off


    IMEの状態を元に戻す

    マウスロックを解除する

    キーボードロックを解除する

    # vbsファイルの削除

    delete RDPRun.vbs

    vbsファイルを削除する

    # 終了

    end

    スクリプトを終了する

    #-----------------------------------------------------------------------------

    # エラーポップアップ処理

    #-----------------------------------------------------------------------------


    以降は、エラー発生時にgoto で遷移した各ラベルの処理

     

    以降の各ラベルの処理は、エラーにあわせたメッセージダイアログの表示と、スクリプトの終了処理をする

    # リモートデスクトップ接続起動失敗エラー処理(exec)

    :exec_failure_00

    imerestore

    mouselock off

    keyboardlock off

    delete RDPRun.vbs

    messagebox "リモートデスクトップ接続の起動に失敗しました。" "Err-100 オートログインエラー"

    end 100

     

     

    # vbs復号エラー処理(decrypt)

    :decrypt_failure_00

    imerestore

    mouselock off

    keyboardlock off

    messagebox "vbsファイルの復号に失敗しました。" "Err-200 オートログインエラー"

    end 200

     

     

    # リモート接続の警告ダイアログフォーカス設定失敗エラー処理(focus)

    :focus_failure_00

    imerestore

    mouselock off

    keyboardlock off

    delete RDPRun.vbs

    messagebox "リモートデスクトップ接続の警告ダイアログにフォーカスを設定することが出来ませんでした。" "Err-300 オートログインエラー"

    end 300