complex
Goto Top

Auswahl zweier Variablen zu einer zusammenführen

Moin miteinander,

und wieder eine Frage bezüglich Powershell:
Ich habe das Problem, dass ich gerade an einem script arbeite, welches dem Benutzer eine Auswahl bietet. und die Auswahl soll in eine Variable gesetzt werden.

Beispiel:

function domain {
Write-Host -ForegroundColor Green "1) Domain xyz.banane.com"  
Write-Host -ForegroundColor Green "2) Domain zzz123.banane.com"  
	
$uinput = Read-Host "Bitte Domain 1 oder 2 auswählen"  
	Switch ($uinput)
	{
		1 {domain1}
		2 {domain2}
	}	
		
function domain1 {
	$domain = xyz.banane.com
	}
	
function domain2 {
	$domain = zzz123.banane.com
	}

Später soll die Abfrage als variable $Domain gesetzt werden...z.B:

function kontoaktivieren {
Get-ADUser -Filter {SamAccountName -like $user} -Server $domain | Set-ADUser -Enabled $true
	}

wie kann ich das realisieren?

Vielen Dank für eure Antworten.


Grüße,
Complex

Content-Key: 251284

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

Ausgedruckt am: 28.03.2024 um 20:03 Uhr

Mitglied: colinardo
colinardo 08.10.2014 aktualisiert um 10:16:44 Uhr
Goto Top
Hallo complex,
hast du die "Functionitis" face-wink ?
Inzwischen solltest du die Variable-Scopes kennen face-wink, hast du ja schon in deinen vergangenen Posts genutzt.
http://technet.microsoft.com/de-de/library/hh847849.aspx

Btw solltest du weniger Funktionen für solch simple Aufgaben anlegen und stattdessen dies in einer Funktion zusammenfassen, Funktionen können auch Parameter übergeben werden, so sind sie dann universell verwendbar und du musst nicht immer mit Script-Variablen und Scopes hantieren: http://technet.microsoft.com/en-us/library/hh847743.aspx

Grüße Uwe
Mitglied: complex
complex 08.10.2014 um 10:34:40 Uhr
Goto Top
Ja, die "Functionitis" ist tief bei mir verankert :D
das Problem ist, dass ich vor 5 Wochen das erste Mal Powershell geöffnet habe und deswegen nur mit vorhandenem Wissen scripten kann (bin im Geschäft, deswegen leider nicht all zu viel zeit um mir Neues zum Thema Powershell anzueignen face-sad ).

Danke für das Stichwort Variable-Scopes - bisher verstehe ich nur Bahnhof - aber es wird - Stück für Stück.

Grüße,

Michael
Mitglied: complex
complex 08.10.2014 aktualisiert um 10:46:34 Uhr
Goto Top
oder man macht es sich einfach:

function domain {
Write-Host -ForegroundColor Green "1) Domain xyz.banane.com"  
Write-Host -ForegroundColor Green "2) Domain zzz123.banane.com"  

	$uinput = Read-Host "Bitte Domain 1 oder 2 auswählen"  

	if ($uinput -eq "1")  
	{$domain = "xyz.banane.com"}  
	else
	{$domain = "zzz123.banane.com"}  
}
face-smile
Mitglied: colinardo
colinardo 08.10.2014 aktualisiert um 10:50:49 Uhr
Goto Top
Also du kannst es so machen:
function choosedomain {
    Write-Host -ForegroundColor Green "1) Domain xyz.banane.com"  
    Write-Host -ForegroundColor Green "2) Domain zzz123.banane.com"  

    $uinput = Read-Host "Bitte Domain 1 oder 2 auswählen"  
    Switch ($uinput)
    {
	    1 {$script:domain = 'xxx.domain.de'}  
	    2 {$script:domain = 'yyy.domain.de'}  
    }

}
so ist die Variable $script:domain in deinem ganzen Script verfügbar, ansonsten ist sie nur Funktionslokal verfügbar.

Du solltest wie geschrieben Funktionen verallgemeinern und nicht von Variablen aus dem Script abhängig machen, dies machst du mit Parametern. Deine letzt genannte Funktion könntest du also so schreiben:
function kontoaktivieren ($user,$domain) {
    Get-ADUser -Filter {SamAccountName -like $user} -Server $domain | Set-ADUser -Enabled $true
}
Aufrufen kannst du dann die Funktion mit deinen lokalen Variablen die du gerade in deiner Function zur Verfügung hast:
kontoaktivieren $lokale_uservariable $lokaleDomainvariable
in der Funktion verwendest du dann die Parametervariablen, und schon ist die Funktion unabhängig face-wink Das ist der eigentliche Zweck einer Funktion.
Mitglied: SeriousEE
SeriousEE 08.10.2014 um 14:21:59 Uhr
Goto Top
Ich schmeiße gerne die Daten in ein array und lasse den Benutzer den Index auswählen:

function choosedomain { 
  [array]$myarr = "xyz.banane.com","zzz123.banane.com"  
  for ($i=0; $i -lt $myarr.Count; $i++) {
    Write-Host -ForegroundColor Green $i":" $myarr[$i]  
  }
  $uinput = Read-Host "Bitte Domain auswählen"   
  return $myarr[$uinput]
}

$retval = choosedomain 
Write-Host $retval