Visual Studio - 包管理器控制台 - 程序化运行命令

3

每次我更新生产网站时,我需要运行5个命令,只是名称不同。

我想将这个过程自动化(未来可能需要运行这些命令100次,例如)。

我的做法是:

Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -ConnectionString "Server=PC-1\SQLEXPRESS;Persist Security Info=True;Initial Catalog=Database1;uid=prog;password=ndp103@50;" -ConnectionProviderName "System.Data.SqlClient" 
Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -ConnectionString "Server=PC-1\SQLEXPRESS;Persist Security Info=True;Initial Catalog=Database2;uid=prog;password=ndp103@50;" -ConnectionProviderName "System.Data.SqlClient" 
Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -ConnectionString "Server=PC-1\SQLEXPRESS;Persist Security Info=True;Initial Catalog=Database3;uid=prog;password=ndp103@50;" -ConnectionProviderName "System.Data.SqlClient" 
Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -ConnectionString "Server=PC-1\SQLEXPRESS;Persist Security Info=True;Initial Catalog=Database4;uid=prog;password=ndp103@50;" -ConnectionProviderName "System.Data.SqlClient" 
Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -ConnectionString "Server=PC-1\SQLEXPRESS;Persist Security Info=True;Initial Catalog=Database5;uid=prog;password=ndp103@50;" -ConnectionProviderName "System.Data.SqlClient" 

我可以帮您进行翻译。以下是需要翻译的内容:

我该如何编写脚本,以便在控制台管理器中输入以下内容时:

Update-Database -type Production -version latest

它可以运行上述所有命令,没有任何干扰。(所有连接字符串都存储在一个类似以下的 .XML 文件中:)
 <databases>
    <type>Production
        <database>Database1</database>
        <database>Database2</database>
        <database>Database3</database>
        <database>Database4</database>
        <database>Database5</database>
    </type>
 </databases>

由于包管理器控制台是一个 PowerShell 主机,您可以编写 PowerShell 脚本来实现逻辑。 - nemesv
我在问题中标记了PowerShell,但是我忘记在问题中提到PowerShell了... - NicoJuicy
2个回答

10

如果我正确理解了你的问题,你只是想知道如何在程序包管理器控制台内编写和执行PowerShell脚本。

1) 使用记事本在当前目录中创建一个新的脚本:

notepad newScript.ps1

2) 将您的命令粘贴到记事本中

Update-Database...
Update-Datebase...
Update-Database...

3) 保存记事本文件

4) 在包管理器控制台中输入以下内容,执行记事本文件:

.\newScript.ps1

请注意,本回答不包括使用PowerShell函数和参数的内容。


4
执行 "newScript.ps1" 之后出现了此错误: 该项 'Update-Database' 未被识别为 cmdlet、函数、脚本文件或可运行的程序。请检查名称的拼写,或如果包括路径,请验证路径是否正确,然后重试。 如何解决? - Mohsen Alikhani
实体框架的包找不到了(有点晚了,抱歉) - NicoJuicy

3

我对包管理器控制台本身并不了解,但如果目标是从 XML 中读取一堆数据库名称,将它们放入连接字符串中,并将它们传递给 cmdlet,以下内容应该可以帮助您:

$config = [xml](gc c:\path\to\config.xml)
$dbNames= $config.Databases.Type.Database

$dbNames|%{
  $connStr = "Server=PC-1\SQLEXPRESS;Persist Security Info=True;Initial Catalog=$_;uid=prog;password=ndp103@50;"
  Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -ConnectionString $connStr -ConnectionProviderName "System.Data.SqlClient"
}

我使用了这个解决方案。它最接近我想要的。而且它有效,谢谢! - NicoJuicy
1
@latkin说:“我对包管理器控制台本身一无所知”。包管理器控制台是Visual Studio内的PowerShell控制台,用于与NuGet交互和自动化Visual Studio。 - Mohsen Alikhani
@NicoJuicy,你是如何在Package Manager Console中使用多行{结构的?我知道ctrl+shift+enter可以添加连续行,但我想你可能有一个预先编写好的脚本可以复制和粘贴... - g.pickardou
1
@g.pickardou 这是一个PowerShell脚本。可以通过包管理器控制台调用PowerShell脚本。 - NicoJuicy
1
@NicoJuicy 非常感谢,我得出了相同的结论,所以有一个额外的跳跃,将代码外包到.ps1文件中,并从PM>调用脚本。 - g.pickardou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接