33. PowerShell -- SQL Server的使用

  • PowerShell --  SQL Server的使用 (1)

一、概述

  SQL Server 2012 提供了一个名为 sqlps 的 Windows PowerShell 模块,该模块用于将 SQL Server 组件导入到 Windows PowerShell 2.0 环境或脚本中。sqlps 模块提供一组 SQL Server cmdlet ,支持各种操作,如运行包含 Transact-SQL 或 XQuery 语句的 sqlcmd 脚本。

二、加载模块

1、SQL Server 2008 R2 插件

  从 SQL Server 2005 开始,就提供了一个 Invoke-Sqlcmd 的 Cmdlet,功能类似于早期的SQLCMD,可以直接运行。SQL Server 2008 默认的安装路径为C:\Program Files\Microsoft SQL Server\100\Tools\Binn。运行SQLPS.exe,直接进入名为“SQLSERVER:”的命名空间。

  也可以在 Windows PowerShell 中手动加载插件。

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,默认安装路径为 C:\Program Files\Microsoft SQL Server\110\Tools\Binn ,版本为11.0.2100.60 。

  SQL Server 2012 以模块的形式存在,可以在PowerShell 手动加载SQLPS模块,实现在PowerShell 访问 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

执行策略更改
执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_Execution_Policies
帮助主题中所述的安全风险。是否要更改执行策略?
[Y] 是(Y)  [N] 否(N)  [S] 挂起(S)  [?] 帮助 (默认值为“Y”): y

PS C:\Users\Administrator> Import-Module SQLPS
警告: 本地计算机没有 Analysis Services 的活动实例。
警告: 有些导入的命令名包含未批准的动词,这些动词可能会导致命令名不易被发现。请使用 Verbose
参数了解详细信息,或键入 Get-Verb 查看已批准的动词列表。

PS SQLSERVER:\>

  :加载了模块之后,提示符显示已经切换到名为“SQLSERVER:”的命名空间。

  在导入模块时可以指定参数,隐藏警告信息。例如:

PS C:\Users\Administrator> Import-Module SQLPS -DisableNameChecking

三、执行一个查询

1、SQL Server 2008 R2 

  下面的例子是执行一个简单的查询,数据库实例为本机(localhost)的默认实例,使用Windows集成身份验证,访问的数据库是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中执行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[]>...

  如需查看某个命令的详细技术信息,可以执行:

PS SQLSERVER:\> Get-Help Backup-SqlDatabase -full

三、示例:备份一个数据库 

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启动PowerShell

  可以在 SQL Server Management Studio 中从“对象资源管理器”启动 Windows PowerShell 会话,加载 sqlps 模块,并将路径上下文设置为“对象资源管理器”树中的相关节点。

  :从 SSMS 打开 PowerShell 时,它不会使用管理员权限运行,这可能会阻止某些活动(如调用 WMI)。

  • PowerShell -- SQL Server的使用 (2)

一、安装PowerShell for SQL Server 2008 插件

  两种方法:

1、安装SQL Server Management Studio

  使用SQL Server 2008 R2的安装光盘,安装SSMS,即可将所需的插件全部安装并自动注册。

2、手动安装插件

  下载SQL Server 2008 R2 SP2 功能包 http://www.microsoft.com/zh-cn/download/details.aspx?id=30440

  依次下载并安装 SQLSysClrTypes、SharedManagementObjects、PowerShellTools 共3个安装包。注意:有3种版本供下载,x86、x64、IA64,注意区分版本。

  从安装了SQL Server 2008 R2的服务器上复制 C:\Program Files\Microsoft SQL Server\100\Tools\Binn 目录下的2个文件:Microsoft.SqlServer.Management.PSProvider.dll、Microsoft.SqlServer.Management.PSSnapins.dll 。将这2个文件复制到 C:\sql2008文件夹。

  注意:如果是x64操作系统,上述2个文件位于 C:\Program Files(x86)\Microsoft SQL Server\100\Tools\Binn 。

  “以管理员身份运行”打开PowerShell。安装插件:

