分享方式:


什麼是 SQL Server PowerShell?

安裝 SQL Server PowerShell

有兩個 SQL Server PowerShell 模組;SqlServerSQLPS

SqlServer 模組是要使用的目前 PowerShell 模組。

SQLPS 模組 隨附於 SQL Server 安裝中,但不再更新。

SqlServer 模組包含 SQLPS 中更新的 Cmdlet 版本,並包含新的 Cmdlet 以支援最新的 SQL 功能。

舊版 SqlServer 模組 隨附於 /sql/ssms/download-sql-server-management-studio-ssms,但僅隨附於 16.x 版的 SSMS。

若要搭配 SSMS 17.0 和更新版本使用 PowerShell,請從 PowerShell 資源庫安裝 SqlServer 模組。

您也可以使用 Azure Data StudioPowerShell 編輯器支援。

為什麼模組從 SQLPS 變更為 SqlServer?

若要提供 SQL PowerShell 更新,我們必須變更 SQL PowerShell 模組的身分識別,以及稱為 SQLPS.exe包裝函式。 由於這項變更,現在有兩個 SQL PowerShell 模組:SqlServer 模組和 SQLPS 模組。

如果您匯入 SQLPS 模組,更新 PowerShell 腳本。

如果您有任何執行 Import-Module -Name SQLPS的 PowerShell 文稿,而且您想要利用新的提供者功能和新的 Cmdlet,則必須將其變更為 Import-Module -Name SqlServer。 新模組會安裝至 %ProgramFiles%\WindowsPowerShell\Modules\SqlServer 資料夾。 因此,您不需要更新 $env:PSModulePath 變數。 如果您有使用名為 SqlServer之模組之第三方或社群版本的腳本,請使用 Prefix 參數來避免名稱衝突。

建議您使用 sqlServer Import-Module 啟動腳本,以避免在同一部計算機上安裝 SQLPS 模組時並存問題。

本節適用於從 PowerShell 執行的腳本,而不是 SQL Agent。 新的模組可以使用 #NOSQLPS搭配 SQL Agent 作業步驟使用。

SQL Server PowerShell 元件

SqlServer 模組隨附:

  • PowerShell 提供者,其可啟用類似於檔案系統路徑的簡單瀏覽機制。 您可以建置類似文件系統路徑的路徑,其中磁碟驅動器與 SQL Server 管理物件模型相關聯,而節點則以物件模型類別為基礎。 然後,您可以使用熟悉的命令,例如 cd(Set-Location的別名)和 dir(Get-ChildItem別名)來巡覽路徑,就像在命令提示字元視窗中瀏覽檔的方式一樣。 您可以使用其他命令,例如 (Rename-Item的別名)或 del (Remove-Item的別名 ),在路徑中的節點上執行動作。

  • 一組 Cmdlet,支援執行包含 Transact-SQL 或 XQuery 語句的 sqlcmd 腳本等動作。

  • AS 提供者和 Cmdlet,分別安裝它們之前。

SQL Server 版本

SQL PowerShell Cmdlet 可用來管理 Azure SQL Database、Azure Synapse Analytics 和所有 支援的 SQL Server 產品實例,

PowerShell 路徑中不支援字元的 SQL Server 識別碼

Encode-Sqlname (ConvertTo-EncodedSqlName別名) 和 Decode-Sqlname (ConvertFrom-EncodedSqlName別名 ) Cmdlet 可協助您指定 SQL Server 識別碼,其中包含 PowerShell 路徑中不支援的字元。 如需詳細資訊,請參閱在PowerShell中 SQL Server識別符。

使用 Convert-UrnToPath Cmdlet,將 Database Engine 物件的唯一資源名稱轉換為 SQL Server PowerShell 提供者的路徑。 如需詳細資訊,請參閱 convert-UrnToPath

查詢表達式和統一資源名稱

查詢表達式是字串,使用類似 XPath 的語法來指定一組準則,列舉物件模型階層中的一或多個物件。 統一資源名稱 (URN) 是特定類型的查詢表示式字串,可唯一識別單一物件。 如需詳細資訊,請參閱 查詢表示式和統一資源名稱

SQL Server Agent

SQL Server Agent 所使用的模組沒有任何變更。 因此,具有 PowerShell 類型作業步驟的 SQL Server Agent 作業會使用 SQLPS 模組。 如需詳細資訊,請參閱 如何使用 SQL Server Agent執行 PowerShell。 不過,從 SQL Server 2019 開始,您可以停用 SQLPS。 若要這樣做,您可以在 PowerShell 類型的作業步驟的第一行新增 #NOSQLPS,這會停止 SQL Agent 自動載入 SQLPS 模組。 當您這樣做時,SQL Agent 作業會執行電腦上安裝的 PowerShell 版本,然後您可以使用任何其他您想要的 PowerShell 模組。

針對 SQLPS 進行疑難解答

如果您看到代理程式作業步驟(PowerShell 子系統)因下列錯誤而失敗,本節可能有助於針對問題進行疑難解答。

作業步驟在PowerShell腳本中的第1行收到錯誤。 對應的行是 『import-module SQLPS』。 更正腳本並重新排程作業。 PowerShell 傳回的錯誤資訊是:『未載入指定的模組 』SQLPS』,因為在任何模組目錄中找不到有效的模塊檔案。

SQLPS 模組必須在環境變數 PSModulePath 上取得。 卸載 SSMS 16.x 可能會從 PSModulePath 移除 SQLPS。 若要檢查 PSModulePath 中儲存的目前值,請執行下列 PowerShell:

 $env:PSModulePath -split ";"

如果設定路徑,您會看到類似 C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules的專案。 如果未設定路徑,請找出伺服器上的 SQLPS 資料夾,並透過 PowerShell 或 系統屬性>[進階>環境變數]將它新增至環境變數值。

SQLServer 模組與 SQL Agent

如果您想要在 SQL Agent 作業步驟中使用 SqlServer 模組,您可以將此程式代碼放在腳本的前兩行。

#NOSQLPS
Import-Module -Name SqlServer

Cmdlet 參考