Команда
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