powershell - 如何让 PowerShell 执行脚本中的所有行?(而不是在 dotnet 上休息一下?)
问题描述
我有一个 PowerShell 版本 5.1.19041.610 脚本,它大致执行以下操作
Do Command 1
Do Command 2
dotnet run "..\MyApiProject\API.csproj" --no-build
Do Command 4
它工作正常,直到dotnet run
劫持会话并输出:
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.
脚本就停在那里。我需要它来执行命令 4。如何让 PowerShell 启动 dotnet 并继续执行下一个命令?
解决方案
您有两个选项可以防止同步 dotnet run ...
命令阻塞您的脚本。
- 在新窗口中异步启动
dotnet run ...
命令(仅适用于 Windows),使用:Start-Process
Start-Process dotnet 'run "..\MyApiProject\API.csproj" --no-build'
- 在后台作业中不可见地运行
dotnet run ...
命令,使用:[1]Start-Job
Start-Job { $using:PWD | Set-Location; dotnet run ..\MyApiProject\API.csproj --no-build }
- 请注意,PowerShell (Core) 7+现在提供了一种更方便的方式来创建后台作业,类似于 POSIX 兼容的 shell,通过
&
后台运算符:dotnet run ..\MyApiProject\API.csproj --no-build &
此外,更轻量级的选项是使用线程作业而不是(基于子进程的)后台作业(
ThreadJob
提供Start-ThreadJob
cmdlet 的模块随 PowerShell (Core) 7+ 一起提供,但也可以安装在 Windows PowerShell 中)Start-ThreadJob { dotnet run ..\MyApiProject\API.csproj --no-build }
[1] 有关如何管理作业的信息,请参阅概念about_Jobs主题。请注意,在Windows PowerShell中需要 using以确保后台作业使用与调用者相同的当前位置;在 PowerShell (Core) 7+ 中不再需要,因为调用者的位置是自动继承的。$using:PWD | Set-Location
推荐阅读
- node.js - 什么是 docker node:9-stretch?
- html - 中心导航栏链接
- javascript - 我可以在 ReactJS 中的哪里放置自动身份验证代码?
- c - 在 C 中拆分 char 数组,同时保留分隔符
- selenium-webdriver - Passing Driver.Instance.FindElement parameters as a variable
- php - 95|会话|Amadeus API 的非活动对话和标头无效
- grails - Grails 3 JNDI 数据源抛出 javax.management.InstanceAlreadyExistsException
- visual-studio-code - How do I figure out which extension or service is making a VS Code Helper process use 100% CPU?
- python-3.x - 学python 3的艰辛之路 Ex46指令不清楚
- python-3.x - 将 pandas 中的数据框转换为数组