비록매우비슷한 질문:로그인 후 일정 시간이 지나면 컴퓨터를 잠그는 방법은 무엇입니까?나는 그것이 내 필요에 적합하다고 생각하지 않습니다. 컴퓨터가 필요해잠금이 종료되지 않음.
내가 한 일: 다음 스크립트를 사용하여 bat 파일을 만들었습니다.
shutdown -l /t 1800
작업 스케줄러에 작업을 등록했는데 전혀 그렇지 않았습니다.잠그다내 PC. bat 파일 자체가 작동하지 않습니다. 왜 그런지 모르겠습니다.
만약 내가한다면.
shutdown -l
완벽하게 작동합니다. 하지만 나는 이런 일이 일어나는 것을 원하지 않습니다. 특정 시간이 지난 후에 이 작업을 수행하고 싶습니다.
WinKey + L과 로그아웃이 다르다는 것을 알고 있습니다.
그리고 토요일과 일요일을 제외하고 매일 이 작업을 수행할 수 있는 방법이 있습니까? 이 시간 동안 일을 해야 합니다.
답변1
- 작업 스케줄러를 실행합니다.
- 로그온 후 지정된 시간 동안 활성화되는 예약된 작업을 만듭니다. 트리거 탭에는 로그온 트리거와 이벤트 후 작업을 지연하는 옵션이 있습니다. 여기에 시간을 입력합니다.
- 확인하다가장 높은 권한으로 실행(특히 이 옵션 없이 잠금이 작동하지 않는 경우)
- BAT 파일을 실행 가능한 작업으로 설정하세요.
완료.
주말에 대한 예외를 UI에 추가할 수는 없지만 배치 파일이나 ps1 파일에서 직접 평일에 대해 테스트할 수 있습니다. 또는 "do-not-lock" 파일이 있는지 테스트하십시오. 존재하는 경우 잠그지 않고 배치를 종료하십시오. 예약된 작업(주중/주말에 실행)을 사용하여 해당 파일을 생성/삭제합니다.
답변2
이 오래된 vbscript를 참조하십시오Auto-Lock_On_Idle_TimeOut.vbs
루프에서 실행되도록 조금 변경했으며 30분마다 컴퓨터가 잠깁니다.
자동 잠금_After_Amount_of_Time_Defined_by_User.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
대신 이것을 복사하여 방망이에 붙여 넣으십시오.
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 스크립트는 엄청나게 장황하고 이해하기 어려웠습니다. 보안에 대해 걱정하는 사용자로서 나는 스크립트를 이해하려고 노력하기로 결정했습니다. :)