適用於:SQL Server - Linux
本文介紹 SQL Server PowerShell,並在 macOS 和 Linux 上,逐步引導您使用 PowerShell 的幾個範例。 PowerShell 現在是 GitHub 上的開放原始碼專案。
如需 Windows PowerShell 的詳細資訊,請參閱 什麼是 Windows PowerShell?
跨平台編輯器選項
PowerShell 的所有下列步驟都會在一般終端機中運作,或者您可以從 Visual Studio Code 或 Azure Data Studio 內的終端機執行。 VS Code 和 Azure Data Studio 都可在 macOS 和 Linux 上使用。 如需 Azure Data Studio 的詳細資訊,請參閱快速入門:使用 Azure Data Studio 連線和查詢 SQL Server。 您也可以考慮使用適用於 Azure Data Studio的
安裝 PowerShell
如需在各種支持和實驗平臺上安裝PowerShell的詳細資訊,請參閱下列文章:
安裝 SqlServer 模組
SqlServer 模組維護於 PowerShell Gallery 中。 使用 SQL Server 時,您應該一律使用最新版的 SqlServer PowerShell 模組。
若要安裝 SqlServer 模組,請開啟 PowerShell 工作階段並執行下列程式代碼:
Install-Module -Name SqlServer
如需如何從 PowerShell 資源庫安裝 SqlServer 模組的詳細資訊,請參閱 安裝 SQL Server PowerShell 模組。
使用 SqlServer 模組
讓我們從啟動PowerShell開始。 如果您是在macOS或Linux上,請在電腦上開啟 終端機會話 ,然後輸入 pwsh 以啟動新的PowerShell會話。 在 Windows 上,使用 Win+R,然後輸入 pwsh 來啟動新的 PowerShell 會話。
pwsh
SQL Server 提供名為 的 SqlServerPowerShell 模組。 您可以使用模組 SqlServer 將 SQL Server 元件 (SQL Server 提供者和 Cmdlet) 匯入 PowerShell 環境或腳本。
於 PowerShell 提示符中複製並貼上下列命令,以將 SqlServer 模組匯入您目前的 PowerShell 工作階段:
Import-Module SqlServer
在 PowerShell 提示字元中輸入下列命令,以確認 SqlServer 模組已正確匯入:
Get-Module -Name SqlServer
PowerShell 應該會顯示類似下列輸出的資訊:
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 21.1.18102 SqlServer {Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupList...
連線到 SQL Server 並取得伺服器資訊
下列步驟使用 PowerShell 連線到 Linux 上的 SQL Server 實例,並顯示幾個伺服器屬性。
在 PowerShell 提示字元中複製並貼上下列命令。 當您執行這些命令時,PowerShell 將會:
- 顯示對話方塊,提示您輸入執行個體的主機名稱或 IP 位址
- 顯示 [PowerShell 認證要求] 對話方塊,它會提示您輸入認證。 您可以使用「SQL 使用者名稱」 和「SQL 密碼」 連線至 Linux 上的 SQL Server 執行個體
- 使用
Get-SqlInstancecmdlet 連接到Server並顯示一些屬性。
(選擇性) 您可以將 $serverInstance 變數取代為您 SQL Server 執行個體的 IP 位址或主機名稱。
# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential
# Connect to the Server and return a few properties
Get-SqlInstance -ServerInstance $serverInstance -Credential $credential
# done
PowerShell 應該會顯示類似下列輸出的資訊:
Instance Name Version ProductLevel UpdateLevel HostPlatform HostDistribution
------------- ------- ------------ ----------- ------------ ----------------
your_server_instance 14.0.3048 RTM CU13 Linux Ubuntu
注意
如果這些值沒有顯示,與目標 SQL Server 實例的連線很可能失敗。 請確定您可以使用相同的連線資訊,從 SQL Server Management Studio 連線。 然後檢閱連線疑難排解建議。
使用 SQL Server PowerShell 提供者
連線到 SQL Server 執行個體的另一個選項是使用 SQL Server PowerShell 提供者。 使用提供者,您可以在命令列上瀏覽 SQL Server 執行個體,就像在物件總管中瀏覽樹狀結構一樣。 根據預設,此提供者會顯示為名為 SQLSERVER:\ 的 PSDrive,您可用其連線和巡覽您的網域帳戶可存取的 SQL Server 執行個體。 如需如何對 Linux 上的 SQL Server 設定 Active Directory 驗證的詳細資訊,請參閱設定步驟。
您也可以搭配 SQL Server PowerShell 提供者使用 SQL 驗證。 若要這樣做,請使用 New-PSDrive Cmdlet 來建立新的 PSDrive,並提供適當的認證來連線。
在下面的範例中,您會看到如何使用 SQL 驗證建立新 PSDrive 的範例。
# NOTE: We are reusing the values saved in the $credential variable from the above example.
New-PSDrive -Name SQLonDocker -PSProvider SqlServer -Root 'SQLSERVER:\SQL\localhost,10002\Default\' -Credential $credential
您可以藉由執行 Get-PSDrive Cmdlet 確認磁碟機是否建立。
Get-PSDrive
建立新的 PSDrive 之後,您就可以開始巡覽。
dir SQLonDocker:\Databases
輸出內容可能如下所示。 您可能會注意到此輸出類似於 SQL Server Management Studio (SSMS) 在 [資料庫] 節點中顯示的內容。 它會顯示使用者資料庫,而不是系統資料庫。
Name Status Size Space Recovery Compat. Owner
Available Model Level
---- ------ ---- ---------- -------- ------- -----
AdventureWorks2022 Normal 209.63 MB 1.31 MB Simple 130 sa
AdventureWorksDW2022 Normal 167.00 MB 32.47 MB Simple 110 sa
AdventureWorksDW2022 Normal 188.00 MB 78.10 MB Simple 120 sa
AdventureWorksDW2022 Normal 172.00 MB 74.76 MB Simple 130 sa
AdventureWorksDW2022 Normal 208.00 MB 40.57 MB Simple 140 sa
如果您需要查看執行個體上的所有資料庫,其中一個選項是使用 Get-SqlDatabase Cmdlet。
取得資料庫
要知道的一個重要的 Cmdlet 是 Get-SqlDatabase。 對於涉及某個資料庫的許多作業,或某個資料庫內的許多物件,可以使用 Get-SqlDatabase Cmdlet。 如果您同時提供 -ServerInstance 和 -Database 參數的值,只會擷取一個資料庫物件。 不過,如果您只指定 -ServerInstance 參數,就會傳回該執行個體上所有資料庫的完整清單。
# NOTE: We are reusing the values saved in the $credential variable from the above example.
# Connect to the Instance and retrieve all databases
Get-SqlDatabase -ServerInstance ServerB -Credential $credential
以下是 Get-SqlDatabase 命令傳回的範例:
Name Status Size Space Recovery Compat. Owner
Available Model Level
---- ------ ---- ---------- -------- ------- -----
AdventureWorks2022 Normal 209.63 MB 1.31 MB Simple 130 sa
AdventureWorksDW2022 Normal 167.00 MB 32.47 MB Simple 110 sa
AdventureWorksDW2022 Normal 188.00 MB 78.10 MB Simple 120 sa
AdventureWorksDW2022 Normal 172.00 MB 74.88 MB Simple 130 sa
AdventureWorksDW2022 Normal 208.00 MB 40.63 MB Simple 140 sa
master Normal 6.00 MB 600.00 KB Simple 140 sa
model Normal 16.00 MB 5.70 MB Full 140 sa
msdb Normal 15.50 MB 1.14 MB Simple 140 sa
tempdb Normal 16.00 MB 5.49 MB Simple 140 sa
檢查 SQL Server 錯誤記錄檔
下列步驟將使用 PowerShell 檢查已連接的 Linux 上 SQL Server 實例的錯誤記錄檔。
在 PowerShell 提示字元中複製並貼上下列命令。 執行可能需要幾分鐘。 這些命令會執行下列步驟:
- 顯示對話方塊,提示您輸入執行個體的主機名稱或 IP 位址
- 顯示 [PowerShell 認證要求] 對話方塊,它會提示您輸入認證。 您可以使用「SQL 使用者名稱」 和「SQL 密碼」 連線至 Linux 上的 SQL Server 執行個體
- 使用
Get-SqlErrorLogcmdlet 連接到 Linux 上的 SQL Server 實例,自Yesterday以來擷取錯誤記錄檔。
(選擇性) 您可以將 $serverInstance 變數取代為您 SQL Server 執行個體的 IP 位址或主機名稱。
# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential
# Retrieve error logs since yesterday
Get-SqlErrorLog -ServerInstance $serverInstance -Credential $credential -Since Yesterday
# done
探索 PowerShell 中目前可用的 cmdlet
雖然 SqlServer 模組目前有 109 個 Cmdlet 可在 Windows PowerShell 中使用,但 PowerShell 中只有 62 個可用的 Cmdlet。 以下是目前可用的 62 個 Cmdlet 的完整清單。 如需 SqlServer 模組中所有指令的深入文件,請參閱 SqlServer Cmdlet 參考。
下列命令會顯示您所使用的 PowerShell 版本上所有可用的 Cmdlet。
Get-Command -Module SqlServer -CommandType Cmdlet |
Sort-Object -Property Noun |
Select-Object Name
- ConvertFrom-EncodedSqlName
- ConvertTo-EncodedSqlName
- Get-SqlAgent
- Get-SqlAgentJob
- Get-SqlAgentJobHistory(取得 SQL 代理程式工作歷史記錄)
- Get-SqlAgentJobSchedule
- Get-SqlAgentJobStep
- Get-SqlAgentSchedule
- Invoke-SqlAssessment
- Get-SqlAssessmentItem
- Remove-SqlAvailabilityDatabase
- Resume-SqlAvailabilityDatabase
- Add-SqlAvailabilityDatabase
- Suspend-SqlAvailabilityDatabase
- New-SqlAvailabilityGroup
- Set-SqlAvailabilityGroup
- Remove-SqlAvailabilityGroup
- Switch-SqlAvailabilityGroup
- Join-SqlAvailabilityGroup
- Revoke-SqlAvailabilityGroupCreateAnyDatabase
- Grant-SqlAvailabilityGroupCreateAnyDatabase
- 新建-Sql可用性群組偵聽器
- Set-SqlAvailabilityGroupListener (設定 SQL 可用性群組監聽器)
- Add-SqlAvailabilityGroupListenerStaticIp
- Set-SqlAvailabilityReplica
- 移除-Sql可用性副本
- New-SqlAvailabilityReplica
- Set-SqlAvailabilityReplicaRoleToSecondary(設定 SQL 可用性副本角色為次要)
- New-SqlBackupEncryptionOption(新建-SQL備份加密選項)
- Get-SqlBackupHistory
- Invoke-Sqlcmd
- New-SqlCngColumnMasterKeySettings
- Remove-SqlColumnEncryptionKey
- Get-SqlColumnEncryptionKey
- Remove-SqlColumnEncryptionKeyValue
- 新增-Sql資料行加密金鑰值
- Get-SqlColumnMasterKey
- Remove-SqlColumnMasterKey
- New-SqlColumnMasterKey
- Get-SqlCredential
- Set-SqlCredential
- New-SqlCredential
- Remove-SqlCredential
- New-SqlCspColumnMasterKeySettings
- Get-SqlDatabase
- Restore-SqlDatabase
- 備份-Sql資料庫
- Set-SqlErrorLog
- Get-SqlErrorLog
- New-SqlHADREndpoint
- Set-SqlHADREndpoint
- Get-SqlInstance
- Add-SqlLogin
- Remove-SqlLogin
- Get-SqlLogin
- Set-SqlSmartAdmin
- Get-SqlSmartAdmin
- Read-SqlTableData
- Write-SqlTableData
- Read-SqlViewData
- Read-SqlXEvent
- Convert-UrnToPath (轉換-Urn為路徑)