Zum Inhalt springen

flex10

Mitglieder
  • Gesamte Inhalte

    14
  • Benutzer seit

  • Letzter Besuch

  1. Falls jemand noch auf der Suche ist... cls # Domänenname, Anzahl Tage und auszuschließende Benutzer $Subtree = "DC=meine,DC=domäne,DC=de" $NbDays = "60" $MemberExceptions = "(!(|(CN=sys*)(CN=SAPS*)(CN=c10*)))" # Aktuelles Datum auslesen $CurrentDate = [System.DateTime]::Now # Konvertierung der lokalen Uhrzeit ins GMT-Format $currentDateUtc = $currentDate.ToUniversalTime() # Definieren der gesamten LDAP-URL $LdapURL = "LDAP://" + $Subtree # Erstellung eines Suchobjekts $searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$LdapURL) # Auszulesende AD-Werte $searcher.PropertiesToLoad.Add("displayName") >$null $searcher.PropertiesToLoad.Add("sAMAccountName") >$null $searcher.PropertiesToLoad.Add("lastLogonTimeStamp") >$null # Umwandlung LastLogonTimeStamp in Uhrzeit-Format $lastLogonTimeStampLimit = $currentDateUtc.AddDays(- $NbDays) $lastLogonIntervalLimit = $lastLogonTimeStampLimit.ToFileTime() Write-Host "Suche Benutzer die sich seit dem"$lastLogonTimeStampLimit" nicht angemeldet haben.." Write-Host "" $searcher.Filter = "(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(lastLogonTimeStamp<=" + $lastLogonIntervalLimit + ")( "+ $MemberExceptions +"))" # Ausführen der LDAP Suchanfrage im AD $users = $searcher.FindAll() if ($users.Count -eq 0) { Write-Host "Es müssen keine Benutzer deaktiviert werden." } else { foreach ($user in $users) { # Benutzerwerte auslesen [string]$adsPath = $user.Properties.adspath [string]$displayName = $user.Properties.displayname [string]$samAccountName = $user.Properties.samaccountname [string]$lastLogonInterval = $user.Properties.lastlogontimestamp # Benutzerkonto deaktivieren $account=[ADSI]$adsPath $account.psbase.invokeset("AccountDisabled", "True") $account.setinfo() # Datum und Zeit ins lokale Format umwandeln $lastLogon = [System.DateTime]::FromFileTime($lastLogonInterval) Write-Host " Deaktiviere Benutzerkonto"$displayName" ("$samAccountName") | Letzter Login am "$lastLogon"" } }
  2. Hallo zusammen, ich bin auf der Suche nach einem Script (am besten PowerShell), welches inaktive Benutzer (z.B. in einem Zeitraum von 60 Tagen) mittels AD-Attribut "LastLogonTimeStamp" ermittelt und dann deaktiviert. Wäre für jede Hilfe dankbar!
  3. Hallo zusammen, ich weiß nicht in welches Unterforum PS-Scripte gehören, also poste ich es mal hier rein. Ich muss die Kennwörter von einigen AD-Benutzern ändern. Die Benutzernamen und neuen Kennwörter sollen von einer CSV Datei importiert, im AD gespeichert, und pro User eine Textdatei mit dem neuen Passwort ausgegeben werden, und jede Textdatei am besten noch mit WinRAR verschlüsselt gepackt werden Das ganze soll mit PowerShell realisiert werden. Habe hier schonmal einen Ansatz: Import-Csv passwords.csv | ForEach-Object { Set-ADAccountPassword -Identity $_.BenutzerName -Reset -NewPassword $._Passwort } Fehlt nur noch die For-Schleife, die für jede Userspalte in der CSV die Ausgabe in eine Textdatei macht. Die Textdatei sollte dann als Dateinamen den Benutzernamen und der Inhalt das neue Kennwort beinhalten. Ich hoffe ich konnte mich verständlich ausdrücken. Vielen Dank im Voraus flex10
  4. Dankeee Hier ist noch ein hilfreicher Link, Bestimmte Dateiendungen verbieten Ist standardmäßig nicht installiert, muss also über 'Windows-Komponenten hinzufügen' nachinstalliert werden. (--> Verwaltungs- und Überwachungsprogramme --> Dateiserververwaltung & Ressourcen-Manager für Dateiserver)
  5. Wir haben in unserer Firma zwei Netzlaufwerke, die für alle Mitarbeiter zur Verfügung gestellt werden. Immer und immer wieder kommt es vor, dass Multimedia-Dateien (AVI, MP3, MPG usw.) auf denen abgelegt wird (trotz Aufforderung dies nicht zu tun ) Gibt es irgendeine Möglichkeit, bestimmte Dateitypen auf diesen Ordnern/Netzlaufwerken zu sperren bzw. das Ablegen zu verbieten? Ist eventuell mit "Windows Bordmitteln" etwas machbar?
  6. Das Support-Team hat sich gemeldet, mit einem Verweis auf folgende Seite How do you determine the owner of a process - Visual Basic .NET answers Ich solle es mit "ManagementObjectSearcher" versuchen den owner zu ermitteln, aber so wirklich krieg ich das nicht hin..
  7. Wie gesagt, taskkill/tasklist oder query.exe funktionieren nicht, da es sich um einen Windows 2000 Server handelt.. Ich habe den Hersteller des Programms kontaktiert, mal sehen wie es weitergeht. Ich melde mich dann wieder. Für andere bzw. neue Vorschläge bin ich natürlich offen.
  8. Kleines Update: Mit dem Process Explorer von Sysinternals habe ich ermittelt, dass die Applikation für User die erweiterte Sicherheitseinstellung "Query Information" nicht zur Verfügung stellt. Bei Admins ist da ein Haken. Setzt man da den Haken bei Query Information, kann man als User den Owner ermitteln und das Script funktioniert! Ich hab mal ein Screenshot davon gemacht: Allerdings ist dies natürlich nur temporär im Process Explorer machbar. Unter den Sicherheitseinstellungen der Applikation (Rechtsklick auf die EXE-->Eigenschaften-->Sicherheitseinstellungen--> Erweitert-->Anzeigen/Bearbeiten) gibt es leider nichts dergleichen, sodass ich diese Berechtigung für User speichern könnte. Hoffe die Infos haben dir geholfen tester2k5
  9. Sorry hab mich falsch ausgedrückt. Die Applikation liegt extern, wird aber natürlich lokal gestartet. Zwischenzeitig hab ich Dein Script mal genauer erforscht und bin zu dem Ergebnis gekommen, dass diese eine Applikation den getOwner-Befehl nicht als User ausführen kann. Als Antwort liefert es eine 2 (Access Denied). Als Admin kommt die 0 und alles läuft wie es soll. Komischerweise kann ich aber als User die Anwendung von anderen Usern killen, wenn ich den getOwner rauslasse. Hört sich für mich an wie ein Bug. Gibt es noch eine andere Möglichkeit außer dem getOwner string, den Benutzernamen zu ermitteln?
  10. Die Schreibweise ist auf jeden Fall richtig. Wenn ich mich als User lokal auf dem Server anmelde, wird das Programm nicht beendet. Wenn ich mich aber als Admin anmelde, funktioniert es. Wie gesagt, mit diesem Script funktioniert es auch als User, jedoch werden dann alle Instanzen beendet: Option Explicit Dim objWMIService, objProcess, colProcess Dim strComputer, strProcessKill strComputer = "." strProcessKill = "'xyz.exe'" Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcess = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = " & strProcessKill ) For Each objProcess in colProcess objProcess.Terminate() Next WSCript.Echo "xyz.exe wurde beendet" WScript.Quit Kleine Anmerkung: Das Programm befindet sich auf einem anderen Server, wird also nicht auf dem lokalen Server gestartet sondern extern. Hat es was damit zu tun?
  11. Das Script funktioniert! Vielen Dank. Allerdings streikt es nur bei einem einzigen Programm. Mit Admin-Rechten klappts, aber mit eingeschränkten User-Rechten klappts nicht. Es kommt keine Fehlermeldung, nichts. Es kann diese eine Anwendung einfach nicht beenden. Bei meinem oben angegebenen Script wird die Anwendung allerdings mit User-Rechten beendet. Woran kann das liegen? Das mit taskkill war mir bekannt und funktioniert auch unter einem unserer Windows2003 Server, aber hier handelt es sich um einen Windows 2000 Server.
  12. Hallo, wir nutzen einen Citrix TS auf dem sich mehrere Benutzer anmelden und veröffentliche Anwendungen nutzen. Ab und zu friert ein bestimmtes Programm ein, dann müssen wir die betroffenen Prozesse manuell beenden. Ich baue z.Z. ein VB-Script damit die User das abgestürtzte Programm selbst beenden können. Hier der Quellcode (am Beispiel notepad.exe): Option Explicit Dim objWMIService, objProcess, colProcessList Dim strComputer, strProcessKill strComputer = "." strProcessKill = "'notepad.exe'" Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = " & strProcessKill) For Each objProcess in colProcessList objProcess.Terminate() Next WSCript.Echo "Notepad wurde beendet." WScript.Quit Dies funktioniert an sich auch so. ABER wenn mehrere Benutzer Notepad am Laufen haben, dann werden alle geöffneten Notepad-Prozesse auf dem Server beendet! Wie kriegt man es hin, dass das Script nur den Prozess des einzelnen Benutzers, der das Script ausführt, beendet? Danke und Gruß

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...