我有一个powershell脚本,需要运行一些可执行文件。
可执行文件没有扩展名,因此无法重命名。
格式为<something>_test
。
当我尝试使用powershell运行它们时:
& $test_bin | Tee-Object -FilePath $log_output_file
它失败并返回错误
Cannot run a document in the middle of a pipeline
我尝试设置PATH($env:PATHEXT="$env:PATHEXT;_test"
),但没有帮助。我猜它只支持实际的扩展。
有没有办法告诉windows一个特定的文件是可执行文件,或者告诉powershell执行一个文件,即使它认为它是一个文档?
2条答案
按热度按时间a6b3iqyw1#
范例:
应该有更多的方法来执行具有不可执行扩展名的文件,这是变体之一。
6vl6ewon2#
我尝试设置PATHEXT(
$env:PATHEXT="$env:PATHEXT;_test"
),但没有帮助.
来表示没有扩展名的文件(
$env:PATHEXT="$env:PATHEXT;."
)cmd.exe
的内部assoc
和ftype
命令),其调用助手应用程序以便于执行。cmd.exe
-然后在新窗口中调用助手应用程序 *;这种有问题的行为是GitHub issue #9430的主题。解决方法:
Start-Process
和-NoNewWindow
开关以及-RedirectStandardOutput
和-RedirectStandardError
参数;例如:[Console]::OutputEncoding
中的编码,用于-RedirectStandardOutput
和-RedirectStandardError
创建的文件,默认为旧系统区域设置的OEM代码页;(临时)根据需要将[Console]::OutputEncoding
设置为所需的编码。这同样适用于PowerShell直接从外部程序接收的标准输出(参见下一点)。Invoke-ExtensionLess
(源代码)是一个 * 简单 * 的概念验证,它使用.NET API(System.Diagnostics.Process
,System.Diagnostics.ProcessStartInfo
)来支持直接将可执行文件的 stdout 输出流到PowerShell管道,但它缺乏对流管道(stdin)* 输入 * 的支持(添加此类支持需要更多的工作)。Invoke-ExtensionLess
源代码: