如何从.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
相关产品推荐
相关产品推荐

