로그온 직후 'x' 시간이 지나면 컴퓨터를 잠그는 방법

로그온 직후 'x' 시간이 지나면 컴퓨터를 잠그는 방법

비록매우비슷한 질문:로그인 후 일정 시간이 지나면 컴퓨터를 잠그는 방법은 무엇입니까?나는 그것이 내 필요에 적합하다고 생각하지 않습니다. 컴퓨터가 필요해잠금이 종료되지 않음.

내가 한 일: 다음 스크립트를 사용하여 bat 파일을 만들었습니다.

shutdown -l /t 1800

작업 스케줄러에 작업을 등록했는데 전혀 그렇지 않았습니다.잠그다내 PC. bat 파일 자체가 작동하지 않습니다. 왜 그런지 모르겠습니다.

만약 내가한다면.

shutdown -l

완벽하게 작동합니다. 하지만 나는 이런 일이 일어나는 것을 원하지 않습니다. 특정 시간이 지난 후에 이 작업을 수행하고 싶습니다.

WinKey + L과 로그아웃이 다르다는 것을 알고 있습니다.

그리고 토요일과 일요일을 제외하고 매일 이 작업을 수행할 수 있는 방법이 있습니까? 이 시간 동안 일을 해야 합니다.

답변1

  1. 작업 스케줄러를 실행합니다.
  2. 로그온 후 지정된 시간 동안 활성화되는 예약된 작업을 만듭니다. 트리거 탭에는 로그온 트리거와 이벤트 후 작업을 지연하는 옵션이 있습니다. 여기에 시간을 입력합니다.
  3. 확인하다가장 높은 권한으로 실행(특히 이 옵션 없이 잠금이 작동하지 않는 경우)
  4. 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 스크립트는 엄청나게 장황하고 이해하기 어려웠습니다. 보안에 대해 걱정하는 사용자로서 나는 스크립트를 이해하려고 노력하기로 결정했습니다. :)

관련 정보