Cómo BLOQUEAR la computadora después de 'x' cantidad de tiempo inmediatamente después de iniciar sesión

Cómo BLOQUEAR la computadora después de 'x' cantidad de tiempo inmediatamente después de iniciar sesión

Aunque hay unMUYpregunta similar:¿Cómo bloquear mi computadora después de un cierto período de tiempo desde el inicio de sesión?No creo que se ajuste a mis necesidades. Necesito mi computadora parabloquear NO APAGADO.

Lo que hice: creé un archivo bat con el siguiente script

shutdown -l /t 1800

Cuando puse una tarea en el Programador de tareas, simplemente no funcionó.CERRARmi PC. El archivo bat en sí no funciona. No tengo ni idea de porqué.

Si lo hago.

shutdown -l

Funciona perfectamente. Pero no quiero que esto suceda. Quiero que haga esto después de un período de tiempo específico.

Entiendo que WinKey + L y cerrar sesión son diferentes.

También hay una manera de hacer esto todos los días excepto los sábados y domingos, tengo que trabajar durante este tiempo.

Respuesta1

  1. Ejecute el Programador de tareas.
  2. Cree una tarea programada que se active una cantidad de tiempo determinada después del inicio de sesión; en la pestaña Activador, hay un activador para iniciar sesión y una opción para retrasar la acción después del evento; aquí ingresa su tiempo.
  3. ControlarEjecutar con los privilegios más altos(especialmente si el bloqueo no funciona sin esta opción).
  4. Coloque su archivo BAT como acción ejecutable.

Hecho.

No puede agregar una excepción para los fines de semana en la interfaz de usuario, pero puede probar los días laborables directamente en su archivo por lotes o archivo ps1. O pruebe la existencia del archivo "no bloquear". Si está presente, finalice su lote sin bloquearlo. Cree/elimine ese archivo utilizando tareas programadas (que se ejecutan entre semana/fin de semana).

Respuesta2

Consulte este antiguo vbscriptAuto-Lock_On_Idle_TimeOut.vbs


Lo cambié un poco para que se ejecute en bucle y cada 30 minutos la computadora se bloqueará.


Bloqueo_automático_después_de_cantidad_de_tiempo_definido_por_usuario.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
'----------------------------------------------------------------------------------------------------------------

Respuesta3

Simplemente copia y pega esto en tu bate:

call timeout /t 1800 && Rundll32.exe user32.dll,LockWorkStation

Y si quieres que tu bate corra en silencio sigueesta guíaantes de agregarlo al Programador de tareas

Respuesta4

Gracias por todas sus respuestas, cada uno de ustedes me dio una pieza para trabajar. Aquí está la respuesta completa:

$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

Esa es la respuesta completa. La respuesta de @Hackoo fue buena, pero el script vbs era increíblemente detallado y difícil de entender. Como usuario preocupado por la seguridad, decidí intentar comprender el script :)

información relacionada