kraemer
Goto Top

Powershell: Funktionsparameter im Aufruf berechnen

Moin zusammnen,

irgendwie finde ich nicht die richtigen Suchbegriffe, um meine Frage per Suchmaschine beantworten zu können.

Nehmen wir als Beispiel folgende Funktion:

Write-EventLog -LogName "Application" -Source "MyApp" -EventID 3001 -EntryType Information -Message "Supertolle Nachricht"  

Ist es möglich, beispielsweise die [Int32]EventID direkt im Aufruf zu berechnen?

Ich hatte Beispielsweise folgendes versucht:
-EventID (if ($i -eq 1){return 2} else {return 3})
und alle möglichen anderen Variationen, die mir eingefallen sind. Leider funktioniert das so nicht. Weiß hier jemand einen Weg?

Und ja, ich weiß, dass ich den Wert vorher Berechnen und mittels Variable übergeben kann. Aus optischen Gründen will ich das in diesem Fall aber nicht.

Danke und Gruß

Content-ID: 7298771492

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

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

7010350221
Lösung 7010350221 25.05.2023 aktualisiert um 08:21:48 Uhr
Goto Top
Probiers mal so
Write-EventLog -LogName "Application" -Source "MyApp" -EventID (@{$true=2;$false=3}[($i -eq 1)]) -EntryType Information -Message "Supertolle Nachricht"  
oder so
Write-EventLog -LogName "Application" -Source "MyApp" -EventID $(if ($i -eq 1){2}else{3}) -EntryType Information -Message "Supertolle Nachricht"  
Funktioniert hier beides.

Gruß
Kraemer
Kraemer 25.05.2023 um 08:29:06 Uhr
Goto Top
Zitat von @7010350221:

Probiers mal so


Write-EventLog -LogName "Application" -Source "MyApp" -EventID (if ($i -eq 1){2}else{3}) -EntryType Information -Message "Supertolle Nachricht"  
das war einer meiner ersten Versuche - funktioniert zu meiner Überraschung nicht. Für sich genommen wirft die Funktion das richtige Ergebnis - als Parameter kam nur ein $Null

Das hier allerdings
Write-EventLog -LogName "Application" -Source "MyApp" -EventID (@{$true=2;$false=3}[($i -eq 1)]) -EntryType Information -Message "Supertolle Nachricht"  
funktioniert perfekt. Ich habe ein solches Konstrukt allerdings noch nicht gesehen - muss ich mir mal näher ansehen.

Vielen Dank dir!
7010350221
Lösung 7010350221 25.05.2023 aktualisiert um 08:32:13 Uhr
Goto Top
Ich habe ein solches Konstrukt allerdings noch nicht gesehen - muss ich mir mal näher ansehen.
Das ist eine Abkürzung für ein If-Else oder kann auch als Switch-Konstrukt verwendet werden, mittels einer Hashtable. Die Bedingung steht direkt dahinter in den eckigen Klammern und die Ergebniszuweisung in der Hasshtable. Ausgeschrieben kann man es auch so verstehen
$hashtable = @{$true=2;$false=3}
$hashtable[($i -eq 1)]
Kraemer
Kraemer 25.05.2023 aktualisiert um 08:34:52 Uhr
Goto Top
Zitat von @7010350221:

Ich habe ein solches Konstrukt allerdings noch nicht gesehen - muss ich mir mal näher ansehen.
Das ist eine Abkürzung für ein If-Else oder kann auch als Switch-Konstrukt verwendet werden, mittels einer Hashtable. Die Bedingung steht direkt dahinter in den eckigen Klammern und die Ergebniszuweisung in der Hasshtable. Ausgeschrieben kann man es auch so verstehen
$hashtable = @{$true=2;$false=3}
$hashtable[($i -eq 1)]

Kranker Sch... - sowas habe ich gesucht. Vielen Dank für die Erklärung face-smile

BTW:
Write-EventLog -LogName "Application" -Source "MyApp" -EventID (if ($i -eq 1){2}else{3}) -EntryType Information -Message "Supertolle Nachricht"  
schmeißt folgenden Fehler:
Die Benennung "if" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt.
7010350221
Lösung 7010350221 25.05.2023 aktualisiert um 08:42:31 Uhr
Goto Top
Ach da fehlte das Dollarzeichen vor dem Ausdruck, dann klappt es auch so, sorry ....
-EventID $(if ($i -eq 1){2}else{3})
Kraemer
Kraemer 25.05.2023 um 08:49:06 Uhr
Goto Top
Zitat von @7010350221:

Ach da fehlte das Dollarzeichen vor dem Ausdruck, dann klappt es auch so, sorry ....
-EventID $(if ($i -eq 1){2}else{3})

stimmt. funktioniert so!