freebsd
Goto Top

Benutzeranmeldung mit Einschränkung

Hallo zusammen,

ich habe da ein kleines Problemchen und zwar versuche ich mich im PowerShell einzulernen, habe da eine kleine Aufgabe bekommen, dennoch krieg ich es irgendwie nicht wirklich hin. Ich brauche ein Skript, der beim Anmelden eines Benutzers ausgeführt wird, dieser soll überprüfen ob die Uhrzeit die angegeben ist übereinstimmt und falls dass der Fall ist, wird der Computer ausgeschaltet, also so eine Art Kindersicherung. Beispiel zwischen 21 Uhr und 8 Uhr morgens soll beim Anmelden des jeweiligen Benutzers der PC ausgeschaltet werden.

Mein Versuch sieht wie folgt aus:
$user = $true

while($user)
{
    if ((get-date -Format HH) -gt 21 -and (get-date -Format HH) -lt 8)
    {
      Stop-Computer -ComputerName localhost -Force
    }
    else
    {
        $user = $false
    }
}

Wäre Dankbar für jegliche Hilfe

Mit freundlichen Grüßen

FreeBSD

Content-Key: 643964

Url: https://administrator.de/contentid/643964

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: tikayevent
Lösung tikayevent 23.01.2021 um 17:38:45 Uhr
Goto Top
Ich kann Powershell nicht wirklich, aber es ist kein Powershellfehler, sondern ein ZDO-Problem. Es wird nicht funktionieren, weil eine Zahl kann nicht gleichzeitig größer als 21 und kleiner als 8 sein, damit wird deine Abfrage niemals WAHR.

Entweder aus dem AND wird ein OR oder du musst großer und kleiner vertauschen, sowie das ganze negieren.
Mitglied: FreeBSD
FreeBSD 23.01.2021 um 17:52:12 Uhr
Goto Top
Ok das löst schonmal mein erstes Problem, wenn ich nun das Skript ausführe wird die Bedingung wahr und der Befehl ausgeführt, wie kann ich dieser beim Anmelden ausführen lassen aber nur auf ausgewählte Benutzer?
Mitglied: Henere
Henere 23.01.2021 um 17:52:12 Uhr
Goto Top
Warum nicht über die Benutzerkontensteuerung das anmelden nur zwischen x und y zulassen ?
Mitglied: FreeBSD
FreeBSD 23.01.2021 um 17:53:35 Uhr
Goto Top
Die Aufgabe ist vorgegeben und muss mit einem Skript erledigt werden.
Mitglied: tikayevent
tikayevent 23.01.2021 um 18:03:49 Uhr
Goto Top
Array mit Benutzernamen einbauen und dann einfach ne weitere Abfrage, wie der Benutzer heißt, in dessen Kontext das Script ausgeführt wird. Ist der Kontext-Benutzer im Array enthalten, die Zeitabfrage und dann rein bzw. raus.

Oder du packst das Script für jeden Benutzer gesondert in die Aufgabenplanung mit dem Flag "nur bei angemeldetem Benutzer ausführen".
Mitglied: em-pie
em-pie 23.01.2021 um 19:23:31 Uhr
Goto Top
Moin,

Zitat von @tikayevent:

Array mit Benutzernamen einbauen und dann einfach ne weitere Abfrage, wie der Benutzer heißt, in dessen Kontext das Script ausgeführt wird. Ist der Kontext-Benutzer im Array enthalten, die Zeitabfrage und dann rein bzw. raus.

Oder du packst das Script für jeden Benutzer gesondert in die Aufgabenplanung mit dem Flag "nur bei angemeldetem Benutzer ausführen".
Oder, wenn eine AD-Struktur besteht, per GPO verteilen und alle relevanten User in eine Gruppe packen. Die GPO wird dann auf die Gruppe angewendet.


Das Wie kannst du dir dann selbst erarbeiten, hast du ja schließlich die Aufgabe gestellt bekommen, nicht wir face-smile

Gruß
em-pie
Mitglied: FreeBSD
FreeBSD 23.01.2021 um 20:01:01 Uhr
Goto Top
Ich habe das jetzt mal versucht über die Aufgabenplanung zu machen, dennoch geht es nicht.

Einstellungsübersicht:
https://gyazo.com/38177eaebb684809e6d000329a0750bf
https://gyazo.com/ffc65cbdef01f450c3e594196bdf7f40
https://gyazo.com/b770739598f0ab1966aceeb1fbe55fc6
https://gyazo.com/d3ad55838d3d8af0abf5e6d3a73a5fa8

