none
2 Domains durchsuchen, findet nur in einer Nutzer

    Frage

  • Hallo Leute. Ich möchte 2 Domänen durchsuchen nach vorhandenen Nutzern.

    In der Domäne in der ich mich befinde kein Problem, in der anderen allerdings, scheint er keine Nutzer zu finden. Aber hier erstmal mein Script:

    cls
    [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
    $title = 'Neuer Nutzer'
    $msg   = 'Bitte Anrede des neuen Nutzers eingeben:'
    $anrede = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
    $title = 'Neuer Nutzer'
    $msg   = 'Bitte Nachname des neuen Nutzers eingeben:'
    $username = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
    $title = 'Neuer Nutzer'
    $msg   = 'Bitte Vorname des neuen Nutzers eingeben:'
    $uservname = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
    $title = 'Neuer Nutzer'
    $msg   = 'Bitte Titel des neuen Nutzers eingeben:'
    $usertitel = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
    $title = 'Neuer Nutzer'
    $msg   = 'Bitte Abteilung des neuen Nutzers eingeben:'
    $abtei = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
    
    $uservname1 = $uservname.remove(1.30)
    $Account = $username+"."+$uservname1
    $User = Get-ADUser -server 1.domäne.de -Filter "sAMAccountName -eq '$Account'"
    
    if ($User -eq $Null)
    {
    $User = Get-ADUser -server 2.domäne.de -Filter "sAMAccountName -eq '$Account'"
    if($User -eq $Null)
    	{
    	$Account = $username+"."+$uservname1
    	}
    }
    else 
    {
    $uservname2= $uservname.remove(2.30)
    $Account = $username+"."+$uservname2
    
    $User = Get-ADUser -server 1.domäne.de -Filter "sAMAccountName -eq '$Account'"
    	
    	if ($User -eq $Null)
    	{
    		$User = Get-ADUser -server 2.domäne.de -Filter "sAMAccountName -eq '$Account'"
    		if($User -eq $Null)
    		{
    		$Account = $username+"."+$uservname2
    		}
    	}
    	else 
    	{
    	$uservname3= $uservname.remove(3.30)
    	$Account = $username+"."+$uservname3
    	$User = Get-ADUser -server 1.domäne.de -Filter "sAMAccountName -eq '$Account'"
    			if ($User -eq $Null)
    		        {
    			$User = Get-ADUser -server 2.domäne.de -Filter "sAMAccountName -eq '$Account'"
    			if ($User -eq $Null)
    			{
    			$Account = $username+"."+$uservname3
    			}	
    		}
    	else
    	{
    	[System.Windows.Forms.MessageBox]::Show(„Zu viele Nutzer mit gleichem Namen“,“Achtung!“,0)
    	}}
    }
    $account

    In der Domäne 1 findet er alle Nutzer und ändert entsprechend den $Account ab. Gibt es den Nutzer aber in der 2. Domäne dann ignoriert er dies völlig und bleibt bei einem Buchstaben vom Vorname.

    Ich weiß die Abfrage ist sicher sher schlecht und ineffektiv aber von Schleifen hab ich noch weniger Ahnung und ich dachte so lässt es sich am leichtesten lösen.

    Vielen Dank schon mal


    • Bearbeitet antenne1988 Mittwoch, 10. Januar 2018 13:48
    Mittwoch, 10. Januar 2018 13:47

Antworten

  • Habe das Ganze mal in eine Schlaufe gepaket

    $vorname = "Max"
    $name = "Muster"
    
    for($i = 1; $i -le 3; $i++) {
    
        $acount = "$name.$($vorname.remove($i,($vorname.Length -1)))"
        $user = Get-ADUser -server "domain1.tld" -Filter "samaccountname -eq '$account'"
    
        if($user -eq $null){
    
            write-Host "User $account in Domain 1 NICHT gefunden"
            $user = Get-ADUser -server "domain2.tld" -Filter "samaccountname -eq '$account'"
    
            if($user -eq $null){
                write-Host "User $account in Domain 2 NICHT gefunden"
            }
            else{
                write-Host "User $account in Domain 2 gefunden"
            }
        }
        else{
            write-Host "User $account in Domain 1 gefunden"
        }
    }

    Donnerstag, 11. Januar 2018 12:45

Alle Antworten

  • Weiß keiner etwas zu diesem Thema?
    Donnerstag, 11. Januar 2018 09:10
  • Hallo,

    Was soll mit dem Script genau erreicht werden?

    Ich denke, in einem ersten Schritt sollte das Ganze etwas vereinfacht werden. So sollte es bspw. nicht nötig sein, Get-ADUser -server x.domäne.de -Filter "sAMAccountName -eq '$Account'" mehrmals aufzurufen sondern lediglich 1x für 1.domäne.de und 1x für 2.domäne.de

    Donnerstag, 11. Januar 2018 09:47
  • mit dem script soll überprüft werden ob der benutzername in domäne 1 ODER domäne 2 bereits verwendet wird, und ihn dann abändern, sollte er in einer der beiden vorhanden sein. nach dem abändern soll erneut überprüft werden, ob dieser nutzer bereits existiert und dann ebenfalls wieder abändern, sollte der nutzer in einer der beiden domänen vorhanden sein.
    Donnerstag, 11. Januar 2018 10:12
  • So müsste das Prüfen der User auf Vorhandensein eigentlich schon funktionieren:

    $user = Get-ADUser -server "domain1.tld" -Filter "samaccountname -eq 'myUser'"
    $credDomain2 = Get-Credential
    if($user -eq $null){
        write-Host "User in Domain 1 NICHT gefunden"
        $user = Get-ADUser -server "domain2.tld" -Filter "samaccountname -eq 'myUser'" -Credential $credDomain2
        if($user -eq $null){
            write-Host "User in Domain 2 NICHT gefunden"
        }
        else{
            write-Host "User in Domain 2 gefunden"
        }
    }
    else{
        write-Host "User in Domain 1 gefunden"
    }

    Für die Abfrage der Domäne 2 werden nun zustätzlich explizit Benutzername und Passwort abgefragt, falls dass das Problem ist.

    Hilft das weiter?


    • Bearbeitet TobyU Donnerstag, 11. Januar 2018 10:24
    Donnerstag, 11. Januar 2018 10:23
  • Ich möchte ein komplettes Script aufbauen, mit dem ich dann relativ einfach, neue Nutzer in der Domäne 2 anlegen kann. Daher vorher die Namensprüfung. Und es soll dann den Nutzernamen automatisch anpassen. Wenn es z.B. schon einen mustermann.m gibt, soll er also als nächstes mustermann.ma anlegen. daher die Prüfung auf bis zu 3 Stellen des Vornamens. Daher würde deine Abfrage zwar funktionieren, aber nur bis eine Stelle des Vornamens.
    Donnerstag, 11. Januar 2018 12:07
  • Habe das Ganze mal in eine Schlaufe gepaket

    $vorname = "Max"
    $name = "Muster"
    
    for($i = 1; $i -le 3; $i++) {
    
        $acount = "$name.$($vorname.remove($i,($vorname.Length -1)))"
        $user = Get-ADUser -server "domain1.tld" -Filter "samaccountname -eq '$account'"
    
        if($user -eq $null){
    
            write-Host "User $account in Domain 1 NICHT gefunden"
            $user = Get-ADUser -server "domain2.tld" -Filter "samaccountname -eq '$account'"
    
            if($user -eq $null){
                write-Host "User $account in Domain 2 NICHT gefunden"
            }
            else{
                write-Host "User $account in Domain 2 gefunden"
            }
        }
        else{
            write-Host "User $account in Domain 1 gefunden"
        }
    }

    Donnerstag, 11. Januar 2018 12:45
  • Die Schleife funktioniert zwar im Sinne, dass sie einen Nutzer findet, allerdings ändert es nix an der länge des Vornamens. Außerdem kommt ein Fehler mit "Unerwartetes Token "User" nach write-Host.... Obwohl das ja einfach nur eine Aussage ist die ja auch korrekterweise in Anführungszeichen steht. bei den anderen write-Host hat er auch keine Probleme.

    Nachtrag. Folgender Fehler tritt auf:

    • Bearbeitet antenne1988 Freitag, 12. Januar 2018 07:30
    Freitag, 12. Januar 2018 07:23
  • > Nachtrag. Folgender Fehler tritt auf:

    Hilft immer bei sowas, wenn Du den zugehörigen aktuellen Code mit postest. Weiß ja keiner, was genau Du abgetippt und/oder selbst geschrieben hast.

    Freitag, 12. Januar 2018 08:05
  • Hab den Code so übernommen. einzige Änderungen:

    Domänennamen angepasst also statt "domain1.tld" unsere Domäne. Ach ja und ein c bei Account hat gefehlt. Das hab ich natürlich ergänzt.

    Problem ist hier auch, dass er nur den Nachnamen übernimmt, und keinen Buchstaben vom Vorname, auch wenn es den Nutzer nicht gibt.

    Freitag, 12. Januar 2018 09:05
  • >      $acount = "$name.$($vorname.remove($i,($vorname.Length -1)))"

    $i wird hochgezählt - erst 1, dann 2, dann 3. Also muß das ".Length -1" auch passend runtergezählt werden - erst 1, dann 2, dann 3.
    Ab $i=2 versucht der Befehl nämlich, mehr zu entfernen als vorhanden ist. Und das führt zu der Fehlermeldung.

    Ich würde das auch nicht mit .remove lösen, sondern mit .Substring :-)

    $name.$($vorname.Substring(0,$i))

    Kennst Du den Powershell Debugger? Breakpoints setzen an interessanten Stellen, dann Variableninhalte anschauen.

    Freitag, 12. Januar 2018 10:16
  • Wenn ich "$name.$($vorname.Substring(0,$i))" verwende kommt keine Fehlermeldung mehr :) Allerdings ist der Benutzername dann mustermann.max, obwohl er ja mustermann.m sein sollte. 
    Freitag, 12. Januar 2018 11:53
  • > Wenn ich "$name.$($vorname.Substring(0,$i))" verwende kommt keine Fehlermeldung mehr :) Allerdings ist der Benutzername dann mustermann.max, obwohl er ja mustermann.m sein sollte.

    Ja weil es in der For-Schleife keinen Exit gibt, wenn der aktuell geprüfte Benutzer nicht gefunden wird... Also läuft sie durch bis $i=3, und Max hat 3 Buchstaben.

    Freitag, 12. Januar 2018 12:45
  • Gibts da einen Befehl für Exit? also zb. if -eq =$Null goto oder so ähnlich. also dass er die Schleife verlässt, sobald kein Nutzer gefunden wurde.
    Freitag, 12. Januar 2018 13:31
  • > Gibts da einen Befehl für Exit? also zb. if -eq =$Null goto oder so ähnlich. also dass er die Schleife verlässt, sobald kein Nutzer gefunden wurde.

    Ja, gibt es.

    http://lmgtfy.com/?q=powershell+exit+for+loop

    Freitag, 12. Januar 2018 13:36
  • ES FUNKTIONIERT!!!! ich habe einfach ein "break" ans Ende der If Bedingung gehängt und es klappt perfekt. VIELEN DANK Martin! Hast mir wahnsinnig geholfen.
    Freitag, 12. Januar 2018 13:37
  • An dich natürlich auch VIELEN DANK! :) Dein Code hat mir super geholfen.
    Montag, 15. Januar 2018 10:13