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-ID: 1267864486

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

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

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:

#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
}
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
(
[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
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
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.
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
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