Powershell: automatisches anlegen von OUs

jannikx21
Goto Top
Hallo zusammen,

weil ich häufiger OU- Strukturen mit gleichem Aufbau erstellen muss, möchte ich das mit einem Skript automatisieren.
Dazu habe ich wie folgt angefangen:




#Erstelle OU-Struktur
param
(
[Parameter (Mandatory=$true)][String]$GKZ,
[Parameter (Mandatory=$true)][String]$VWtyp,
[Parameter (Mandatory=$true)][String]$VWname
)


#Erstelle Basis-OU
Function Erstelle-BasisOU
{
param
(
[String]$GKZ,
[String]$VMtyp,
[String]$VMname,
)

#Bilde Namen
$OUname = $GKZ+"-"+$VWtyp+"-"+$VWname
#Erstelle OU nach Vorgaben in der Hauptebene
New-ADOrganizationalUnit -Name $OUname -Path "DC=scd-lab,DC=intern"
}

#warte 30 Sekunden, damit die neue OU erkannt wird
Start-Sleep -Seconds 30

#Erstelle Unter-OU
Function Erstelle-UnterOU
{
#Bilde Namen
$UnterOUname = $GKZ+"-Benutzer"
#Erstelle Unter-OU innerhalb der Basis-OU
New-ADOrganizationalUnit -Name $UnterOUname -Path "OU=$OUname,DC=scd-lab,DC=intern"

}


Erstelle-BasisOU -GKZ $GKZ -VWtyp $VWtyp -VWname $VWname
Erstelle-UnterOU




Das Problem: der Teil mit der Unter-OU funktioniert nicht. Wenn ich das Skript durchlaufen lasse, wird die erste Funktion korrekt ausgeführt, Eine OU wird angelegt und der Wert der Variablen $GKZ, $VWname und $VWtyp kann abgefragt werden. die Variable $OUname ist danach hingegen leer, was ich komisch finde. Deswegen kann die zweite Funktion nicht ausgeführt werden. Ich glaube, dass ich einen Syntaxfehler in der fett markierten Zeile habe...

Kann mir da wer helfen?

Gruß Jannik

Content-Key: 1267864486

Url: https://administrator.de/contentid/1267864486

Ausgedruckt am: 29.06.2022 um 05:06 Uhr

Mitglied: Cloudrakete
Lösung Cloudrakete 16.09.2021 um 14:27:43 Uhr
Goto Top
Hi,

deine definierten Variablen sind immer nur in der Funktion selbst bekannt (eigentlich nutzt man u.A. deshalb Funktionen)

Du musst den Inhalt der Variable "$OUName" global für alle anderen Funktionen verfügbar machen:

Mitglied: SlainteMhath
Lösung SlainteMhath 16.09.2021 um 14:48:15 Uhr
Goto Top
Moin,

verwende doch bitte code-tags, dann wird's lesbarer.

Und dann musst du dich auch mal endscheiden ob VM oder VW :) face-smile

In der Funktion Erstelle-UnterOU ist $OUname nicht definiert und wird auch nicht übergeben, hat also keinen Inhalt

lg,
Slainte
Mitglied: jannikx21
jannikx21 16.09.2021 um 15:14:03 Uhr
Goto Top
Danke für die Antwort, macht Sinn mit $OUname... wie kann ich den Inhalt denn übergeben, bzw global bekannt machen?

Gruß Jannik
Mitglied: Cloudrakete
Lösung Cloudrakete 16.09.2021 aktualisiert um 15:26:35 Uhr
Goto Top
Zeile 5 in meiner ersten Antwort :=)
Ich hatte dir die Lösung schon serviert wenn man so will :D
Theoretisch kannst du den Block einfach einfügen (oder nur die Zeile) und dein Skript funktioniert.
Mitglied: jannikx21
jannikx21 16.09.2021 um 15:30:42 Uhr
Goto Top
haha stimmt Danke :-) face-smile
hab zudem noch rausgefunden, dass es funktioniert, wenn ich die Variabel als $global:OUname speichere
Mitglied: Cloudrakete
Cloudrakete 16.09.2021 um 15:32:28 Uhr
Goto Top
Ja, dass ist der Punkt, den ich meinte mit "global verfügbar" machen. Da gibt es verschiedene Wege das zu bewerkstelligen, deiner funktioniert auch, wie du schon gemerkt hast :) face-smile