Jump to content

MurdocX

Moderators
  • Gesamte Inhalte

    2.738
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von MurdocX

  1. Ich muss eine Möglichkeit schaffen, dass sich Anwender bei uns am System mit Ihren Windows Daten anmelden, ein Netzlaufwerk mit anderen Anmeldeinformationen (andere Domäne/keine Vertrauensstellung) Mappen und dabei einen Kennwortwechsel durchführen und das ganze nicht mittels manueller Gui Eingabe.

     

    Nur soll das Mappen der Laufwerke nicht manuell erfolgen, sondern beim Anmeldevorgang.

     

    Ich möchte es gern für die User so gestalten, dass Diese auf ein Icon im Startmenü klicken, das System das Laufwerk mappt und den Passwortwechsel abfragt (GUI oder CMD ist dabei egal) und anschließend das Laufwerk wieder trennt.

    Diese Prozedur sollen die User im Vorfeld durchziehen.

     

    Am Tag X werden dann alle nach Hause geschickt und der Datenumzug zum neuen System kann beginnen. Ab jetzt sollen die Netzlaufwerke, welche umgezogen sind, an die neue Stelle verweisen, welche Außerhalb unserer Domäne liegt.

     

    Ob die nun die Benutzerdaten in eine CMD eintragen oder sich ein Fenster öffnet (zum Wechsel) ist mir egal. Aber ich kann den Usern unmöglich zumuten manuell über die GUI das Laufwerk zu Mappen - das muss automatisch passieren.

     

    Daten werden umgezogen - verstanden

    Benutzer bekommen ein LW gemappt (autom.) - verstanden

    Benutzer sollen Ihr Passwort im vorhinein ändern - verstanden

     

    Nur in Kombination, die Logik - nicht verstanden

     

    Könntest du kurz erklären warum du das genau so machen möchtest? Warum wird ein Netzlaufwerk zur Passwortänderung gemappt und dann wieder getrennt?

  2. Was heißt denn "zu viel"? SystemState ist die richtige Richtung! Mit Ntdsutil kannst du Snapshots und ein "Backup" der DB erzeugen. Das ist aber nur EIN Teil den du benötigst. Hier ist z.B. das Sysvol noch nicht mit inbegriffen. 

     

    Im Fall des Falles ist ein SystemState Gold wert, glaub mir!... Egal wie groß. ;-)

  3. Guten Abend :)
     
    Hier erst mal eine Anleitung u. Infos für den CentralStore findest du hier: http://www.gruppenrichtlinien.de/artikel/central-store-fuer-administrative-vorlagen/
     
    "schon bei der Akutalisierung der Gruppenrichtlinien erhalte ich Fehlermeldungen."
    Welche hast du denn bekommen?
     
    "Muss ich die bestehenden Files überschreiben oder nur die Neuen hinzufügen?"
    Am besten entfernen und neu hinzufügen. Halte ich mal für die sicherste Variante.
     
    "Vorlagen öffnen will, erhalte ich Fehlermeldungen."
    Vermutlich hast du den Ordner im Sysvol nicht richtig angelegt. "PoliciesDefintions" -> "PolicyDefinitions" ;-)

     

    RSAT sollte am Besten in der unterstützten Version zum jeweiligen Betriebssystem zum Einsatz kommen. Für 2008 -> Windows Vista, 2008 R2 -> Windows 7, 2012 -> Windows 8, 2012 R2 -> Windows 8.1

  4. Ne so wird das nix...  ;)  Habe leider keine Zeit, deswegen werde ich Dir mal nur den Code in den Raum schieben... Den Rest musst du Dir aber erst mal selber anpassen!

     

    Ändere den Besitzer und passe Dir die Berechtigungen an wie du sie brachst und fertig ;-)

    $Permission = Get-ChildItem -Path 'C:\Test' | Get-Acl
    
    ForEach ($Obj in $Permission)
    {
        $objUser = New-Object  -TypeName System.Security.Principal.NTAccount -ArgumentList ("BESITZER") 
        $colRights = [System.Security.AccessControl.FileSystemRights]'Modify'
        $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit 
        $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None 
        $objType = [System.Security.AccessControl.AccessControlType]::Allow 
        $objACE = New-Object  -TypeName System.Security.AccessControl.FileSystemAccessRule  -ArgumentList ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType) 
        $acl = Get-Acl $FQPath
        $acl.AddAccessRule($objACE)
    }
    
  5. Erläuterung

     

    Das Skript prüft folgende Richtlinie: Nachname 6 Zeichen, Vorname 2 Zeichen. Es generiert aus Vor- und Nachname einen Benutzernamen und prüft diesen auf Richtlinienkonformität (vergleicht den aktuellen SamAccountName). Durch das Verändern der Variablen intLaengestrVorname und intLaengestrNachname kann Einfluss auf die Generierung genommen werden.

     

    Achtung: DOMAINCONTROLLER, ORAGANISATIONSEINHEIT, DOMÄNE und PFAD müssen noch angepasst werden!

     

    Viel Erfolg mit meinem Skript  :)

     

    Skript

    #requires -Version 1 -Modules ActiveDirectory
    # Deklaration
    [String]$strKonvention = ''
    [String]$strVorname = ''
    [String]$strNachname = ''
    [String]$SamAccountName = ''
    [Int]$MissigChars = 0
    [Int]$intLaengestrVorname = 2
    [Int]$intLaengestrNachname = 6
    
    
    # Abfrage der AD-Benutzer
    Write-Host -Object '[+] Informationen werden abgerufen. Bitte warten...' -ForegroundColor Yellow -NoNewline
    try
    {
        $ADUser = Get-ADUser -Filter {
            Name -like '*'
        } -Properties SamAccountName -AuthType Negotiate -Server 'DOMAINCONTROLLER' -ErrorAction SilentlyContinue -SearchBase 'OU=ORGANISATIONSEINHEIT,DC=DOMÄNE,DC=DOMÄNE'
        Write-Host -Object '[OK!]' -ForegroundColor Green
    }
    catch
    {
        Write-Host -Object "[ERROR] Fehler in der AD-Abfrage!`n$_" -ForegroundColor Red
        Exit
    }
    
    # Objektverarbeitung
    foreach ($User in $ADUser)
    {
        try
        {
            # Füllen der Variablen
            $strVorname = $User.GivenName
            $strNachname = $User.Surname
            $SamAccountName = $User.SamAccountName
    
            # Benutzernamen generieren
            If ( $strNachname.Length -ge $intLaengestrNachname )
            {
                # generiere
                $strKonvention = $strNachname.SubString(0,$intLaengestrNachname) + $strVorname.Substring(0,$intLaengestrVorname)
            }
    
            # Benutzernamen generieren
            If ( $strNachname.Length -lt $intLaengestrNachname )
            {
                # Berechne fehlende Zeichen
                $MissigChars = $intLaengestrNachname - ($strNachname.length)
                
                # generiere
                $strKonvention = $strNachname + ($strVorname.Substring(0,($intLaengestrVorname+$MissigChars)))
            }
        
            # Vergleiche die strKonvention mit dem Benutzerobjekt
            if ($SamAccountName -notlike $strKonvention)
            {
                Write-Host -Object "[!!] Unstimmigkeit gefunden! Vorname:'$strVorname', Nachname:'$strNachname', Erwartet:$strKonvention, Vorhanden:$SamAccountName" -ForegroundColor Yellow
                Out-File -FilePath 'PFAD' -Append -InputObject "[!!] Unstimmigkeit gefunden! Vorname:'$strVorname', Nachname:'$strNachname', Erwartet:$strKonvention, Vorhanden:$SamAccountName"
            }
        }
        catch
        {
            Write-Host -Object "[ERROR] $_"
        }
    }
    
    
  6.  

    Ziel ist es ein Austauschverzeichnis zu erstellen, in dem jeder Benutzer einen persönlichen Ordner hat und andere Personen Dateien in diesem Ordner erstellen dürfen.

    Jedoch beschränkt sich das Ganze nur auf das Erstellen, bereits dort vorhandene Dateien sollen nicht sichtbar sein.

     

    Ich verstehe das Ganze noch nicht so ganz.. In einem Austauschverzeichnis soll doch normal jeder Benutzer alles sehen, um die vom dem Kollegen abgelegte Dateien sich von dort herunterzuladen. 

    Hier sollen aber vorhandene Dateien nicht angezeigt werden?! Das musst du jetzt nochmal erklären  ;)

     

     

    Everyone -                  Special (Traverse Folder, list Folder, read attributes, create Folders) - This Folder only

     

    Warum nicht "Authentifizierte Benutzer" ? Sonst hast du afaik auch "Anonymous" mit an Board!

     

     

  7. Jeder Hinweis ist ein Hinweis zu viel, laut meiner Erfahrung ;-)

     

    Richtlinie

    Computerkonfiguration > Richtlinien > Administrative Vorlagen > Windows-Komponenten > Windows Update > "Keinen automatischen Neustart für geplante Installationen automatischer Updates durchführen, wenn Benutzer angemeldet sind" AKTIVIEREN

     

    Und dann, wie Sunny61 empfiehlt, die Updates um 12 Uhr installieren lassen und die Rechner gegen 22 Uhr ausschalten lassen. So verfahren wir übrigens auch.  :)

  8. Beispiele

     

    Aktueller Domaincontroller 2008 R2, zusätzlicher Domaincontroller 2012 R2

    - Schema-Update: Ja (Wird aber durch den Assistenten erledigt.)

    Nachtrag: "With Server 2012, Adprep has been integrated into the Active Directory Domain Services (AD DS) role installation process."

     

    Aktueller Domaincontroller 2012 R2, zusätzlicher Domaincontroller 2012 R2

    - Schema-Update: Nein

     

    Weitere Informationen

    http://www.faq-o-matic.net/2009/04/08/ad-schemaerweiterung-ein-paar-hinweise/

    http://social.technet.microsoft.com/wiki/contents/articles/13422.manual-schema-upgrade-for-windows-server-2012windows-server-2012-r2.aspx

  9. Hat super geklappt.

     

    Eine Anmerkung habe ich noch: Kann man alle umbenannten Gruppen noch iwie in ein Log schrieben zur kontrolle?

     

    Also das was in der Konsole grün hinterlegt ist ?

     

    Dann bin ich auch restlos zufrieden :-)

     

    Klar geht das ;-)

     

    Setze unter das "Write-Host" jeweils diesen Befehl "Out-File" und ersetze dabei "PFAD" durch den Dateipfad deines Logs und "TEXT" durch den Text der nach dem "Write-Host" jeweils steht.

     

    Out-File -FilePath 'PFAD' -Encoding utf8 -Append -InputObject "TEXT"

  10. Ok, hab´s noch angepasst. Jetzt wird alles geändert. SamAccountName, CN und Name  ;)

    Write-Host 'Gruppen werden erfasst...' -NoNewline
    $RW_Gruppen = Get-ADGroup -Filter {Name -like '*-RWCEMF'}
    $R_Gruppen = Get-ADGroup -Filter {Name -like '*-RF'}
    Write-Host '[OK]' -ForegroundColor Green
    
    foreach ($RWobj in $RW_Gruppen)
    {
        try
        {
            $RWName = (($RWobj).Name).Replace('RWCEMF','RW')
            Set-ADGroup -Identity $RWobj -SamAccountName $RWName
            Rename-ADObject -Identity $RWobj -NewName $RWName
            Write-Host "[+] $($RWobj.Name) wurde erfolgreich in $RWName umbenannt." -ForegroundColor Green
        }
        catch
        {
            Write-Host "[ERR] $($RWobj.Name) wurde nicht umbenannt.`n$_" -ForegroundColor Red
        }
    }
    
    foreach ($Robj in $R_Gruppen)
    {
        try
        {
            $RName = (($Robj).Name).Replace('RF','R')
            Set-ADGroup -Identity $Robj -SamAccountName $RName
            Rename-ADObject -Identity $Robj -NewName $RName
            Write-Host "[+] $($Robj.Name) wurde erfolgreich in $RName umbenannt." -ForegroundColor Green
        }
        catch
        {
            Write-Host "[ERR] $($Robj.Name) wurde nicht umbenannt.`n$_" -ForegroundColor Red
        }
    }
    
  11. Hi Kuddel,

     

    ich habe für Dich ein PS-Skript geschrieben um Gruppen umzubenennen. Ist getestet und funktioniert. Viel Erfolg ;-)

    Write-Host 'Gruppen werden erfasst...' -NoNewline
    $RW_Gruppen = Get-ADGroup -Filter {Name -like '*-RWCEMF'}
    $R_Gruppen = Get-ADGroup -Filter {Name -like '*-RF'}
    Write-Host '[OK]' -ForegroundColor Green
    
    foreach ($RWobj in $RW_Gruppen)
    {
        try
        {
            $RWName = (($RWobj).Name).Replace('RWCEMF','RW')
            Rename-ADObject -Identity $RWobj -NewName $RWName
            Write-Host "[+] $($RWobj.Name) wurde erfolgreich in $RWName umbenannt." -ForegroundColor Green
        }
        catch
        {
            Write-Host "[ERR] $($RWobj.Name) wurde nicht umbenannt.`n$_" -ForegroundColor Red
        }
    }
    
    foreach ($Robj in $R_Gruppen)
    {
        try
        {
            $RName = (($Robj).Name).Replace('RF','R')
            Rename-ADObject -Identity $Robj -NewName $RName
            Write-Host "[+] $($Robj.Name) wurde erfolgreich in $RName umbenannt." -ForegroundColor Green
        }
        catch
        {
            Write-Host "[ERR] $($Robj.Name) wurde nicht umbenannt.`n$_" -ForegroundColor Red
        }
    }
    
    

    NACHTRAG: Bitte beachte, dass nur das der Objekt-Name ohne sAMAccountName geändert wird! Falls das nicht gewünscht ist, muss das Skript nochmal leicht modifiziert werden.

  12. Probier mal das ;-)

     

    Das Wort "Setup" durch deine Gruppe ersetzen und "D:\" durch den Netz oder Laufwerkspfad und los gehts...

    $Berechtigungen = Get-ChildItem -Path 'D:\' -Recurse -ErrorAction SilentlyContinue | Get-Acl
    
    Foreach ($obj in $Berechtigungen){
    
        if (($obj.Access).Identityreference -like '*Setup*')
        {
            Out-File -FilePath 'D:\Out.log' -InputObject $obj.PSPath
        }
    
    }
    
×
×
  • Neu erstellen...