jannikx21
Goto Top

Powershell: automatisches anlegen von OUs

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

Printed on: April 26, 2024 at 12:04 o'clock

Member: Cloudrakete
Solution Cloudrakete Sep 16, 2021 at 12:27:43 (UTC)
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:

#Bilde Namen
$OUname = $GKZ+"-"+$VWtyp+"-"+$VWname  
#Erstelle OU nach Vorgaben in der Hauptebene
New-ADOrganizationalUnit -Name $OUname -Path "DC=scd-lab,DC=intern"  
return $OUname
}
Member: SlainteMhath
Solution SlainteMhath Sep 16, 2021 at 12:48:15 (UTC)
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
(
[String]$GKZ,
[String]$VMtyp,
[String]$VMname,
)

#Bilde Namen
$OUname = $GKZ+"-"+$VWtyp+"-"+$VWname  

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

lg,
Slainte
Member: jannikx21
jannikx21 Sep 16, 2021 at 13:14:03 (UTC)
Goto Top
Danke für die Antwort, macht Sinn mit $OUname... wie kann ich den Inhalt denn übergeben, bzw global bekannt machen?

Gruß Jannik
Member: Cloudrakete
Solution Cloudrakete Sep 16, 2021 updated at 13:26:35 (UTC)
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.
Member: jannikx21
jannikx21 Sep 16, 2021 at 13:30:42 (UTC)
Goto Top
haha stimmt Danke face-smile
hab zudem noch rausgefunden, dass es funktioniert, wenn ich die Variabel als $global:OUname speichere
Member: Cloudrakete
Cloudrakete Sep 16, 2021 at 13:32:28 (UTC)
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