2011-08-10 17 views
0


Windows XPスタートメニューのシャットダウンオプションを特定の曜日に無効にし、その後翌日に再度有効にする小さなVBScriptを作成しています。
このスクリプトは、限定的な特権ユーザーのログインで実行されることを前提としています。このユーザーはWindowsレジストリを変更する権限がないため、管理者アカウントで実行する必要があります。
限定ユーザーログインas explained here, point 5で管理者アカウントからスクリプトを実行するスケジュールされたタスクをセットアップしました。
問題点:Windowsレジストリに変更を加えた後、そのユーザーのexplorer.exeを再起動して変更を有効にする必要があります。私のスクリプトはこれをしません。それはexplorer.exeを殺すことができますが、何らかの理由で再起動できません。
管理者アカウントから直接スクリプトを実行して管理者アカウントのレジストリ設定を変更し、管理者アカウントexplorer.exeを再起動すると、スクリプトが問題なく動作することに注意してください。VBScript - 別のユーザーのexplorer.exeを再起動する

Option Explicit 
Const RegKey = "HKEY_USERS\LIMITED USER SID HERE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoClose" 
Const BackupDay = 5 'sunday = 1 
Dim WshShell 

Set WshShell = WScript.CreateObject("WScript.Shell") 

If Weekday(Date) = BackupDay Then 

    If WshShell.RegRead(RegKey) = 0 Then 

     WshShell.Run "msg * __Message Here__" 
     Wscript.Sleep 500 

     WshShell.RegWrite RegKey, 1, "REG_DWORD" 

     RestartExplorer1 
     ' RestartExplorer2 

     WScript.quit 

    Else 

[...]

Sub RestartExplorer1() 

Dim strComputer, strProcessToKill, objWMIService, colProcess, objProcess 

strComputer = "." 
strProcessToKill = "explorer.exe" 

Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" _ 
    & strComputer _ 
    & "\root\cimv2") 

Set colProcess = objWMIService.ExecQuery _ 
    ("Select * from Win32_Process Where Name = '" & strProcessToKill & "'") 

For Each objProcess in colProcess 
    objProcess.Terminate() 

Next 
End Sub 

手順RestartExplorer1は、彼がそうログオフする必要があるとして、それはOKですが、管理者のものを含む(すべてのexplorer.exeのプロセスを強制終了する必要があります
は、ここでは、コードの一部です私はユーザー名でフィルタリングしてユーザーのものだけを強制終了することができますが、それは問題ではありません)。ただし、管理者アカウントからスケジュールされたタスクから実行した場合は絶対に何もしません。確かに殺され、この場合のexplorer.exeに

Sub RestartExplorer2() 

WshShell.Run "cmd /c Taskkill /F /IM explorer.exe" 
WScript.Sleep 500 
WshShell.Run "cmd /c Start explorer.exe" 

End Sub 

が、何らかの理由でそれが再起動されません。
RestartExplorer2にはより良い運を持っていません。
どこでも検索した結果はありません。
ご協力いただきありがとうございます。

答えて

0

WindowsのRunAs機能を使用して、別のユーザーアカウントでExplorer.exeプロセスを再起動できます。試してみてください:

Dim objShell, strUsername, strPassword 
strUsername = "username" 
strPassword = "password" 

Set objShell= WScript.CreateObject("WScript.Shell") 
objShell.Run "runas /user:" & strusername & " ""explorer.exe""" 

WScript.Sleep 100 

objShell.Sendkeys strPassword & "~" 
WScript.Quit 
+0

こんにちはNilpo、ありがとうございます。残念ながら、runasは私の問題の解決策ではありません。 – Giovanni

関連する問題