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
- Ejecute el Programador de tareas.
- 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.
- ControlarEjecutar con los privilegios más altos(especialmente si el bloqueo no funciona sin esta opción).
- 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 :)