2 つの VB スクリプトを 1 つのスクリプトに結合する方法

2 つの VB スクリプトを 1 つのスクリプトに結合する方法

2 つの VB スクリプトがあり、それらを 1 つのスクリプトに結合したいと考えています。

最初のスクリプトは、バッチ ファイルを非表示 (非表示ウィンドウ) で実行します。2 番目のスクリプトは、別のユーザーとしてバッチ ファイルを実行します。必要なのは、バッチ ファイルを別のユーザーとして、同時に非表示で実行する 1 つの VB スクリプトです。

1)

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.bat" & Chr(34), 0
Set WinScriptHost = Nothing

2)

Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
oShell.Run "RunAs /noprofile /user:domain\domainuser ""C:\Folder\BatchFileName.bat"""
WScript.Sleep 100
oShell.Sendkeys "yourpassword~"
Wscript.Quit

ご協力いただければ幸いです

答え1

エンドユーザーに見られずに別のユーザーとしてこのスクリプトを実行しようとしている場合、これらのスクリプトを組み合わせる方法はありません。

oShell.Run "RunAs /noprofile /user:domain\domainuser ""C:\Folder\BatchFileName.bat"""
WScript.Sleep 100
oShell.Sendkeys "yourpassword~"

SendKeys は、コンソールがアクティブ ウィンドウであることに依存しています。これにより、エンド ユーザーがコンソールを利用できるようになり、スクリプトは、ユーザーが介入できるよりも速くキーをインターフェイスに自動的に送信します。このスクリプトの実行時にユーザーがすでに入力中の場合、コードに欠陥があり、実行が中断されます。このスクリプトを実行して任意のキーを押したままにすると、スクリプトは正常に動作しなくなります。つまり、これらを組み合わせることはできません。

別のユーザー アカウントでバックグラウンドでスクリプトを実行しようとしている場合は、スケジュール サービスを使用して "%SYSTEMROOT%\system32\cmd.exe /c cscript yourscript.vbs 2>&1 %SYSTEMROOT%\logs\myscript.log" を実行します。特定のユーザーとして実行する場合、スケジュール サービスは資格情報を要求します。

エンド ユーザーはいつでもそのユーザーで runas を実行できるため、runas 構文で /savecred を使用することはお勧めできません。最も安全で効果的な方法は、UI 実行を抑制してスケジュールされたタスクを使用することです。

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run "cmd.exe /c C:\Folder\BatchFileName.bat", 0
Set WinScriptHost = Nothing

関連情報