PS C:\Windows\system32> Set-ExecutionPolicy Remotesigned -Force
PS C:\Windows\system32> Set-Alias installutil $env:windir\microsoft.net\framework\v2.0.50727\installutil
PS C:\Windows\system32> installutil -i "C:\sql2008\Microsoft.SqlServer.Management.PSProvider.dll"
Microsoft (R) .NET Framework 安装实用工具版本 2.0.50727.4927
版权所有(C) Microsoft Corporation。保留所有权利。

正在运行事务处理安装。

正在开始安装的“安装”阶段。
查看日志文件的内容以获得 C:\sql2008\Microsoft.SqlServer.Management.PSProvider.dll 程序集的进度。
该文件位于 C:\sql2008\Microsoft.SqlServer.Management.PSProvider.InstallLog。
正在安装程序集“C:\sql2008\Microsoft.SqlServer.Management.PSProvider.dll”。
受影响的参数是:
   logtoconsole =
   assemblypath = C:\sql2008\Microsoft.SqlServer.Management.PSProvider.dll
   i =
   logfile = C:\sql2008\Microsoft.SqlServer.Management.PSProvider.InstallLog

“安装”阶段已成功完成,正在开始“提交”阶段。
查看日志文件的内容以获得 C:\sql2008\Microsoft.SqlServer.Management.PSProvider.dll 程序集的进度。
该文件位于 C:\sql2008\Microsoft.SqlServer.Management.PSProvider.InstallLog。
正在提交程序集“C:\sql2008\Microsoft.SqlServer.Management.PSProvider.dll”。
受影响的参数是:
   logtoconsole =
   assemblypath = C:\sql2008\Microsoft.SqlServer.Management.PSProvider.dll
   i =
   logfile = C:\sql2008\Microsoft.SqlServer.Management.PSProvider.InstallLog

“提交”阶段已成功完成。

已完成事务处理安装。
PS C:\Windows\system32> installutil -i "C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.dll"
Microsoft (R) .NET Framework 安装实用工具版本 2.0.50727.4927
版权所有(C) Microsoft Corporation。保留所有权利。

正在运行事务处理安装。

正在开始安装的“安装”阶段。
查看日志文件的内容以获得 C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.dll 程序集的进度。
该文件位于 C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.InstallLog。
正在安装程序集“C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.dll”。
受影响的参数是:
   logtoconsole =
   assemblypath = C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.dll
   i =
   logfile = C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.InstallLog

“安装”阶段已成功完成,正在开始“提交”阶段。
查看日志文件的内容以获得 C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.dll 程序集的进度。
该文件位于 C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.InstallLog。
正在提交程序集“C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.dll”。
受影响的参数是:
   logtoconsole =
   assemblypath = C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.dll
   i =
   logfile = C:\sql2008\Microsoft.SqlServer.Management.PSSnapins.InstallLog

“提交”阶段已成功完成。

已完成事务处理安装。
PS C:\Windows\system32> Get-PSSnapin -Registered

Name        : SqlServerCmdletSnapin100
PSVersion   : 2.0
Description : This is a PowerShell snap-in that includes various SQL Server cmdlets.

Name        : SqlServerProviderSnapin100
PSVersion   : 2.0
Description : SQL Server Provider

PS C:\Windows\system32>

二、PowerShell 访问 SQL Server 2008

1、加载插件 

PS C:\Windows\system32> Add-PSSnapin -Name SqlServerCmdletSnapin100
PS C:\Windows\system32> Add-PSSnapin -Name SqlServerProviderSnapin100

2、执行查询 

PS C:\Windows\system32> Invoke-Sqlcmd -Query " Select GETDATE() AS ServerTime " -ServerInstance "192.168.159.130" -Database master -Username sa -Password SaPassword123

ServerTime
----------
2013/5/6 13:38:24

三、使用计划任务

  在本例中,将添加一个计划任务。实现的功能:每隔15分钟访问一次远程的192.168.159.130 服务器上的 SQL Server 默认实例。然后将访问的结果输出到一个文本文件monitor.txt 中。

