web-dev-qa-db-ja.com

標準のUSBペンドライブに保存されているバッチファイル(またはVBスクリプト))を使用してWindows XP / Win-7を自動ログインする

なぜこれが必要なのか

私はペンドライブにバッチスクリプトやその他の診断ツールがいっぱいあります。 75のスタンドアロン(ネットワークに接続されていない)PCがあり、そのほとんどがWin-XP-Pro SP-2を搭載した2つのラボです。何かを構成または診断するために、管理者アカウントで各PCにログインする必要があることがよくあります。

そのため、PCを起動するたびに、ログイン画面からユーザー名を手動で選択し、そのパスワードも入力する必要があります。

今、私は管理者アカウントにログインしたいと思います。ペンドライブがPCに接続されている場合は、自動的に(プログラムによって)。

私が知っていること:

XP/Win7でユーザーがログインする前に、スクリプト(バッチファイル)を実行できることを知っています。バッチファイルを作成してローカルPCに保存しました。システムの起動時に実行するようにグループポリシーで構成しました(GPOの場所:コンピューターの構成\ Windowsの設定\スクリプト(スタートアップ/シャットダウン)\ Sartup))。このバッチファイルは、ペンドライブが接続されているかどうかを正常に検出します。

別のバッチファイル(現在は空白)をペンドライブに保存しています。

最初のバッチファイルは、ループを使用してCからZまでのすべてのドライブで2番目の(login.bat)バッチファイルを検索します。ファイルが存在する場合、ペンドライブが存在すると想定し、2番目の(login.bat)バッチファイルをさらに呼び出して続行します。

わからないこと:

今、私はlogin.batファイルのコードがどうあるべきかわからないか、または実際にログインする方法がわかりません。

他に考えている選択肢は何ですか:

バッチファイルのみを使用する必要はありません。私はまた、「VB Scriptまたは他の3番目の部分の実行可能ファイルを使用するような自動ログインのオプションがある場合」も検討できます。

編集:

この質問によると バッチスクリプトを介してWindowsで自動ログオンするようにユーザーを設定します レジストリエントリを変更して自動ログオンを許可するスクリプトを作成できます。これは機能しますが、変更を適用するにはPCを再起動する必要があります。それは私が避けたいものです。個人的にログインするよりも、スクリプトの実行と再起動に時間がかかります。

オンデマンドで自動的にログオンできるようにしたいと思います。つまり、ペンドライブを接続すると、スクリプトはPCを再起動せずに管理者アカウントでログインできるようになります。

GINA dllファイルを作成することで実現できるとWebで読んでいますが、その分野での経験はありません。これをどのように実装できるかについてのアイデアはありますか?

10
Ajaib Singh

プログラムでWindowsにログインすることは可能ですが、単純なバッチファイルを使用することはできません。代わりに、C++を使用してDLLを構築する必要があります(またはC#ですが 非推奨 )。WindowsではXP(および以前)、この機能は [〜#〜] gina [〜#〜] と呼ばれます。
(Vistaから始めて、資格情報プロバイダーを構築する必要があります。)

参照: プログラムでWindows XPにログイン

2
wp78de

私は誤って自分で解決策を見つけました。質問で述べたように、私は2つのスクリプトを持っています。1つ目はローカルコンピュータにあり、2つ目はペンドライブにあります。 1番目(.bat)は、システムの起動時に実行するように事前構成されており( コンピューターの起動スクリプトを割り当てる方法を参照してください )、ペンドライブが接続されている場合は2番目(.vbs)を呼び出します。

仕組み:

最初のファイルの動作については、すでに質問で説明されています。 2番目のスクリプトの操作は非常に簡単ですが、私のニーズを満たします。このスクリプトは、ログイン用にキーボードで入力するのと同じ順序で、ログイン画面にキーストロークを送信するだけです。ここでは、両方のスクリプトのコード全体を共有したいと思います。これが、GINAなどの内部オペレーティングシステムファイルに干渉したくない私のような多くの人に役立つことを願っています。

コードは次のとおりです。

最初のスクリプト(ログオンスクリプト)

名前: "Find PD.bat"

ロケーション:

"%SYSTEMROOT%\System32\GroupPolicy\Machine\Scripts\Startup\Find PD.bat"

コード

@ECHO OFF
SET vCount=1
set LogFl=%~d0%~p0%Find PD.log
echo Process Started...>"%LogFl%"

:RECHK
SET PD=
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
    IF EXIST "%%i:\OTHER\RESTORE\OTHER\FillCred.vbs" (
        SET PD=%%i
    )
)

:FOUND
echo:>>"%LogFl%"
IF /I DEFINED PD (
    echo %time% : Pen Drive Found with '%PD%' Drive Letter>>"%LogFl%"
    "%PD%:\OTHER\RESTORE\OTHER\FillCred.vbs"
) ELSE (
    IF %vCount% LSS 11 (
        set /a "vCount=vCount+1"
        echo %time% : Retry: %vCount% >>"%LogFl%"
        ping -n 2 -w 200  1.1.1.1>nul
        GOTO RECHK
    ) ELSE (
        echo %time% : Pen Drive Not Found. Exiting>>"%LogFl%"
        EXIT /b 1
    ) 
)
:EOF

2番目のスクリプト:

名前: "FillCred.vbs"

ロケーション:

"<PenDriveRoot>\OTHER\RESTORE\OTHER\FillCred.vbs"

コード:

set WshShell = CreateObject("WScript.Shell")
WScript.sleep 1000
WshShell.SendKeys "{DOWN}"
WScript.sleep 50
WshShell.SendKeys "ReplaceThisWithYourPassword"
WScript.sleep 50
WshShell.SendKeys "{ENTER}"

覚えておいてください:

1)これはWindowsXPでのみテストされています。

2)これは、Windowsにデフォルトのログオン画面(別名「ようこそ画面」​​)が表示されている場合にのみ機能します。

3)modify2番目のスクリプトyourキーシーケンスを実行する必要があります。

4)システムがログイン前にCtrl + Alt + Deleteを押す必要がある場合、これは機能しません。

5)これは非常に基本的な解決策ですが、2番目のスクリプトを編集することで高度にすることができます。これは、システムがログイン画面でキー入力を許可している限り機能します。

ありがとう。

1
Ajaib Singh