So SPERREN Sie den Computer nach einer bestimmten Zeitspanne direkt nach der Anmeldung

So SPERREN Sie den Computer nach einer bestimmten Zeitspanne direkt nach der Anmeldung

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

  1. Führen Sie den Taskplaner aus.
  2. 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.
  3. ÜberprüfenMit höchsten Berechtigungen ausführen(insbesondere wenn die Sperrung ohne diese Option nicht funktioniert).
  4. 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 :)

verwandte Informationen