1、验证插件

PS C:\Windows\system32> Get-PSSnapin -Registered

Name        : SqlServerCmdletSnapin100
PSVersion   : 2.0
Description : This is a PowerShell snap-in that includes various SQL Server cmdlets.

Name        : SqlServerProviderSnapin100
PSVersion   : 2.0
Description : SQL Server Provider

2、创建任务

  打开PowerShell ICE,创建一个名为monitordb.ps1文件。内容如下:

try
{
 Add-PSSnapin -Name SqlServerCmdletSnapin100
}
catch
{
   
}
try
{
 Add-PSSnapin -Name SqlServerProviderSnapin100
}
catch
{
   
}

Invoke-Sqlcmd -Query " Select GETDATE() AS ServerTime " -ServerInstance "192.168.159.130" -Database master -Username sa -Password SaPassword123 | Out-File -FilePath C:\sql2008\monitor.txt -Append

3、创建计划

  以Windows 7为例,打开“管理工具”中的“任务计划程序”。创建一个任务。

  输入任务的名称,并设定使用哪个帐户运行该任务。如要需要“以管理员身份运行”,则请勾选“使用最高权限运行”选项。

  新建一个触发器,设置为每隔15分钟运行一次。

  新建一个操作。例如: powershell -File "C:\sql2008\monitordb.ps1" 。

  可以将程序与参数都写在同一个输入框,系统会自动识别并分割程序与参数。

  在“新建任务”对话窗口点“确定”,这时候会要求输入运行该任务的帐号所对应的密码。

4、验证计划任务

  在“活动任务”列表中检查刚才创建的任务。

  等候2、3个运行周期之后,再打开 C:\SQL2008文件夹,检查该任务写入的文本文件。

四、SQL Server 2012

  参考 http://technet.microsoft.com/zh-cn/magazine/hh855069.aspx

  例如:

PS SQLSERVER:\> Get-DatabaseData -verbose -connectionString ‘Server=localhost;Database=db01;Trusted_Connection=True;‘ -isSQLServer-query "SELECT GETDATE() as ServerTime"

  • PowerShell -- SQL Server的使用之连接SQL Server (3)

PowerShell相比其他脚本语言来说最大优点在于可以直接使用.Net提供的类库, 这样可以大大减轻程序员学习PowerShell的难度.

下面是一个简单的连接SQL Server 2005的例子:

# 创建数据库连接串
# Data Source 表示要连接的数据库, tcp表示tcp协议, (local)表示连接本地数据库
# Integrated Security 表示连接数据库的认证方法, 我使用的是推荐的Windows Account Credential.
$SqlConn = [System.Data.SqlClient.SqlConnection] "Data Source=tcp:(local);Integrated Security=SSPI;"

# 打开数据库连接
$SqlConn.Open();

# 确认状态
$SqlConn.State;

# 切换到数据库 tma
$SqlConn.ChangeDatabase(‘tma‘);

# 确认切换到指定的数据库
$SqlConn.Database;

# 创建一个绑定到此连接的SqlCommand对象, 你可以简单想象SqlCommand就是你平时用的SQL企业管理器或任何可以执行SQL语句的工具
$CC = $SqlConn.CreateCommand();

# 设置我们要进行的查询
$CC.CommandText = "SELECT 1"

# 因为这是一个标量结果, 因此调用ExecuteScalar即可
$CC.ExecuteScalar();

参考:

http://jimshu.blog.51cto.com/3171847/1193985

时间: 2024-10-05 07:10:28

33. PowerShell -- SQL Server的使用的相关文章

SQL Server 2012笔记分享-33:SQL Server profiler跟踪

需求 使用SQL server profiler跟踪当前实例的所有常见活动,并将结果保存到文件中. ================================================================ 开始程序中选择SQL server profiler,如图. 选择文件--新建跟踪,如图. 连接到当前的SQL server实例,如图. 在跟踪属性里面配置跟踪名称.保存到的文件地址.保存到SQL报表.启用跟踪停止时间等,如图. 下图是一个跟踪启动后实时的跟踪情况,如图

