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にはより良い運を持っていません。
どこでも検索した結果はありません。
ご協力いただきありがとうございます。
こんにちはNilpo、ありがとうございます。残念ながら、runasは私の問題の解決策ではありません。 – Giovanni