PowerShell-Antwort verwenden?

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
pfand1879 
Fragesteller
 03.03.2023, 14:05

du hast mich komplett falsch verstanden...

0
Erzesel  03.03.2023, 15:54
@pfand1879

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.

0
pfand1879 
Fragesteller
 08.05.2023, 15:20
@Erzesel

Hab übrigens eine Lösung gefunden. Du hast zu weit gedacht, es ist viel simpler als du verstanden hast.

0
Erzesel  08.05.2023, 15:49
@pfand1879

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..🤔

0
pfand1879 
Fragesteller
 08.05.2023, 15:56
@Erzesel

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.

0

In bash geht das mit $?

Vll kannst du das auch mit direkter Variablenzuweisung machen, also

i = curl www.google.de

Woher ich das weiß:Berufserfahrung – Softwareentwickler
pfand1879 
Fragesteller
 19.11.2022, 13:46

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.

0