none
Neue OU Struktur anlegen - wie? RRS feed

  • Frage

  • Hallo

    Folgendes: 

    aus einer bestehenden OU Struktur (mit mehr als 500 verschaltelten OUs) hole ich mir per: 

    get-adorganizationalunit -Filter 'Name -like "*"' | Select -Expandproperty DistinguishedName > c:\test.txt

    alle bestehenden OUs heraus und packe die in eine Textdatei

    das ganze sieht dann so aus:

    OU=Anwender,OU=mail,OU=abc,OU=ads
    OU=KIS1,OU=Anwender,OU=mail,OU=abc,OU=ads

    Jetzt möchte ich z.B. mit:

    foreach ($name in (get-content C:\temp\Names.txt))
    {
        new-adorganizationalunit $Name -path "DC=FABRIKAM,DC=COM"
    }

    die ganzen OUs wieder neu anlegen. Das der Forestname sich geändert hat Absicht

    Die neuen OUs sollen quasi mit dem gesamten alten Namen in der neuen Struktur angelegt werden.

    Das klappt auch (nicht) denn lt. dem Beispiel soll ja KIS1 als Unter-OU von Anwender angelegt werden. Nun aber baut das Script die beiden parallel

    Meine Frage:

    Der Name steht in der txt Datei IMMER an 1. Stelle

    Der Pfad PLUS "DC=FABRIKAM,DC=COM"

    ab der 2. Stelle in der txt Datei

    Meine Frage: wie kann ich das jetzt zusammenstricken?

    Viele Grüße

    Lutz

    
    

    Montag, 5. Februar 2018 12:26

Antworten

Alle Antworten

  • Hallo Lutz,

    Habe das auf die Schnelle wie folgt gelöst (allerdings ungetestet):

    $tempName = ""
    get-content -Path "C:\temp\Names.txt" | foreach {
    
        if($tempName -ne $null){
            new-adorganizationalunit $tempName -path $_
            $tempName = ""
        }
        else{
            $tempName = $_
        }
    }

    Klappt das?

    Gruss
    Tobias

    Montag, 5. Februar 2018 12:43
  • > Die neuen OUs sollen quasi mit dem gesamten alten Namen in der neuen Struktur angelegt werden.

    Da mußt Du doch nicht das Rad neu erfinden :-))

    https://www.lmgtfy.com/?q=powershell+create+nested+ous+from+csv

    (Ich würde es mit dem 4. Treffer versuchen.)

    Montag, 5. Februar 2018 12:46
  • Hallo

    Ich erhalte dieses hier:

    New-ADOrganizationalUnit : Cannot bind argument to parameter 'Name' because it is an empty string.
    At C:\Users\lrahe\Documents\test.ps1:5 char:34
    +         new-adorganizationalunit $tempName -path $_
    +                                  ~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [New-ADOrganizationalUnit], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.ActiveDirectory.Manageme
       nt.Commands.NewADOrganizationalUnit

    New-ADOrganizationalUnit : Cannot bind argument to parameter 'Name' because it is an empty string.
    At C:\Users\lrahe\Documents\test.ps1:5 char:34
    +         new-adorganizationalunit $tempName -path $_
    +                                  ~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [New-ADOrganizationalUnit], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.ActiveDirectory.Manageme
       nt.Commands.NewADOrganizationalUnit

    Schön knallig in rot :-)

    Viele Grüße

    Lutz

    Montag, 5. Februar 2018 13:59
  • Mein Fehler, hatte "Stelle" als "Zeile" missinterpretiert.

    > Das klappt auch (nicht) denn lt. dem Beispiel soll ja KIS1 als Unter-OU von Anwender angelegt werden. Nun aber baut das Script die beiden parallel

    Das verstehe ich nicht ganz. Hast Du allenfalls einen Screenshot der zeigt, wie die beien OUs paralell erstellt werden?

    Montag, 5. Februar 2018 14:25
  • Hier bitte sehr

    Das gleiche Ergebniss übrigens wenn ich nstelle von OU= das ersetze durch einen "."

    Montag, 5. Februar 2018 14:32
  • Dazu musst Du zuerst den korrekten Pfad sowie den Namen ermitteln.

    Klappt das so?

    $basePath = "DC=FABRIKAM,DC=COM"
    get-content -Path "C:\temp\Names.txt" | foreach {
    
        $name = $_ -replace 'OU=([\d\w]+),(.*)','$1'
        $path = "$($_ -replace "OU=$name,"),$basePath"
        new-adorganizationalunit -Name $name -path $path
    }
    

    Dieses Script wird in einen Fehler laufen, wenn die"OU=KIS1,OU=Anwender,OU=mail,OU=abc,OU=ads" erstellt werden soll, "OU=Anwender,OU=mail,OU=abc,OU=ads" aber noch nicht existiert.

    Daher sollte im Input File jeweils mit dem kürzesten Pfad begonnen werden.

    Montag, 5. Februar 2018 15:02
  • > Daher sollte im Input File jeweils mit dem kürzesten Pfad begonnen werden.

    Ich würd das ja sinngemäß mit einer rekursiven Funktion "Get-ParentOU -createIfMissing" lösen :)

    Montag, 5. Februar 2018 15:51
  • Hallo und guten Morgen

    Ich hab im Output file den kürzeren Pfad zuerst genommen

    dennoch bekomme ich dann dieses hier:

    ew-adorganizationalunit : Directory object not found
    t C:\Users\lrahe\Documents\test3.ps1:6 char:5
         new-adorganizationalunit -Name $name -path $path
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       + CategoryInfo          : ObjectNotFound: (OU=Anwender,OU=...C=Nexus6,DC=Int:String) [New-ADOrganizationalUnit], A
      DIdentityNotFoundException
       + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
      icrosoft.ActiveDirectory.Management.Commands.NewADOrganizationalUnit

    ew-adorganizationalunit : Directory object not found
    t C:\Users\lrahe\Documents\test3.ps1:6 char:5
         new-adorganizationalunit -Name $name -path $path
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       + CategoryInfo          : ObjectNotFound: (OU=KIS1,OU=Anwe...C=Nexus6,DC=Int:String) [New-ADOrganizationalUnit], A
      DIdentityNotFoundException
       + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,M
      icrosoft.ActiveDirectory.Management.Commands.NewADOrganizationalUnit

    Das script selbst sieht so aus:

    $basePath = "DC=Nexus6,DC=Int"
    get-content -Path "C:\temp\Names.txt" | foreach {

        $name = $_ -replace 'OU=([\d\w]+),(.*)','$1'
        $path = "$($_ -replace "OU=$name,"),$basePath"
        new-adorganizationalunit -Name $name -path $path
    }

    Viele Grüße

    Lutz

    Dienstag, 6. Februar 2018 09:30
  • Hallo Lutz,

    Der Fehlermeldung beschreibt den Fehler doch ziemlich eindeutig : "Directory object not found".

    Bei "OU=KIS1,OU=Anwender,OU=mail,OU=abc,OU=ads" wird nur die OU: "KIS1" erstellt, der Ganze Rest: ",OU=Anwender,OU=mail,OU=abc,OU=ads,DCmy,DC=domain" muss bereits so als Pfad bestehen.

    Gruss,
    Tobias

    Dienstag, 6. Februar 2018 09:55