saschard
Goto Top

Powershell: Parameter einer Funktion soll eine Funktion aufrufen

Hallo zusammen,

mein Ziel ist es die Zeitdauer einer Prozesses zu ermitteln. Dafür ist die folgende Funktion zuständig:
	function Test {	
		Sleep -Seconds 5
	}
	function Zeitberechnen($Arg){
		$StartProcess = date
		$Arg
		$EndProcess = date
		$ProcessDifference = $EndProcess - $StartProcess
		Write-Host "$($ProcessDifference.Hours)h:$($ProcessDifference.Minutes)m:$($ProcessDifference.Seconds)s:$($ProcessDifference.Milliseconds)ms"  
	}
Zeitberechnen -Arg (Test)
Leider wird die Funktion Test vor der Funktion Zeitberechnen aufgerufen. Jemand eine Idee wie man das realisieren kann?

Danke und Gruß, Sascha

Content-ID: 290701

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

114757
Lösung 114757 11.12.2015 aktualisiert um 16:27:21 Uhr
Goto Top
function test {sleep(5)}

function ZeitBerechnen($arg){
    write-host "Mach hier was"  
    iex $arg
}
ZeitBerechnen -arg "test"  

iex = Alias für Invoke-Expression

Aber wozu dieser Umweg ? Du kannst die Funktion doch direkt aus der anderen Funktion aus aufrufen ...

Gruß jodel32
SaschaRD
SaschaRD 11.12.2015 um 16:30:51 Uhr
Goto Top
Hallo Jordel,

ich verwende die Funktion ZeitBerechnen mehrfach; dabei übergebe ich als Parameter stets eine andere Funktion die einen Prozess ausführt.
Mit Invoke-Expression funktioniert es einwandfrei.

Danke für deine Hilfe und Gruß, Sascha
114757
114757 11.12.2015 aktualisiert um 16:37:41 Uhr
Goto Top
Zitat von @SaschaRD:

Hallo Jordel,

ich verwende die Funktion ZeitBerechnen mehrfach; dabei übergebe ich als Parameter stets eine andere Funktion die einen Prozess ausführt.
Mit Invoke-Expression funktioniert es einwandfrei.

p.s. Du kannst eine Funktion auch in einer Variablen kappseln und dann ausführen:

# Variable mit Skriptblock definieren
$test = {
    sleep(5)
}
# Variable/Skriptblock ausführen
.$test
Diesem Skriptblock kannst du genauso Parameter übergeben wie einer Funktion
$test = {
    param($arg1)
    write-host $arg1
}
.$test "Hallo"  
Dabei kannst du statt Dot-Sourcing(dem Punkt) auch das & zum Ausführen verwenden. Der Unterschied ist die Weitergabe von Variablen aus der aktuellen Session.