PowerShell-Antwort verwenden?
Wenn ich einen Befehl in einem PowerShell Script ausführe und dann die Antwort auf diesen Befehl im Terminal angezeigt wird, kann ich während Ablauf des Scripts irgendwie diesen zurückgegebenen Wert in eine Variable speichern oder weiter verwenden. Der Script soll non-interactive sein also er speichert die Rückgabe dann in eine Variable und verwendet diese dann später im Script.
2 Antworten
Du betrachtest die Sache von der falschen Seite...
Du gibst das Ergebnis einer Operation direkt auf die Console/terminal aus und möchtest dieses in eine Variable speichern. Umgedreht wird ein schuh draus:
$Processes=Get-Process
$Processes
pause
Was ein vordefiniertes Cmdlet wie im obigen Beispiel "Get-Process" dabei treibt sollte egal sein.
dito mit einem ConsolProgramn/Befehl
$var=net users
$var
Möchtest du während einer "komplexeren" selbst definierten Operation Zwischenergebnisse anzeigen, ohne das diese an die Variable weitergegeben werden , so verwende Write-Host. dieses Cmdlet schreibt direkt in die Console.
In Powershell arbeitet man mit Pipelines :
#berechne das kleien Einmaleins,gib das Ergebnis in umgekehrter Reihenfolge ohne Duplikate an die Variable
$Zahlen1=1..10
$Zahlen2=1..10
$Results=$Zahlen1|ForEach-Object{
$aktuelleZahl1=$_
$Zahlen2|ForEach-Object{
$Ergebnis=$aktuelleZahl1 * $_
Write-Host berechne gerade: $aktuelleZahl1 * $_ = $Ergebnis -ForegroundColor Green #das wird in die Console geschrieben
$Ergebnis #das wird in die Pipeline (und letzlich in die Variable) gegeben
sleep -m 300 # mal etwas verlangsamen damits nach viel Rechnearbeit aussieht
}
}|Sort-Object -Descending -Unique #Ergebnisse in der Pipeline sortieren und Duplikate entfernen
'
das steht in der Variable:'
$Results #Variable ausgeben
pause
Das obige Beispiel ist etwas unelegant. Weil verschachtelte Pipelines nicht wirklich im Sinne des Erfinders sind. Es soll nur zeigen wie daten über eine komplexe Pipe direkt an die Variable weitergegeben werden.
Natürlich geht das auch ganz in der Art von üblichen Programmiersprachen eleganter.
$Results=@()
for ($Zahl1=1; $Zahl1 -le 10; ++$Zahl1){
for ($Zahl2=1; $Zahl2 -le 10; ++$Zahl2){
$Ergebnis=$Zahl1 * $Zahl2
Write-Host berechne gerade: $Zahl1 * $Zahl2 = $Ergebnis -ForegroundColor Green
$Results+=$Ergebnis #zum "Sammlung" vo Resultaten hizufügen
}
}
$Results=$Results|Sort-Object -Descending -Unique
'
das steht in der Variable:'
$Results #Variable ausgeben
pause
Es ist für Helfer immer etwas ungünstig auf, sehr allgemeine Fragen zu antworten. Wenn Du bei einem konkreten Problem feststeckst ist die Situation einfacher zu beantworten... Einfach Deinen bisherigen Code posten und das spezifische Problem schildern.
zB.
Ich möchte alle Namen von Prozessen mit Fenstern und der PID in eine Variable speichern.
Dann muss ich nicht mi allgemeinen Szenarien agieren, sondern habe auch eine konkrete Antwort:
$VordergrundProzesse = Get-Process|
Where-Object {$_.MainWindowHandle -ne 0}|
Select-Object -Property Name, Id
#Ausgeben
$VordergrundProzesse| Format-Table
pause
Reaktion nach 3 Monaten?... nicht Dein erst?
Wie sollte ich Deine Frage denn verstehen? Sorry... Ich bin bin kein Hellseher und kann mich nur auf dass beziehen, was ich irgendwie (mit viel Fantasie) in eine schwammige Fragestellung hineininterpretieren kann.
Nunja, ein halbes Jahr ist allerhand Zeit um eine Lösung auf ein unkonkretes Problem zu finden...🤪
wegen des "zu weit denken" ...: Ich werde mich bemühen auf unkonkrete Fragestellung wengier alternative Lösungswege anzubieten, welche einigermaßen weiterbringen könnten..🤔
Habe die Lösung natürlich schon viel früher gefunden. Bin nicht so oft auf dieser Plattform während des Tages wie du, da ich arbeiten muss. Aber mit gekränkten Leuten die aufgrund Inaktivität auf einer Frage-Plattform angefressen sind, bringt es wohl nichts zu diskutieren.
In bash geht das mit $?
Vll kannst du das auch mit direkter Variablenzuweisung machen, also
i = curl www.google.de
Ich meine das ich ein Command eingebe und das Terminal dann die Ausgabe ausgibt z.b. "Gib als nächstes das ein: test123". Dann möchte ich dieses test123 in eine Variable speichern damit ich es später im Script noch nutzen kann.
du hast mich komplett falsch verstanden...