2014-09-30 127 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開始由其中一個貢獻者。

    祝你好運!