如何在 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另一个赛格威就在我的路径上。

在这种情况下正确运行的是

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如果我执行完整路径但没有:这个,我也会出现错误

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

相关内容