しかし、とても同様の質問:ログイン後、一定時間経過後にコンピューターをロックするにはどうすればいいですか?私のニーズに合っていないと思います。ロックはシャットダウンしません。
私がやったこと: 次のスクリプトでbatファイルを作成した
shutdown -l /t 1800
タスクスケジューラにタスクを設定しても、ロック私の PC。bat ファイル自体が動作しません。理由はわかりません。
私が行った場合。
shutdown -l
完璧に動作します。しかし、私はこれが起こることを望んでいません。特定の時間が経過したらこれを実行したいのです。
WinKey + L とサインアウトは異なることは理解しています。
また、土曜と日曜を除く毎日これを行う方法はありますか。土曜と日曜は仕事をしなければなりません。
答え1
- タスク スケジューラを実行します。
- ログオン後に指定された時間でアクティブ化されるスケジュールされたタスクを作成します - [トリガー] タブには、ログオンのトリガーと、イベント後のアクションを遅延するオプションがあります - ここで時間を入力します。
- チェック最高権限で実行する(特にこのオプションがないとロックが機能しない場合)。
- BAT ファイルを実行可能なアクションとして配置します。
終わり。
UI に週末の例外を追加することはできませんが、バッチ ファイルまたは ps1 ファイルで平日を直接テストできます。または、ファイル「do-not-lock」の存在をテストします。存在する場合は、ロックせずにバッチを終了します。スケジュールされたタスク (平日/週末に実行) を使用して、そのファイルを作成/削除します。
答え2
この古いVBScriptを参照してください自動ロックオンアイドルタイムアウト.vbs
ループで実行し、30 分ごとにコンピューターがロックされるように少し変更しました。
ユーザーが定義した時間後の自動ロック.vbs
'#################################################################################
'# Script Name : Auto-Lock_After_Amount_of_Time_Defined_by_User.vbs #
'#################################################################################
Option Explicit
Dim Copyright,Msg
Dim Timeout,strCommand,VbsPath,ShortcutName
Timeout = 30 '30 minutes : You can modify this variable as your convenience
Msg = Lang
Copyright = Msg(0) & ChrW(169) &" Hackoo 2022"
If AppPrevInstance() Then
MsgBox Msg(1) & VbCrLF & CommandLineLike(WScript.ScriptName),VbExclamation,Copyright
WScript.Quit
Else
Do
strCommand = "CMD /C Shutdown -L"
VbsPath = Wscript.ScriptFullName
ShortcutName = "Auto-Lock_TimeOut"
Call Shortcut(VbsPath,ShortcutName)
Wscript.Sleep 1000 * 60 * Timeout
CreateObject("Wscript.Shell").Run strCommand,0,True
Loop
End If
'---------------------------------------------------------------------------------------------------------------
Sub Shortcut(PathApplication,ShortcutName)
Dim objShell,StartFolder,objShortCut,MyTab
Set objShell = CreateObject("WScript.Shell")
MyTab = Split(PathApplication,"\")
If ShortcutName = "" Then
ShortcutName = MyTab(UBound(MyTab))
End if
StartFolder = objShell.SpecialFolders("Startup")
Set objShortCut = objShell.CreateShortcut(StartFolder & "\" & ShortcutName & ".lnk")
objShortCut.TargetPath = DblQuote(PathApplication)
ObjShortCut.IconLocation = "%SystemRoot%\system32\SHELL32.dll,44"
objShortCut.Save
End Sub
'---------------------------------------------------------------------------------------------------------------
Function DblQuote(Str)
DblQuote = Chr(34) & Str & Chr(34)
End Function
'---------------------------------------------------------------------------------------------------------------
Function AppPrevInstance()
With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
" AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")
AppPrevInstance = (.Count > 1)
End With
End With
End Function
'----------------------------------------------------------------------------------------------------------------
Function CommandLineLike(ProcessPath)
ProcessPath = Replace(ProcessPath, "\", "\\")
CommandLineLike = "'%" & ProcessPath & "%'"
End Function
'----------------------------------------------------------------------------------------------------------------
Function OSLang()
Dim dtmConvertedDate,strComputer,objWMIService,oss,os
Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set oss = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each os in oss
OSLang = os.OSLanguage
Next
End Function
'----------------------------------------------------------------------------------------------------------------
Function Lang()
Dim MsgFR,MsgEN
MsgFR = Array("Verrouillage automatique en cas d'inactivité " ,"ATTENTION ! Il y a une autre instance en cours d'exécution !",_
"Attention ! Votre Session va être verrouillé dans 20 secondes !`n`n Voulez-vous confirmer le Verrouillage de votre session ?","`n`n OUI ou NON ?")
MsgEN = Array("Automatic Lock Session On Idle TimeOut ","ATTENTION ! There is another instance running !",_
"Warning ! Your Session will be locked in 20 seconds !`n`n Do you want to confirm the Locking of your session ?","`n`n YES or NO ?")
'Vérifiez si le système est français pour définir le tableau français comme message, sinon définissez-le comme anglais
'Check if the system is french to set the French array as message otherwise set it as English
If Oslang = 1036 Then
Lang = MsgFR ' French Array Message to be set
Else
Lang = MsgEN ' English Array Message to be set
End If
End Function
'----------------------------------------------------------------------------------------------------------------
答え3
代わりに、これをコピーして bat に貼り付けてください:
call timeout /t 1800 && Rundll32.exe user32.dll,LockWorkStation
バットを静かに走らせたいならこのガイドタスクスケジューラに追加する前に
答え4
皆さんの回答に感謝します。皆さん一人一人が私に答えを与えてくれました。完成した回答は次のとおりです。
$i = 0
$sTime = 0;
$day = (Get-Date).DayOfWeek
if ($day -match "Saturday|Sunday") {
$sTime = 6000
} else {
<#Whatever you need to do#>
}
Write-Host "Screen time allocation on a $day : $sTime"
while($i -ne $sTime)
{
$remainSTime = $sTime - $i
$ts = [timespan]::fromseconds($remainSTime)
Write-Host $ts
Start-Sleep -Seconds 1
$i++
}
Rundll32.exe user32.dll,LockWorkStation
これが完全な答えです。@Hackoo の回答は良かったのですが、vbs スクリプトは信じられないほど冗長で理解しにくいものでした。セキュリティを懸念するユーザーとして、スクリプトを理解してみることにしました :)