34. PowerShell -- SQL Server的使用(2)

参考: http://www.shangxueba.com/jingyan/105946.html 一.先不用SqlServerCmdletSnapin100这个SnapIn来写几个操作常用数据的脚本 1. 由于有读者问如何用PowerShell显示数据库中表,以下是一个简单函数供参考 #==============================================# SQL Server 2008 - PowerShell# 显示用户表#zivsoft#=============

powershell玩转SQL SERVER所有版本

微软发布了最新的powershell for sql server 2016命令行客户端库.文章介绍了与之相关的实用方法. powershell 传教士 原创文章 2016-06-05,2016-06-30改 允许转载,但必须保留名字和出处,否则追究法律责任 powershell,sql server,2016,功能包,客户端,下载 powershell玩sql server就是比powershell玩mysql强! 问:那么问题来了,强在哪? 答:微软给我们做好了powershell+sqls

SQL Server 2008 R2升级到SQL Server 2012 SP1

1.建议对生产环境对的数据库升级之前做好备份,以防不测. 2.从SQL Server 2008 R2 升级到SQL Server 2012 SP1,需要先安装SQL Server 2008 R2 的SP1 或SP2 补丁包,在此运行安装已经下载好的SP2 补丁包,如图 3. SQL Server 2008 R2 更新运行检查,如图 4. 接受许可条款,如图 5. 选择功能,如图 6. 检查正在使用的文件,如图 7. 已准备好更新,选择"更新",如图 8. 更新完成,选择"关闭

SQL Server错误收集#3

错误#1 16:50 2014-5-20安装好数据库(08R2),启动数据库代理服务失败,当时也没在意.后来装上SQL12,再次启动数据库代理依旧失败.不能再得过且过,该找找具体原因了.查看SQLAGENT代理日志: 2014-05-20 16:51:33 - ? [100] Microsoft SQLServerAgent 版本 11.0.2100.60 (内部版本号 x86 unicode 零售): 进程 ID 3076 2014-05-20 16:51:33 - ? [495] SQL S

P6 Professional Installation and Configuration Guide (Microsoft SQL Server Database) 16 R1

P6 Professional Installation and Configuration Guide (Microsoft SQL Server Database) 16 R1       May 2016 Contents About This Guide...................................................................................... 11 Shared Topics in This Guide .

安装 SQL Server 2012 的硬件和软件要求(官方全面)

以下各节列出了安装和运行 SQL Server 2012 的最低硬件和软件要求. Hardware and Software Requirements (PowerPivot for SharePoint and Reporting Services in SharePoint Mode).' data-guid="ac62f277a77cf0fe4624123fb93d4313">有关 SharePoint 集成模式下 Analysis Services 的要求的详细信息,请参

sql server DateTime 取时间间隔不是1毫秒,时间间隔是3.33毫秒,3.33ms C#开发

sql server  DateTime 取时间的间隔是3.33毫秒(3.33ms),所以如果增加1毫秒,数据库默认时间没有增加 C#开发时 DateTime dt=new DateTime(); dt=DateTime.Now; dt=dt.AddMilliseconds(1) ; // dt 的值在数据库没有变化,时间差是1毫秒,sqlserver 默认时间没有增加 dt=dt.AddMilliseconds(3) ;//dt的值在数据库增加3毫秒  获取到的时间差是3毫秒

使用Powershell管理Linux 下的 SQL Server

我们上一篇文章介绍了在Centos 7.3下安装及配置 SQL Server,今天我们主要介绍的是如何在Windows下使用Powershell来管理Linux下的SQL Server,其实说到Powershell大家都已经很熟悉了,Powershell不止是命令集合也是批量程序,可以很好的协助管理员提高日常的运维工作,但是微软的Powershell有一个毛病就是不同的服务需要安装不同的Powershell,对于Lync下的Shell.Exchange Shell和系统自带的Powershell