Benutzeranmeldung mit Einschränkung
FreeBSD (Level 1) - Jetzt verbinden
23.01.2021, aktualisiert 17:23 Uhr, 824 Aufrufe, 11 Kommentare, 2 Danke
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:
Wäre Dankbar für jegliche Hilfe
Mit freundlichen Grüßen
FreeBSD
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
}
}
Mit freundlichen Grüßen
FreeBSD
11 Antworten
- LÖSUNG tikayevent schreibt am 23.01.2021 um 17:38:45 Uhr
- LÖSUNG FreeBSD schreibt am 23.01.2021 um 17:52:12 Uhr
- LÖSUNG Henere schreibt am 23.01.2021 um 17:52:12 Uhr
- LÖSUNG FreeBSD schreibt am 23.01.2021 um 17:53:35 Uhr
- LÖSUNG tikayevent schreibt am 23.01.2021 um 18:03:49 Uhr
- LÖSUNG em-pie schreibt am 23.01.2021 um 19:23:31 Uhr
- LÖSUNG FreeBSD schreibt am 23.01.2021 um 20:01:01 Uhr
- LÖSUNG em-pie schreibt am 23.01.2021 um 20:11:04 Uhr
- LÖSUNG FreeBSD schreibt am 26.01.2021 um 23:49:25 Uhr
- LÖSUNG tikayevent schreibt am 27.01.2021 um 08:51:18 Uhr
- LÖSUNG FreeBSD schreibt am 27.01.2021 um 12:42:01 Uhr
- LÖSUNG tikayevent schreibt am 27.01.2021 um 08:51:18 Uhr
- LÖSUNG FreeBSD schreibt am 26.01.2021 um 23:49:25 Uhr
- LÖSUNG em-pie schreibt am 23.01.2021 um 20:11:04 Uhr
- LÖSUNG FreeBSD schreibt am 23.01.2021 um 20:01:01 Uhr
- LÖSUNG em-pie schreibt am 23.01.2021 um 19:23:31 Uhr
- LÖSUNG tikayevent schreibt am 23.01.2021 um 18:03:49 Uhr
- LÖSUNG FreeBSD schreibt am 23.01.2021 um 17:53:35 Uhr
LÖSUNG 23.01.2021 um 17:38 Uhr
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.
Entweder aus dem AND wird ein OR oder du musst großer und kleiner vertauschen, sowie das ganze negieren.
LÖSUNG 23.01.2021 um 17:52 Uhr
LÖSUNG 23.01.2021 um 17:52 Uhr
LÖSUNG 23.01.2021 um 17:53 Uhr
LÖSUNG 23.01.2021 um 18:03 Uhr
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 du packst das Script für jeden Benutzer gesondert in die Aufgabenplanung mit dem Flag "nur bei angemeldetem Benutzer ausführen".
LÖSUNG 23.01.2021 um 19:23 Uhr
Moin,
Das Wie kannst du dir dann selbst erarbeiten, hast du ja schließlich die Aufgabe gestellt bekommen, nicht wir
Gruß
em-pie
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.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".
Das Wie kannst du dir dann selbst erarbeiten, hast du ja schließlich die Aufgabe gestellt bekommen, nicht wir
Gruß
em-pie
LÖSUNG 23.01.2021 um 20:01 Uhr
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.
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.
LÖSUNG 23.01.2021 um 20:11 Uhr
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
dann per mmc den lokalen Gruppenrichtlinieneditor starten und unter den Benutzereinstellungen dein Script beim Anmelden einbinden
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'
}
LÖSUNG 26.01.2021, aktualisiert um 23:56 Uhr
Hallo,
habe das alles mal getestet und gemerkt dass es mittlerweile einigermaßen funktioniert aber nicht komplett.
Mein Skript sieht folgendermaßen aus:
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.
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
}
}
LÖSUNG 27.01.2021 um 08:51 Uhr
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.LÖSUNG 27.01.2021 um 12:42 Uhr
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.
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.