2014-09-30 130 views
0

我正在编写一个Powershell脚本来自动化SQL Server的某些内容,其中一部分需要将我的本地帐户作为管理员添加到数据库。从Powershell运行SQL Server命令?

create login [MYDOMAIN\myusername] from windows 
go 

sp_addsrvrolemember [MYDOMAIN\myusername], 'sysadmin' 
go 

这需要通过升高的sqlcmd命令来运行。

我是Powershell和SQL Server的新手,非常感谢您的帮助。

回答

0

您正在寻找Invoke-Sqlcmd cmdlet

在文件中保存您的SQL Server命令(下面的),并保存为SQLInput.sql

create login [MYDOMAIN\myusername] from windows 
go 

sp_addsrvrolemember [MYDOMAIN\myusername], 'sysadmin' 
go 

然后,你可以用Run As Administrator运行PowerShell命令提示符,然后像运行下面的命令:

Invoke-Sqlcmd -InputFile "C:\SQLInput.sql" | Out-File -filePath "C:\SQLOutput.rpt" 

编辑:

您可以使用-Query选项运行查询内联如

Invoke-Sqlcmd -Query "create login [MYDOMAIN\myusername] from windows;" 

捕捉响应,是为了确保查询是否成功运行。您可以使用-AbortOnError开关;这将中止错误的命令。

否则,您可以使用Try .. Catch .. Finally构建在PowerShell中像

Try 
{ 
    Invoke-Sqlcmd -Query "create login [MYDOMAIN\myusername] from windows;" 
} 

Catch 
{ 
    [system.exception] 
    "caught a system exception" 
} 

Finally 
{ 
    "end of script" 
} 

了解更多关于异常处理在PowerShell中Here

+0

有没有一个好办法做到这一点,没有一个单独的文件?剧本的目的是协助入职,所以我想尽可能将所有内容都保存在一个地方。能够读取SQL Server对命令的响应的奖励点数。 – Benjin 2014-09-30 18:54:23

+0

查看编辑答案。阅读更多MSDN以了解更多信息。 – Rahul 2014-09-30 19:21:16

0

有从PowerShell的

  • 调用一些常用TSQL的选择-SqlCmd2
    • Download and dot source the function
    • +灵活,便携式TQSL功能基于.NET的在〜400行
    • +简单参数化查询
    • +则为DBNull为Null可选有效转换(数据bahaves如PowerShell的预期)
    • - 没有从微软
    • 官方Cmdlet的
    • - 不支持 '去' 语句


  • 调用-SQLCMD
    • 下载并安装the latest SQL Feature pack(一般向后兼容)。特别是:
      • SQLSysClrTypes
      • 共享ManagementObjects
      • PowerShellTools
    • 另外,安装管理工具与SQL一起
    • +官方Cmdlet的微软
    • - 参数化查询不支持(或可怕的摇摇欲坠 - 这是'变量'参数?)
    • - 已知是越野车。由于SQL 2014 CTP的有still bugs being addressed


  • .NET - System.Data.SqlClient的
    • 搜索MSDN各种类。这个网站上有很多例子。
      • System.Data.SqlClient.SQLConnection
      • System.Data.SqlClient.SqlCommand
      • System.Data.DataSet中
      • System.Data.SqlClient.SqlDataAdapter
    • +便携式
    • +功能强大
    • - 不像Cmdlet或函数那么简单
    • - 读者可能fin d代码不太清楚
    • - 虽然有帮助,如果您有特定的细分需求,可重用的代码一样调用-SqlCmd2会更有效


  • sqlcmd.exe
    • 如果你真的想调用它,你可以从PowerShell调用它。你可能会发现 - %有帮助......


实例与调用-SqlCmd2(对于TSQL一般我去命令)使用方法:

Invoke-Sqlcmd2 -ServerInstance SomeInstance -Database SomeDatabase -Query "create login [MYDOMAIN\myusername] from windows;" 


在一个侧面说明,一定要检查出SQL SMOSQLPSX

  • 虽然您需要熟练使用.NET,但SQL SMO对于SQL的自动化和控制来说非常棒。有许多资源可用,只是谷歌为你想做什么,并加上'SQL SMO PowerShell'
  • SQLPSX通常使用.NET和SMO库,提供更多用户友好的功能,行为像Cmdlet。不幸的是,这似乎是一个死的项目,一些材料已过时。 Here's a good post开始由其中一个贡献者。

    祝你好运!