Mir ist auch aufgefallen, dass die Aufgabenplanung einmalig mein Skript startet und ausführt obwohl der Flag "beim Anmelden" gesetzt ist oder irre ich mich da?

Ich schaue mir mal die Array Lösung an, muss ich da nicht irgendwie auf die Benutzer zugreifen können, kann ich diese als Objekt instanziieren oder welche Möglichkeiten sind da vorhanden? Die einfachste die mir im Kopf schwebt wäre ein String abzugleichen.

@em-pie leider besteht da keine AD-Struktur.
Mitglied: em-pie
Lösung em-pie 23.01.2021 um 20:11:04 Uhr
Goto Top
Eine Bitte: stelle die Bilder bitte direkt hier ein.
Hat den Vorteil: wenn in 5 Jahren jemand anderes selbiges Problem hat, kann er auf die Bilder noch zugreifen und muss nicht hoffen, dass du sie noch bei dem (vielleicht ja dubiosen) ANbieter liegen hast.

Links in der Leiste neben dem Editor, das unterste Icon...


Zur Problemlösung eins:
Baue in das Script ein
$allUsers = 'mmustermann', 'lmueller', 'rwahnsinn'  

if ($allUsers.Contains($env:UserName)) {
 Write-Output 'Tu was tolles'  
}

dann per mmc den lokalen Gruppenrichtlinieneditor starten und unter den Benutzereinstellungen dein Script beim Anmelden einbinden
Mitglied: FreeBSD
FreeBSD 26.01.2021 aktualisiert um 23:56:52 Uhr
Goto Top
Hallo,

habe das alles mal getestet und gemerkt dass es mittlerweile einigermaßen funktioniert aber nicht komplett.

Mein Skript sieht folgendermaßen aus:
[reflection.assembly]::loadwithpartialname('System.Windows.Forms')  
[reflection.assembly]::loadwithpartialname('System.Drawing')  
$notify = new-object system.windows.forms.notifyicon
$notify.icon = [System.Drawing.SystemIcons]::Information
$notify.Visible = $true


$user = 'Test'  
$actualTime = get-date -Format HH:mm
$startTimer = "08:00"  
$endTimer = "21:00"  

while($user.Contains($env:USERNAME))
{
     if(-not(($actualTime.ToString() -lt $startTimer) -or ($actualTime.ToString() -ge $endTimer)))
     {
        if($actualTime.ToString() -eq "20:59")  
        {

            $notify.showballoontip(10,'Warnung!','In einer Minute wird der Benutzer gesperrt!',[system.windows.forms.tooltipicon]::None)  
        }
    }
    else
    {
        Restart-Computer -ComputerName localhost -Force
    }
}

Wenn ich die Uhr auf 20:57 stelle und 3 Minuten warte, passiert nichts obwohl der Eintrag in der GPO beim Anmelden eingebunden ist. Melde ich den User ab und wieder ein, funktioniert mein Skript.
Mitglied: tikayevent
tikayevent 27.01.2021 um 08:51:18 Uhr
Goto Top
Wenn ich die Uhr auf 20:57 stelle und 3 Minuten warte, passiert nichts obwohl der Eintrag in der GPO beim Anmelden eingebunden ist. Melde ich den User ab und wieder ein, funktioniert mein Skript.
Ist ja auch absolut richtig. Das Script wird bei der Anmeldung einmal ausgeführt und beendet sich dann, um dann bei der nächsten Anmeldung ein weiteres Mal ausgeführt zu werden. Was du vorhast würde erfordern, dass das Script jede Minute einmal gestartet wird.
Mitglied: FreeBSD
FreeBSD 27.01.2021 um 12:42:01 Uhr
Goto Top
Ich habe nun meine in der Aufgabenplanung den Skript gepackt, er wird auch ausgeführt dennoch wird die Ausführung im Notepad geöffnet, der Registereintrag wurde verändert damit er automatisch Powershell ausführt, die Eigenschaften des Skripts wurden auch verändert und das Häckchen gesetzt bei "Immer diese App verwenden".

Versuch 1:
- Administrator Benutzer erstellt die Aufgabe, dies wird aber nicht ausgeführt.

Versuch 2:
- Test Benutzer erstellt die Aufgabe, diese wird angenommen, dennoch wie oben beschrieben wird der Skript im Notepad geöffnet.