一、概述
SQL Server 2012 提供了一個(gè)名為 sqlps 的 Windows PowerShell 模塊,該模塊用于將 SQL Server 組件導(dǎo)入到 Windows PowerShell 2.0 環(huán)境或腳本中。sqlps 模塊提供一組 SQL Server cmdlet ,支持各種操作,如運(yùn)行包含 Transact-SQL 或 XQuery 語(yǔ)句的 sqlcmd 腳本。
二、加載模塊
1、SQL Server 2008 R2 插件
從 SQL Server 2005 開(kāi)始,就提供了一個(gè) Invoke-Sqlcmd 的 Cmdlet,功能類似于早期的SQLCMD,可以直接運(yùn)行。SQL Server 2008 默認(rèn)的安裝路徑為C:\Program Files\Microsoft SQL Server\100\Tools\Binn。運(yùn)行SQLPS.exe,直接進(jìn)入名為“SQLSERVER:”的命名空間。
也可以在 Windows PowerShell 中手動(dòng)加載插件。
PS C:\Users\Administrator> Get-PSSnapin -Registered
Name : SqlServerCmdletSnapin100
PSVersion : 1.0
Description : This is a PowerShell snap-in that includes various SQL Server cmdlets.
Name : SqlServerProviderSnapin100
PSVersion : 1.0
Description : SQL Server Provider
PS C:\Users\Administrator> Add-PSSnapin sqlserverprovidersnapin100
PS C:\Users\Administrator> Add-PSSnapin sqlservercmdletsnapin100
PS C:\Users\Administrator> Get-Help Invoke-Sqlcmd -Detailed
2、SQL Server 2012
SQL Server 2012 仍然保留SQLPS.exe,默認(rèn)安裝路徑為 C:\Program Files\Microsoft SQL Server\110\Tools\Binn ,版本為11.0.2100.60 。
SQL Server 2012 以模塊的形式存在,可以在PowerShell 手動(dòng)加載SQLPS模塊,實(shí)現(xiàn)在PowerShell 訪問(wèn) SQL 組件和功能。
PS C:\Users\Administrator> Get-Module -ListAvailable
ModuleType Name ExportedCommands
---------- ---- ----------------
Manifest BitsTransfer {}
Manifest PSDiagnostics {}
Manifest SQLASCMDLETS {}
Manifest SQLPS {}
PS C:\Users\Administrator> Set-ExecutionPolicy RemoteSigned
執(zhí)行策略更改
執(zhí)行策略可以防止您執(zhí)行不信任的腳本。更改執(zhí)行策略可能會(huì)使您面臨 about_Execution_Policies
幫助主題中所述的安全風(fēng)險(xiǎn)。是否要更改執(zhí)行策略?
[Y] 是(Y) [N] 否(N) [S] 掛起(S) [?] 幫助 (默認(rèn)值為“Y”): y
PS C:\Users\Administrator> Import-Module SQLPS
警告: 本地計(jì)算機(jī)沒(méi)有 Analysis Services 的活動(dòng)實(shí)例。
警告: 有些導(dǎo)入的命令名包含未批準(zhǔn)的動(dòng)詞,這些動(dòng)詞可能會(huì)導(dǎo)致命令名不易被發(fā)現(xiàn)。請(qǐng)使用 Verbose
參數(shù)了解詳細(xì)信息,或鍵入 Get-Verb 查看已批準(zhǔn)的動(dòng)詞列表。
PS SQLSERVER:\>
注:加載了模塊之后,提示符顯示已經(jīng)切換到名為“SQLSERVER:”的命名空間。
在導(dǎo)入模塊時(shí)可以指定參數(shù),隱藏警告信息。例如:
PS C:\Users\Administrator> Import-Module SQLPS -DisableNameChecking
三、執(zhí)行一個(gè)查詢
1、SQL Server 2008 R2
下面的例子是執(zhí)行一個(gè)簡(jiǎn)單的查詢,數(shù)據(jù)庫(kù)實(shí)例為本機(jī)(localhost)的默認(rèn)實(shí)例,使用Windows集成身份驗(yàn)證,訪問(wèn)的數(shù)據(jù)庫(kù)是master。
PS C:\Users\Administrator> Invoke-Sqlcmd -query "select * from sys.databases" -Database master -ServerInstance localhost | Format-Table
name database_id source_data owner_sid create_date compatibili collation_n user_access user_access is_read_onl
base_id ty_level ame _desc y
---- ----------- ----------- --------- ----------- ----------- ----------- ----------- ----------- -----------
master 1 {1, 0, 0... 2003/4/8... 100 SQL_Lati... 0 MULTI_USER False
tempdb 2 {1, 0, 0... 2013/4/2... 100 SQL_Lati... 0 MULTI_USER False
model 3 {1, 0, 0... 2003/4/8... 100 SQL_Lati... 0 MULTI_USER False
msdb 4 {1, 0, 0... 2010/4/2... 100 SQL_Lati... 0 MULTI_USER False
ReportSe... 5 {1, 5, 0... 2013/4/2... 100 Latin1_G... 0 MULTI_USER False
ReportSe... 6 {1, 5, 0... 2013/4/2... 100 Latin1_G... 0 MULTI_USER False
2、SQL Server 2012
SQL Server 2012仍然可以在PowerShell中執(zhí)行Invoke-Sqlcmd。也可以使用模塊中可用的命令和功能。以下命令可以列出所有SQLPS模塊中的命令和功能。
PS SQLSERVER:\> Get-Command -Module SQLPS
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-SqlAvailabilityDatabase Add-SqlAvailabilityDatabase [[-Path] <String[]>]...
Cmdlet Add-SqlAvailabilityGroupListenerStaticIp Add-SqlAvailabilityGroupListenerStaticIp [[-Path...
Cmdlet Backup-SqlDatabase Backup-SqlDatabase [-Database] <String> [[-Backu...
Cmdlet Convert-UrnToPath Convert-UrnToPath [-Urn] <String> [-Verbose] [-D...
Cmdlet Decode-SqlName Decode-SqlName [-SqlName] <String> [-Verbose] [-...
Cmdlet Disable-SqlAlwaysOn Disable-SqlAlwaysOn [[-Path] <String>] [-NoServi...
Cmdlet Enable-SqlAlwaysOn Enable-SqlAlwaysOn [[-Path] <String>] [-NoServic...
Cmdlet Encode-SqlName Encode-SqlName [-SqlName] <String> [-Verbose] [-...
Cmdlet Invoke-PolicyEvaluation Invoke-PolicyEvaluation [-Policy] <PSObject> [-A...
Cmdlet Invoke-Sqlcmd Invoke-Sqlcmd [[-Query] <String>] [-ServerInstan...
Cmdlet Join-SqlAvailabilityGroup Join-SqlAvailabilityGroup [-Name] <String> [[-Pa...
Cmdlet New-SqlAvailabilityGroup New-SqlAvailabilityGroup [-Name] <String> [[-Pat...
Cmdlet New-SqlAvailabilityGroupListener New-SqlAvailabilityGroupListener [-Name] <String...
Cmdlet New-SqlAvailabilityReplica New-SqlAvailabilityReplica [-Name] <String> [[-P...
Cmdlet New-SqlHADREndpoint New-SqlHADREndpoint [-Name] <String> [[-Path] <S...
Cmdlet Remove-SqlAvailabilityDatabase Remove-SqlAvailabilityDatabase [-Path] <String[]...
Cmdlet Remove-SqlAvailabilityGroup Remove-SqlAvailabilityGroup [-Path] <String[]> [...
Cmdlet Remove-SqlAvailabilityReplica Remove-SqlAvailabilityReplica [-Path] <String[]>...
Cmdlet Restore-SqlDatabase Restore-SqlDatabase [-Database] <String> [[-Back...
Cmdlet Resume-SqlAvailabilityDatabase Resume-SqlAvailabilityDatabase [[-Path] <String[...
Cmdlet Set-SqlAvailabilityGroup Set-SqlAvailabilityGroup [[-Path] <String>] [-Au...
Cmdlet Set-SqlAvailabilityGroupListener Set-SqlAvailabilityGroupListener [[-Path] <Strin...
Cmdlet Set-SqlAvailabilityReplica Set-SqlAvailabilityReplica [[-Path] <String>] [-...
Cmdlet Set-SqlHADREndpoint Set-SqlHADREndpoint [[-Path] <String>] [-Owner <...
Function SQLSERVER: Set-Location SQLSERVER:
Cmdlet Suspend-SqlAvailabilityDatabase Suspend-SqlAvailabilityDatabase [[-Path] <String...
Cmdlet Switch-SqlAvailabilityGroup Switch-SqlAvailabilityGroup [[-Path] <String[]>]...
Cmdlet Test-SqlAvailabilityGroup Test-SqlAvailabilityGroup [[-Path] <String[]>] [...
Cmdlet Test-SqlAvailabilityReplica Test-SqlAvailabilityReplica [[-Path] <String[]>]...
Cmdlet Test-SqlDatabaseReplicaState Test-SqlDatabaseReplicaState [[-Path] <String[]>...
如需查看某個(gè)命令的詳細(xì)技術(shù)信息,可以執(zhí)行:
PS SQLSERVER:\> Get-Help Backup-SqlDatabase -full
三、示例:備份一個(gè)數(shù)據(jù)庫(kù)
1、使用Invoke-Sqlcmd
PS SQLSERVER:\> Invoke-Sqlcmd "backup database master to disk = 'c:\backup\master.bak' "
2、SQL Server 2012 模塊中的命令
PS SQLSERVER:\> Backup-SqlDatabase -ServerInstance localhost -Database master -BackupFile "c:\backup\master.bak"
四、從SSMS啟動(dòng)PowerShell
可以在 SQL Server Management Studio 中從“對(duì)象資源管理器”啟動(dòng) Windows PowerShell 會(huì)話,加載 sqlps 模塊,并將路徑上下文設(shè)置為“對(duì)象資源管理器”樹(shù)中的相關(guān)節(jié)點(diǎn)。
注:從 SSMS 打開(kāi) PowerShell 時(shí),它不會(huì)使用管理員權(quán)限運(yùn)行,這可能會(huì)阻止某些活動(dòng)(如調(diào)用 WMI)。
本文出自 “我們一起追過(guò)的MSSQL” 博客,請(qǐng)務(wù)必保留此出處http://jimshu.blog.51cto.com/3171847/1188495
聯(lián)系客服