Jump to content

Kuddel071089

Members
  • Gesamte Inhalte

    559
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Kuddel071089

  1. Hallo zusammen,

     

    wenn bei uns ein User deaktiviert wird, wird automatisch geprüft ob seine persönl. Verzeichnis (Homeverzeichnis) leer ist.

     

    Ist es leer, wird es direkt gelöscht.

     

    Ist es nicht leer, wird eine Excel-Datei geöffnet, wo der Username, Deaktivierungsdatum sowie die Ticketnummer eingetragen werden.

     

    Diese nicht leeren Verzeichnisse werden dann alle 30 Tage per Hand gelöscht.

     

    Sprich Excel Liste öffnen und gucken, welches Verzeichnis gelöscht werden kann.

     

     

    Dieses Vorgehen möchte ich jetzt am besten irgendwie automatisieren.

     

    Meine erste Überlegung war, dass ich mit die Namen der zu loeschenden Verzeichnisse (z.B. Meyer, Mueller, Hinz) aus der Excel Datei hole und in einer CSV-Datei speichere.

     

    Per Skript sollen nun alle Verzeichnisse aus der CSV-Datei gelöscht werden. Leider funktioniert meine Schleife nicht.

    $host.ui.RawUI.WindowTitle = "Homeverzeichnis loeschen 0.1"
    # Ausgewaehlte Datei in Varibale speichern
    $pfad = "C:\user.csv"
    #Verzeichnisse loeschen
    $verzeichnisse = Import-CSV $pfad
    ForEach($verzeichnis in $verzeichnisse)
    {
    Remove-Item "\\xxxx.local\DFS\User\$verzeichnis"
        }
    

    Wenn diese Schleife funktioniert, wäre das schonmal ein Anfang.

     

    Wenn jemand noch Ideen hat, wie dieser ganze Vorgang weiter verbessert / atuomatisiert werden kann, wäre ich für jede Tipp dankbar.

     

     

     

    Vielen Dank schoneinmal

  2. Hi,

     

    da gibt es zum Einen Set-ACL (https://technet.microsoft.com/de-de/library/hh849810.aspx) oder zum Anderen SetACL (https://helgeklein.com/setacl/) ;)

     

    Gruß

    Jan

     

    Also was ich mit Set-Acel hinbekommen habe:

     

    Ich kann die korrekten Gruppen berechtigen, aber die sind explozit berechtigt und nicht vererbt.

    Die Alten Gruppen bleiben bestehen.

     

     

    $TestACL = get-acl C:\Test
    set-acl -Path C:\Test1\Archiv -AclObject $TestACL
    

     

    Ich bin mir aber nicht wirklich sicher, ob ich das so richtig gemacht habe

  3. Hallo zusammen,

     

    ich habe mir gerade ein PS Skript geschrieben um nicht mehr benötigte Verzeichniss in ein Archiv zu verschieben.

     

    Nach dem Vorgang hat das archivierte Verzeichnis leider immer noch die alten Berechtigungengruppen und übernimmt nicht die neuen Archiv-R und Archiv-RW.

     

    Ich muss dann erst per Klick sagen:

     

     

    Alle Berechtigungseinträge für untergeordnete Objekte durch vererbbare Berechtigungseinträge von diesem Objekt ersetzen

     

    Schön wäre es natürlich, wenn das direkt im Skript durchgeführt wird.

     

    Leider hab ich im Netzt noch nichts dazu gefunden.

     

    Hat jemand eine Idee dazu ?

     

     

    Danke schon einmal

  4. Hallo zusammen,

     

    bei uns steht seit 2015 zu anfang jeden Jahres eine Iventur aller Verzeichnissberechtigungen an.

     

    Jedes Verzeichnis hat einen sog. Verantwortlichen.

     

    Diese sollen nun von uns eine Auswertung ihrer zugewiesenen Verzeichnisse bekommen.

     

    Sprich:
     

    1. Welche Gruppen sind per NFTS auf das Verzeichnis mit welchen Rechten berechtigt

    2. Wer ist Mitglied in diesen Gruppen

     

     

    Letztes Jahr haben wir diese Inventur per Powershell gemacht und dann alles per Hand in Excel sortiert nach Standorten etc.

     

    Kennt jemand vllt. eine Software-Lösung die uns in unserem Fall helfen kann ?

     

     

    Danke schon einmal

  5. Hallo zusammen,

     

    ich habe mir ein Skript geschrieben, welches mir File-Zugriffsgruppen ohne Mitglieder auflistet.

     

    R = Leserechte

    RW = Schreibrechte

    Get-ADGroup -Filter {Name -like "*-R"} -Properties Members | Sort-Object  | where { -not $_.Members} | select Name
    Get-ADGroup -Filter {Name -like "*-RW"} -Properties Members | Sort-Object | where { -not $_.Members} | select Name
    

    Funktioniert an sich schon einmal gut. Hier werden jetzt viele -R Gruppen aufgelistet, da häufiger Schreibrechte genutzt werden.

     

    Jetzt versuche ich gerade, die Abfrage so zu erweitern, dass ich nur Gruppen aufgelistet bekomme, wo sowohl -R als auch -RW keine Mitglieder hat um evtl. nicht mehr genutzte Verzeichnisse zu identifizieren.

     

    Leider hab ich noch nicht wirklich einen Ansatz, wie ich das Ganze umsetzten.

     

    Hat jemand einen Tipp für mich ?

     

     

    Vielen Dank schon einmal

  6. Mit

    FT -wrap -autosize

    wird nichts mehr abgeschnitten

     

     

    EDIT:

     

    Ich habe das Ganze jetzt doch anders gelöst, was ich sogar noch viel besser finde:

    Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties LastLogonTimeStamp,operatingSystem,DistinguishedName | Sort-Object | select-object Name,@{Name="lastLogonTimestamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},operatingSystem, DistinguishedName | export-csv -Delimiter ";" -path "$outputFile"
    
  7. Hallo zusammen,

     

    ich habe mir ein Skript geschrieben, welches alle inaktiven Computerobjekte auflistet die älter als X Tage sind.

     

    Führe ich das Skript in der ISE aus, ist die Ausgabe korrekt.

     

    Ich habe mir eine Verknüpfung erstellt um das Skript per Doppelklick ausführen zu können.

     

    Dann wird das Skript in der normalen Powershell.exe ausgeführt und dabei ist die AUsgabe nocht mehr korrekt da bei Längeren Einträgen die dem DistinguishedName einfach hinten etw. abgeschnitten wird.

     

    Kennt jemand das Phänomen?

     

     

    Danke schon einmal

     

     

    Skript:

    cls
    
    $host.ui.RawUI.WindowTitle = "Auflistung alle inaktiven Computerobjekte v0.2"
     
    Write-Host -ForegroundColor Yellow  "Bitte Zeitspanne für die Abfrage einebeben"
    
    Write-Host
    
    Write-Host -ForegroundColor Yellow "(in Tage - Format: XX z.B. 02 für 2 Tage): " -NoNewline
    
    $DaysInactive = Read-Host
    
    $time = (Get-Date).Adddays(-($DaysInactive))
    
    
    
    if($DaysInactive -eq 0) {break}
    
    
    
    Write-Host ""
    
    Write-Host ""
    
    Write-Host -ForegroundColor Cyan "Bitte Speicherort auswählen"
    
    sleep 1
    
    Write-Host ""
    
    
    
    #Speicherort abfragen
    
    Function Get-SaveFile($initialDirectory)
    
    {
    
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
    
    Out-Null
    
    
    
    $SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
    
    $SaveFileDialog.initialDirectory = $initialDirectory
    
    $SaveFileDialog.filter = "CSV-Datei (*.csv)| *.csv"
    
    $SaveFileDialog.ShowDialog() | Out-Null
    
    $SaveFileDialog.filename
    
    }
    
    
    
    
    
    # open dialog box to select the .nessuss file.
    
    $OutputFile = Get-SaveFile
    
    
    
    Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties LastLogonTimeStamp,operatingSystem,DistinguishedName | Sort-Object | select-object Name,@{Name="lastLogonTimestamp"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},operatingSystem,DistinguishedName | FT -AutoSize | Out-File "$outputFile" -Append
    

    Verknüpfung:

    Ziel: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "& '\\xxx\yyy\zzz\Abfrage AD inaktive ComputerObjekte.v0.2.ps1'"
    Ausführen in: C:\Windows\System32\WindowsPowerShell\v1.0\
    
  8. Moin,

     

    ob eine Batch mit solch einer Schleife wirklich etwas Gutes ist?

     

    Wie stellt sich denn ein einmaliger Lauf in einer Eingabeaufforderung dar?

     

    Also wenn ich das Script teste und die Batch ausführe mit eingestecktem LAN Kabel und aktiviertem W-LAN habe ich folgendes Ergebnis:

     

     

    LAN-Verbindung ist aktiv
    WLAN aus
    

     

    in dieser Schleife bleibt das Skript hängen auch wenn ich das LAN Kabel entferne

  9. Hallo zusammen,

    wenn ich mit meinem Notebook per W-LAN verbunden bin und dann ein LAN Kabel einstecke, läuft der Traffic trotzdem weiter über WLAN, obwohl ich die LAN-Verbindung als erste Verbindung eingerichtet habe.

    Jetzt wollte ich ein kurzes Script schreiben, welches dauerhaft im Hintergrund läuft und prüft welches Interface verbunden ist.

    Sprich: LAN verbunden -> WLAN ausschalten / LAN nicht verbunden -> WLAN anschalten.

    Iwo ist aber noch ein Fehler, auf jeden Fall merkt das Script nicht, dass ich das LAN Kabek entferne und die IP 192.168.4.6 nicht mehr erreichbar ist.

     

    @echo off
    title LAN_WLAN_Umschaltung 
    
    :check
    cls 
    
    ::LAN Interface 
    ping -n 1 192.168.4.6 | find /i /c "TTL" >nul 
    if %ERRORLEVEL% == 0 ECHO LAN-Verbindung ist aktiv 
    if %ERRORLEVEL% == 0 goto wlan_aus 
    
    ::WLAN Interface 
    ping -n 1 192.168.4.7 | find /i /c "TTL" >nul 
    if %ERRORLEVEL% == 0 ECHO WLAN-Verbindung ist aktiv 
    if %ERRORLEVEL% == 0 goto check 
    goto wlan_an 
    
    
    :wlan_aus 
    ECHO WLAN aus
    ping -n 1 192.168.4.7 | find /i /c "TTL" >nul 
    if %ERRORLEVEL% == 0 netsh interface set interface W-LAN disabled 
    goto check 
    
    
    :wlan_an 
    ECHO WLAN an
    netsh interface set interface W-LAN enabled 
    goto check  
    
  10. Hallo zusammen,

     

    bei uns steht gerade zur Diskussion alle änderungen von Gruppenmitglieschaften im AD zu loggen, damit man sehen kann, welcher User diese Änderung durchgeführt hat.

    Fileberechtigungen werden über Gruppen zugewiesen. Das ist der Hintergrund.

     

    Ist sowas generell möglich und wenn ja, was würde das für die Domain Controller bedeuten? Mehr Last, größeer Logs etc?

     

    Hat jmd Erfahrungen damit und hat eion Paar Tips über ?

     

     

    Vielen Dank

  11. Naja, wenn man sich da von vornerein auf eine einheitliche Namenskonventionen einigt, kann man die Computerkonten in der mit redircmp umgeleiteten OU lassen und dann per Task an den gewünschten Ort verschieben.

    Alternativ benötigt der User wie geschrieben mehr Rechte.

     

    Wir verwenden natürlich eine Namenskonvention, nur ist das Computerobjekt ja schon erstellt, bevor ich den Server in AD aufnehmen möchte.

     

    Bleibt in meinen Augen also nur, dem User die entsprechenden Recht zu geben. Wobie ich nochmal hilfe benötige

  12. Wieso hat ein Computer kein Kennwort? ;) Achso das war ne frage. Na dann: doch natürlich hat ein computerkonto ein Passwort.

     

    Ich kann das Konto zurücksetzen, aber kein Passwort.

     

    Ist auch egal, denn das behebt ja nicht das Problem mit den fehlenden Berechtigungen. Denn wenn ich erst das Konto zurücksetzen muss, wenn ich es per Skript erstellt habe, ist das auch umständlich, sofern ich das nicht direkt als letzten Schritt im Skript machen kann

  13. Ich würde mal das Kennwort des Computerkontos zurücksetzen und das Konto deaktivieren. Danach nochmals testen.

     

    1. Wie soll ich beim Computerkonot das PW zurücksetzten ? Ein COmputerobjekt hat doch gar kein PW ?

    2. Das Computerobjekt war ja deaktiviert, da ich den TEstserver aus der AD genommen habe um die Aufnahme mit dem neu erstellten User zu testen

  14. Hi,

     

    mit "redircmp" kannst du bestimmen, wo neue Computerkonten landen sollen. Mit "redirusr" wäre das auch für die User machbar.

     

    Gruß

    Jan

     

    Die Server landen immer in Unterschiedlichen OUs -> Server : Stanbdort A / Standort B / Standort C

     

    Dies wird alles durch ein Powershellscript geregelt.

     

    Mein neuer User muss jetzt nur das Recht haben, einen Server mit einem bestehendem AD-COmputerobjekt zu verbinden

  15. Geht es denn, wenn Du das Computer-Object vorher löschst? Wenn ja, denke mal scharf nach ;) Erstellen <> Bearbeiten.

     

    wenn ich das objekt lösche, wird es durch den User neu erstellt, aber in der Standard-OU "Computer".

     

    Wenn ich die Rechte für die gewünschte OU "Server" bearbeiten möchte, hab ich nur die Möglichkeit zwischen "Computer-Objekt löschen" oder "Computer-Objekt erstellen".

     

    Das Recht zum bearbeiten finde ich jetzt nicht wirklich.

  16. Hallo zusammen,

     

    ich habe für unsere VMware Umgebung einen User erstellt, der einen Server in die AD aufnhemen soll.

     

    Bei uns wird zuerst ein Skript ausgeführt (mit Domain-Admin User), welches die Berechtigungsgruppe sowie das Computerobjekt in der gewünschten OU erstellt.

     

    Dann wir das VMware Template ausgerollt wo der o.g. User im Sysprep hinterlegt ist.

     

    Ich hab das ganze jetzt einmal getestet, in dem ich einen Test-Server aus der AD entfernt habe (ohne das Computerobjket zu löschen) und ihn nun mit dem neuen User wieder ins AD aufnehmen wollte.

     

    Der User hat bisher die Rechte nach folgender Anleitung bekommen:

    http://prajwaldesai.com/allow-domain-user-to-add-computer-to-domain/

     

    Jetzt bekomme ich bei der versuchten Aufnahme folgende Fehlermeldung:

     

    Der Mitgliedschaftsvorgang ist fehlgeschlagen. Mögliche Ursache hierfür könnte sein, dass ein vorhandenes Computerkonto namens "XXX" zuvor mit anderen Anmeldeinformationen erstellt wurde. Verwenden Sie einen anderen Computernamen, oder wenden Sie sich an den Administrator, um sämtliche veralteten in Konflikt stehenden Konten zu entfernen. Fehler: Zugriff verweigert
    

     

    Sie also so aus, dass dem User Rechte fehlen. Jetzt ist die Frage, welches Recht der User benötigt, um das bestehende Conputerobjekt berarbeiten / verwalten zu können.

     

    UAC und Firewall sind deaktiviert.

     

     

     

    Danke und Gruß

     

    Kuddel

  17. Habe es jetzt wie folgt gelöst:

     

    Aufgabe auswählen:

     

    Write-Host
    Write-Host -ForegroundColor Yellow " +++ Aufgabe wählen +++"
    Write-Host
    Write-Host " (1) EX1 freiräumen"
    Write-Host " (2) EX2 freiräumen"
    Write-Host " (3) Datenbanken verteilen"
    Write-Host
    Write-Host " (0) Abbrechen"
    Write-Host
    Write-Host "Eingabe: " -ForegroundColor Yellow -NoNewline
    $aufgabe = Read-Host
    if($aufgabe -eq 0) {break}
    

     

    Check auf welchem Server die DB liegt und dann falls nötigt der Move Befehl

     

    if ($aufgabe -eq 1) {
    #DB-AB
    $db_ab = Get-Mailboxdatabase -Identity DB-AB
    $db_ab_server = $db_ab.server
    if($db_ab_server -ne "EX2") {Move-ActiveMailboxDatabase DB-AB -ActivateOnServer EX2}
    ...
    }
    
  18. Moin,

     

    wäre es in deinem Szenario nicht einfacher, in einer Schleife alle Datenbanken des Servers, der leergeräumt werden soll, auf den anderen zu verschieben?

    Dann liest du einfach alle Datenbanken des betreffenden Servers aus und lässt die verschieben.

     

    Und noch einfacher dürfte es per Maintenance Mode gehen.

    [Exchange 2013 Maintenance mode - Exchange World - Site Home - TechNet Blogs]

    http://blogs.technet.com/b/nawar/archive/2014/03/30/exchange-2013-maintenance-mode.aspx

     

     

    Gruß, Nils

     

    Moin Nils,

     

    danke für die Antwort. Den Ansatz, den ganzen Server leer zu räumen, habe ich gar nicht so bedacht. Muss ich mir mal Gedanken zu machen ;-)

     

    Den Maintenance Mode schaue ich mir auch mal an. Vllt. ist das ja auch was für mein Szenario.

     

     

    Danke und Gruß

  19. Hi,

    Du hast jetzt zwei Möglichkeiten:

    a-tens) du machst so weiter und wirst unweigerlich im VersionsChaos der Skripterei enden. Je mehr Skripte, je mehr Skripter umso schneller

    b-tens) du baust dir so schnell wie möglich ein Repository auf. Da gibt es beispielsweise das freie Subersion-SVN zum Eigenbetrieb als Client/ Serverlösung oder auch Cloudlösungen wie bitbucket.org (kostet entweder gar nichts für dich oder wenig)

    Damit

    • liegen deine Skripte gesichert an einer definierten Stelle,
    • sind Änderungen personenbezogen nachvollziehbar,
    • sind alte Versionen können wiederhergestellt werden
    • mehrere Personen können gleichzeitig an einem Skript entwickeln
    • defniertes Backup
    • je nach Lösung hast du dann auch einen Überblick über deine Skripte mit dabei

    Ich kann dir nur bei dem von dir beschriebenen Einsatzszenario raten, investiere etwas Zeit für ein Repository/ VersionControllsystem zur Ablage deiner Skripte. Du bekommst die Zeit später 100-fach zurück!

     

    blub

     

    1. Ich bin von uns 4 Admins der einzige der die Scripte schreibt

    2. Ich arbeite mit Versionsnummern (v.01. etc). Ich habe bisher noch keine Notwendigkeit für ein Repository gesehen

    Also der Starten per Website funktioniert.

     

    Der IE fragt mich jetzt jedes mal, wenn ich auf der Link zur *.lnk Datei klicke, ob ich Speicher, speichern unter oder öffnen möchte.

     

    Kann man dem IE irgendwie sagen, dass ich diesen dateityp immer öffnen möchte ?

     

     

    Danke und Gruß

  20. Hallo zusammen,

     

    ich bin gerade dabei ein Script zu schreiben um unsere Exchange Mail Datenbanken vom einen auf den anderen Server zu schwenken, wenn man z.B. einen Server booten möchte / muss.

     

    Dazu lasse ich mir alle DBs mit inkl. Server anzeigen

    Get-MailboxDatabase | Select Name, Server | ft
    

    Nun kann ich sehen welche DBs ich schwenken muss.

     

    Dementsprechen kommt jetzt ein Abfrage welche DBs geschwenkt werden sollen

    Write-Host -ForegroundColor Yellow "Welche Datenbank soll verschoben werden ?"
    
    Write-Host
    
    Write-Host " (1) DB-AB"
    
    Write-Host " (2) DB-CD"
    
    Write-Host " (3) DB-EFG"
    
    Write-Host " (4) DB-HIJ"
    
    Write-Host " (5) DB-KL"
    
    Write-Host " (6) DB-MN"
    
    Write-Host " (7) DB-OQPR"
    
    Write-Host " (8) DB-S"
    
    Write-Host " (9) DB-TUVW"
    
    Write-Host "(10) DB-XYZ"
    
    Write-Host "(11) DB-PublicFolders"
    
    Write-Host
    
    Write-Host " (0) Abbrechen"
    
    Write-Host
    
    Write-Host "Eingabe: " -ForegroundColor Yellow -NoNewline
    
    $db_auswahl = Read-Host
    

    Jetzt würde ich gerne irgendwie den aktiven Server auslesen und somit automatisch den andren Server im Movebefehl eintragen, sodass ich nicht jedes mal den Zielserver angeben muss, sondern dieser automatisch gesetzt wird. Leider hab ich ich bisher noch keine Idee, wie ich das mache.

    if (db_auswahl -eq 1) {
    Move-ActiveMailboxDatabase DB-AB -ActivateOnServer $zielserver
    Get-mailboxDatabase -Identity "DB-AB" | Select Name, Server
    }
    

    Kann man irgendwie, nachdem man eine DB verschoben hat, wieder zum Anfang springen, oder muss ich jedes Mal das Script neu starten ?

     

     

    Danke schoneinmal

     

     

     

     

     

  21. Hi Kuddel.

     

    Die wohl einfachste Lösung, zumindest die, die mir aus dem Stand einfällt:

    Bastel Dir in Word (oder mit der von Dir bevorzugten Textverarbeitung) ein Formular mit eingebetteten hyperlinks und speichere es im html-Format.

    Praktischerweise kannst Du dann auch gleich noch eine Beschreibung unterbringen, falls die von Dir gewählten Dateinamen nicht wirklich aussagekräftig sind.

     

    ciao und 'nen angenehmen Freitag

    M.

     

    Super, auf die Idee bin ich gar nicht gekommen. Reicht für meine Zweke auf jeden Fall aus

  22. Hallo zusammen,

     

    für die Userverwaltung (Erstellen, Deaktivieren etc) in unserem AD, habe ich mir einige Powershell-Scripte geschrieben, die ich im Moment über einzelne Verknüpfungen auf meinem Desktop per Doppelklick starte.

     

    Ich möchte mir nun irgendwie eine Übersicht erstellen, wo alle Scripts aufgeführt sind und von dort aus gestartet werden können.

     

    Am einfachsten wäre eine HTML Seite mit Links zu den Scripts.

     

    Hat jmd. Erfahrungen mit solch Übersichten ?

     

    Bin für jeden Idee offen.

     

    Danke schon einmal

×
×
  • Neu erstellen...