Obwohl es eineSEHRähnliche Frage:Wie sperre ich meinen Computer nach einer bestimmten Zeit ab der Anmeldung?Ich glaube nicht, dass es meinen Bedürfnissen entspricht. Ich brauche meinen Computer, umSperre NICHT SHUTDOWN.
Was ich getan habe: Eine Bat-Datei mit folgendem Skript erstellt
shutdown -l /t 1800
Wenn ich eine Aufgabe im Taskplaner einrichtete, funktionierte sie einfach nicht.SPERRENmein PC. Die Bat-Datei selbst funktioniert nicht. Ich habe keine Ahnung, warum.
Wenn ich mache.
shutdown -l
Es funktioniert einwandfrei. Aber ich möchte nicht, dass das passiert. Ich möchte, dass es nach einer bestimmten Zeit passiert.
Ich verstehe, dass WinKey + L und Abmelden unterschiedlich sind.
Gibt es auch eine Möglichkeit, dies jeden Tag außer samstags und sonntags zu tun, da muss ich arbeiten.
Antwort1
- Führen Sie den Taskplaner aus.
- Erstellen Sie eine geplante Aufgabe, die zu einer bestimmten Zeit nach der Anmeldung aktiviert wird. Auf der Registerkarte „Trigger“ gibt es einen Trigger für die Anmeldung und die Option, die Aktion nach dem Ereignis zu verzögern. Hier geben Sie Ihre Zeit ein.
- ÜberprüfenMit höchsten Berechtigungen ausführen(insbesondere wenn die Sperrung ohne diese Option nicht funktioniert).
- Fügen Sie Ihre BAT-Datei als ausführbare Aktion ein.
Erledigt.
Sie können der Benutzeroberfläche keine Ausnahme für Wochenenden hinzufügen, aber Sie können direkt in Ihrer Batch- oder PS1-Datei auf Wochentage testen. Oder testen Sie, ob die Datei „do-not-lock“ vorhanden ist. Wenn sie vorhanden ist, beenden Sie Ihren Batch ohne Sperren. Erstellen/löschen Sie diese Datei mithilfe geplanter Aufgaben (die an Wochentagen/am Wochenende ausgeführt werden).
Antwort2
Siehe dieses alte VBScriptAuto-Lock_On_Idle_TimeOut.vbs
Ich habe es ein wenig geändert, sodass es in einer Schleife läuft und der Computer alle 30 Minuten gesperrt wird.
Automatische Sperre nach einer vom Benutzer festgelegten Zeitspanne.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
'----------------------------------------------------------------------------------------------------------------
Antwort3
Kopieren Sie stattdessen einfach dies und fügen Sie es in Ihren Bat ein:
call timeout /t 1800 && Rundll32.exe user32.dll,LockWorkStation
Und wenn Sie möchten, dass Ihr Schläger lautlos läuft, folgen Siedieser Leitfadenbevor Sie es zum Taskplaner hinzufügen
Antwort4
Vielen Dank für all eure Antworten, jeder von euch hat mir ein Stück zum Arbeiten gegeben. Hier ist die vollständige Antwort:
$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
Das ist die vollständige Antwort. Die Antwort von @Hackoo war gut, aber das VBS-Skript war unglaublich ausführlich und schwer zu verstehen. Als sicherheitsbewusster Benutzer habe ich beschlossen, einfach zu versuchen, das Skript zu verstehen :)