GitHub Actions部署.NET Web API至IIS时遇pwsh: command not found错误
问题:GitHub Actions部署.NET Web API到IIS时出现
pwsh命令未找到错误 我使用如下GitHub Actions YAML工作流部署.NET Web API至IIS:
name: "Build and Deploy" on: workflow_dispatch: branches: - master env: WEBAPP_NAME: 'IISAutoDeploy' DOTNET_VERSION: '8.0.x' jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v2 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Install dependencies working-directory: 'IISAutoDeploy' run: dotnet restore - name: Build working-directory: 'IISAutoDeploy' run: dotnet build --configuration Release --no-restore - name: Publish working-directory: 'IISAutoDeploy' run: dotnet publish --configuration Release --output 'dotnetcorewebapp' - name: Simply Web Deploy uses: RasmusBuchholdt/simply-web-deploy@2.1.0 with: website-name: ${{ secrets.WEBSITE_NAME }} server-computer-name: ${{ secrets.SERVER_COMPUTER_NAME }} server-username: ${{ secrets.SERVER_USERNAME }} server-password: ${{ secrets.SERVER_PASSWORD }} source-path: '/IISAutoDeploy/dotnetcorewebapp/'
执行到最后一步时出现错误:
> Run C:\inetpub\wwwroot\_actions\RasmusBuchholdt\simply-web-deploy\2.1.0/Scripts/Set-ApplicationPool.ps1 StopAppPool C:\inetpub\wwwroot\_actions\RasmusBuchholdt\simply-web-deploy\2.1.0/Scripts/Set-ApplicationPool.ps1 StopAppPool Error: pwsh: command not found
我已尝试在服务器安装PowerShell Core,也尝试在YAML中添加安装命令,但均未解决问题。
解决方案
- 排查环境适配问题:当前工作流基于
windows-latest运行,该环境默认自带PowerShell Core(pwsh),错误根源是目标IIS服务器的执行环境无法识别pwsh命令。 - 替换成兼容Windows PowerShell的部署方式:
- 改用支持Windows PowerShell的Web Deploy动作,比如调整为
Azure/webapps-deploy@v2(针对本地IIS场景配置对应参数)。 - 自定义WinRM部署步骤,直接用服务器原生的
powershell.exe执行操作,示例步骤如下:- name: 自定义部署到IIS uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.SERVER_COMPUTER_NAME }} username: ${{ secrets.SERVER_USERNAME }} password: ${{ secrets.SERVER_PASSWORD }} script_stop: | # 停止目标应用池 Stop-WebAppPool -Name ${{ secrets.WEBSITE_NAME }} # 同步发布文件到服务器站点目录 robocopy "${{ github.workspace }}/IISAutoDeploy/dotnetcorewebapp" "C:\inetpub\wwwroot\${{ secrets.WEBSITE_NAME }}" /MIR /NFL /NDL # 重启应用池 Start-WebAppPool -Name ${{ secrets.WEBSITE_NAME }}
- 改用支持Windows PowerShell的Web Deploy动作,比如调整为
- 修复服务器
pwsh路径:如果必须使用PowerShell Core,确保服务器上的pwsh.exe路径(如C:\Program Files\PowerShell\7\pwsh.exe)已加入系统环境变量PATH,或者在脚本中使用绝对路径调用。
内容的提问来源于stack exchange,提问作者Hakuna
相关产品推荐
相关产品推荐

