You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从.NET Core Web API调用PS1脚本并传参部署数据库

通过.NET Core Web API调用PowerShell脚本部署数据库(基于DacPac文件)

我需要通过.NET Core Web API调用PowerShell脚本,基于DacPac文件创建数据库,核心需求是从API向脚本传递动态参数来完成数据库部署。

该PowerShell脚本的设计说明:

#=================================================================================
用于从DacPac文件部署数据库
# #
使用方法:
# # .\PublishDB.ps1  -targetServer "(LocalDB)\MSSQLLocalDB" -targetDB "Dummy3" -sourceFile "D:\DummyDatabase\bin\Debug\DummyDatabase.dacpac"

为什么不用直接调用sqlpackage.exe?

因为PowerShell提供了更强大的编排能力——我计划用另一个脚本先执行构建DacPac文件的逻辑,再调用这个部署脚本完成数据库创建,这种多步骤的流程用PowerShell编排更灵活。

PowerShell部署脚本

[CmdletBinding()]
Param(
    # SQLPackage路径
    # 此路径对应SQL Server 2012(v11)版本的sqlpackage.exe
    [Parameter(Mandatory=$false)]
    [string]$sqlPackageFileName = "C:\Users\.dotnet\tools\sqlpackage.exe",
    
    # 数据库连接参数
    [Parameter(Mandatory=$false)]
    [string]$targetServerName = "(LocalDB)\MSSQLLocalDB",
    [Parameter(Mandatory=$false)]
    [string]$targetDBname = "Dummy2",

    # DacPac源文件路径
    # 注意:PSScriptRoot是脚本被调用时的所在目录。建议把脚本放在解决方案根目录,这样更容易拼接绝对路径
    [Parameter(Mandatory=$false)]
    [string]$sourceFile = "D:\DummyDatabase\bin\Debug\DummyDatabase.dacpac" # 路径含空格时引号会生效
)

& "$sqlPackageFileName" `
/Action:Publish `
/SourceFile:$sourceFile `
/TargetServerName:$targetServerName `
/TargetDatabaseName:$targetDBname `

.NET Core Web API调用代码

(注:修正了原代码中重复定义变量的问题)

string scriptPath = @"D:\ItzMeIn_Database\Parki.ItzMeIn.Database\Parki.ItzMeIn.DB.WebAPI\PublishDB.ps1";
PowerShell powerShell = PowerShell.Create();

// 直接添加脚本路径并传递参数,无需使用Invoke-Command
powerShell.AddCommand(scriptPath)
          .AddParameter("targetServerName", "targetServer")
          .AddParameter("targetDBname", "Dummy3")
          .AddParameter("sourceFile", @"D:\DummyDatabase\bin\Debug\DummyDatabase.dacpac");

powerShell.Invoke();

内容的提问来源于stack exchange,提问作者PrithiKumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:15:36