![Wie verwende ich Umgebungsvariablen in einer Powershell-Pipeline?](https://rvso.com/image/1642310/Wie%20verwende%20ich%20Umgebungsvariablen%20in%20einer%20Powershell-Pipeline%3F.png)
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 find
incygwindas 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