我有以下简单的 shell 命令:
PM> ipconfig | Out-File -FilePath c:\log.txt
此命令运行良好,log.txt 的内容已成功添加到 log.txt 文件中。
但是它不适用于
Install-Package
命令,以下命令不会将输出保存到提供的文件中:
PM> Install-Package Newtonsoft.Json | Out-File c:\log2.txt
Attempting to gather dependency information for package 'Newtonsoft.Json.13.0.3' with respect to project 'ConsoleApp5', targeting
...
log2.txt
已创建,但里面没有内容。如何将所有可能的内容(尤其是来自Package Manager Console
)保存到文件中?
他们是不同的。
请看Out-File官方文档:
ipconfig 是一个将其输出直接写入标准输出流 (
stdout
) 的命令,可以使用 Out-File
轻松将其重定向到文件。但是,Install-Package
(Visual Studio 中 NuGet 包管理器控制台的 cmdlet)不会以相同的方式写入其输出。
由于从Out-File中获取信息的原理,这样做根本无法获取和输出任何信息。因为这个powershell命令不仅不输出到标准输出流,甚至不输出到标准错误流。以下命令可以确认这一点:
Install-Package Newtonsoft.Json > output.log 2> error.log
因此,使用基于stdout或stderr的技术无法实现您的需求。
可以使用powershell自带的文本捕获命令来输出一些信息。你可以看看这是否是你所需要的:
# Start the transcript, specifying the output file path
Start-Transcript -Path "C:\installation_transcript.txt"
# Run your command here
Install-Package Newtonsoft.Json -Verbose
# Stop the transcript when done
Stop-Transcript