Как использовать переменные среды в конвейере PowerShell?

Как использовать переменные среды в конвейере PowerShell?

Команда

systeminfo | find "System Type"

должен вернуться

System Type:               x64-based PC

как в окне командной строки, так и в PowerShell.

В моем случае это говорит

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

потому что, как мне объяснили наhttps://github.com/MicrosoftDocs/WSL/issues/1025, у меня есть еще один findвcygwinкоторый находится на моем пути.

В данном случае правильно работает следующее:

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

Теперь предположим, что я хочу сделать его независимым от того, где находится система (например, если я хочу включить эту команду в какое-то руководство для невнимательных пользователей или что-то в этом роде). Я думал о том, чтобы вместо этого вызвать

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

Это работает в командной строке, но не в PowerShell. В последнем я пробовал

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

но это дает ошибку

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

Я также получаю ошибку, если я указываю полный путь, но без .exe: this

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

дает

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

Я тоже попробовал

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

но это порождает лавину ошибок, таких как

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

Что происходит? Как это правильно сделать?

решение1

Вы можете сделать:

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

обратите внимание на амперсанд перед командой.

Но еще лучше использовать собственный PowerShell, а не передавать вывод, не являющийся PowerShell, в программы, не являющиеся PowerShell.

(Get-ComputerInfo -Property CsSystemType).CsSystemType

Связанный контент