这是我的test.ps1
:
Start-Process -FilePath 'CMD.EXE' -NoNewWindow -ArgumentList '/C START /B PING.EXE google.com -t > logfile.txt 2>&1'
echo "Finished."
该测试是向 Google 进行无限 ping,这对于我需要检查的条件来说是一个很好的测试:
- 在新的分离线程中打开该进程(= 查看打印出的‘完成’ + 查看进程列表中的 PING.EXE 是否还活着 + CTRL+C 不会终止 PING.exe)[好的]
- 收集 ping 进度(即:重定向标准输入和标准错误)到
logfile.txt
[失败]<=此解决方案在我的测试中似乎不起作用,logfile.txt
停留在 0 字节
这是一个复杂的解决方案,尽管我的最终目标相对简单。我最终想要的是在 powershell 中重现这个 linux cmd:
ASPNETCORE_ENVIRONMENT=Production ASPNETCORE_URLS=http://*:5000 dotnet run > ${LOGFILE_PATH}.txt 2>&1 &
Windows 中的困难部分似乎是“真的分离进程”。START /B
是我发现的唯一真正能做到这一点的 Windows 功能。但是我遇到了“输出重定向”问题。由于我需要在 .ps1 文件中使用它,因此我需要将其包装在 中Start-Process
。
答案1
您可能正在寻找以下一项或多项 开始进程 参数:
-重定向标准输出
指定文件。此 cmdlet 将进程生成的输出发送到您指定的文件。输入路径和文件名。默认情况下,输出显示在控制台中。
没有新窗口
在当前控制台窗口中启动新进程。默认情况下,PowerShell 会打开一个新窗口。