Wie verwende ich Umgebungsvariablen in einer Powershell-Pipeline?

Wie verwende ich Umgebungsvariablen in einer Powershell-Pipeline?

Der Befehl

systeminfo | find "System Type"

soll zurückkehren

System Type:               x64-based PC

sowohl in einem Eingabeaufforderungsfenster als auch in PowerShell.

Bei mir steht da

/usr/bin/find: 'System Type': No such file or directory

denn, wie mir erklärt wurde amhttps://github.com/MicrosoftDocs/WSL/issues/1025, ich habe noch eins findincygwindas auf meinem Weg liegt.

Was in diesem Fall richtig funktioniert, ist

systeminfo | c:\windows\system32\find.exe "System Type"

Nehmen wir nun an, ich möchte es unabhängig vom Systemstandort machen (sagen wir, wenn ich diesen Befehl in eine Anleitung für unvorsichtige Benutzer oder Ähnliches aufnehmen möchte). Ich dachte darüber nach, stattdessen aufzurufen

systeminfo | %SystemRoot%\system32\find.exe "System Type"

Dies funktioniert in einer Eingabeaufforderung, aber nicht in PowerShell. In letzterem habe ich versucht

systeminfo | $env:SystemRoot\system32\find.exe "System Type"

aber das gibt den Fehler

Expressions are only allowed as the first element of a pipeline.

Ich erhalte auch eine Fehlermeldung, wenn ich den vollständigen Pfad eingebe, jedoch ohne .exe: this

systeminfo | c:\windows\system32\find "System Type"

gibt

Cannot run a document in the middle of a pipeline: C:\windows\system32\find

Ich habe auch versucht

systeminfo | % $env:SystemRoot\system32\find.exe "System Type"

aber dies erzeugt eine Lawine von Fehlern wie

% : Input name "C:\WINDOWS\system32\find.exe" cannot be resolved to a method.

Was ist los? Wie macht man es richtig?

Antwort1

Du könntest es tun:

systeminfo | & $env:SystemRoot\system32\find.exe "System Type"

Beachten Sie das Und-Zeichen vor dem Befehl.

Noch besser ist es jedoch, die native PowerShell zu verwenden, anstatt Nicht-PowerShell-Ausgaben an Nicht-PowerShell-Programme weiterzuleiten.

(Get-ComputerInfo -Property CsSystemType).CsSystemType

verwandte Informationen