PowerShell 导入 SQL Server 的 PS 模块

PowerShell 导入 SQL Server 的 PS 模块,第1张

PowerShell导入SQLServer的PS模块

接触过UNIX或Linux的朋友都知道,这类系统都有强大无所不能的Shell程序,叫做Shell。微软在2006年第四季度正式发布了PowerShell。它的出现标志着微软在服务器领域迈出了重要一步。它不仅提供了简单的图形界面,还提供了类似于Unix、Linux等 *** 作系统的强大的Shell管理模式。

经过几年的努力,微软已经逐渐开发出PowerShell对各种服务器端产品的支持。不懂PowerShell,就会被淘汰。今天,我们将了解一下SQLServer对PowerShell的支持。本质上,SQLServer2008应该是第一个支持Powershell的SQLServer版本,但是它的功能并不完善,很少有DBA会使用这个功能。在SQLServer2012中,增加了更多的cmdlet,其功能趋于完善。本文旨在介绍如何在SQLServer2012环境下通过Powershell管理SQLServer。

作者在R2SP1的WindowsServer2008上部署了SQLServer2012,并将PowerShell版本更新到V3。参见之前的博文在Windows7和WindowsServer2008R2上安装WindowsPowerShell3.0。在PowerShell环境中,输入:

Get-PSDrive

可以看到类似如下的截图:

注意:没有用于SQLServer的PSDrive。

导入SQLServer的PS模块


虽然微软针对不同的产品有自己的shell,但是这些产品都有相同的Shell环境,不同的是导入了不同的PS模块或者PowerShell插件。SQLServer2012的管理也是如此。从PowerShell管理SQLServer的方法是将SQLServer的管理模块sqlps模块导入到WindowsPowerShell环境中。此模块将加载并注册SQLServer管理单元和管理程序集。

首先以系统管理员身份启动PowerShell,点击PowerShell图标,右键“以管理员身份运行”。我们需要使用Set-ExecutionPolicycmdlet来设置相应的脚本执行策略。为了防止恶意脚本的执行,PowerShell有一个执行策略。默认情况下,此执行策略设置为Restricted,这意味着不能执行PowerShell脚本。我们可以使用Get-ExecutionPolicy查看当前的执行策略,如下图所示:

PowerShell脚本默认不允许执行,我们可以根据需要修改。可用的参数有:受限制的、远程签名的、全部签名的和不受限制的。Restricted是默认设置,脚本无法运行;RemoteSigned表示本地创建的脚本可以运行,但从Internet下载的脚本不能运行,除非它们有可信发行商签署的数字签名;AllSigned意味着只有由可信发行者签名的脚本才能运行。无限制意味着脚本可以不受限制地执行,不管它们来自哪里,也不管它们是否有签名。这是一个完全开放的策略。我们这里是作为测试环境,我就直接放了,但同时也会面临一定的安全风险。如下图所示:

接下来,您可以加载SQLPS模块。这里,我们使用导入模块cmdlet。默认情况下,将显示与Encode-Sqlname和Decode-Sqlname相关的警告。如果不想显示此类警告信息,可以使用DisableNameChecking参数,如下图所示:

此时,SQLServer组件已成功导入WindowsPowerShell环境。

SQLServerPowerShell组件


Sqlps模块加载两个WindowsPowerShell管理单元来实现相应的管理功能。其中一个叫做SQLSERVERPowerShellprovider,它允许SQLSERVER作为一个驱动器,就像我们使用的文件系统路径一样。在此路径中,驱动器与SQLServer管理对象模型相关联,节点基于对象模型类,如下图所示。Get-PSDrive可以用来列出驱动器信息,在这个图中可以看到更多的SQLServer驱动器。

用户可以使用熟悉的命令(如dir、cd、del、ren)在命令提示符窗口中定位文件夹,并对路径中的节点执行 *** 作。使用SQLServer驱动器,您可以像访问文件系统一样访问SQLServer对象,如实例名、数据库、表、关系等。我们还可以通过dir或get-chilitem查看SQLSERVER驱动器的内容。如下图所示:

甚至,我们可以使用dir命令列出该实例上的所有数据库信息,如下图所示:

如您所见,当前实例中有五个数据库:AdventureWorks、AdventureWorks2012、demo、ReportServer和ReportServerTempDB。如果不确定,可以和图形界面中的结果进行比较,如下图所示:

至于显示其他对象,如审计、可用性组、作业、登录、邮件、触发器等。, *** 作方法相同,此处不再介绍。

除了SQLServerPowerShell提供程序之外,您还可以使用cmdlet命令来管理SQLServer。SQLServercmdlet支持各种 *** 作,例如运行包含Transact-SQL或XQuery语句的sqlcmd脚本。因为命令很多,所以在使用的过程中可以通过Get-Helpcmdlet随时了解每个cmdlet的帮助信息。例如,如果需要查看Invoke-sqlcmd的帮助信息,可以看到下图:

Get-Help返回各种信息,如语法、参数定义、输入和输出类型以及cmdlet所执行 *** 作的说明。在这里,您还可以添加-Examples参数来列出相应的示例:

SQLServerPowerShell管理示例


在之前的内容中,我们了解到在PowerShell中加入了SQLServer的扩展后,SQLServerPowerShell的很多功能都是以驱动的形式出现的。SQLServerPowerShell提供程序使SQLServer看起来更像一个大磁盘驱动器,就像分析服务和数据库使这些不同的组件像“文件夹”一样。设置以“文件”的形式呈现,用户使用特殊的PowerShell命令集(如Set-ItemProperty和Get-ItemProperty)来 *** 作这些设置。此外,还提供了“动词-名词”形式的WindowsPowerShellcmdlet的单功能命令来执行相应的Transact-SQL脚本。让我们来看三个小例子:

示例1:显示当前SQLServer的服务器名称和SQLServer的版本号。使用的cmdlet是invoke-sqlcmd-query“select@@version,@@servername”在这里,我将结果临时存储在变量A中,如下图所示:

通常会立即使用输出结果,但有时,用户可能需要保存输入结果,以便以后再次使用。

示例2:列出SQLSERVER:path中数据库节点下的集合子级。在数据库节点下,存储了用户数据库的信息。我们之前只是通过cd和dir命令检查了它。下面换个方式吧。使用set-locationSQLserver:\SQL\localhost\default\databases切换到目标路径,然后通过Get-ChildItem列出内容。如下图所示:

在这个界面中,您可以看到列出的数据库信息包括数据库的名称、状态、恢复模式和排序字符。

Example3:显示指定数据库中表的信息。我这里用的数据库是demo,这个数据库里有四个表。如下图所示,首先,使用:

set-locationSQLserver:\SQL\localhost\default\databases\demo\tables切换到目标节点,然后使用Get-ChildItem列出相应的表信息。如下图所示:

如果只想在这里列出dbo模式的表呢?只需将命令改为:get-childitem|where{$_。schema-eq“dbo”},在V3版本中修改为:get-childitem|whereschema-eq“dbo”,如下图所示:

示例4:[/S2/]使用cmdlet对当前实例中的演示数据库进行完整备份,并将备份文件存储在网络路径\192.168.18.235\dbbak中。

首先,我们需要打开对象浏览器。切换要处理的对象的节点,这里切换到数据库节点即可。右键单击该对象并选择启动PowerShell。如下图所示:

然后,我们可以使用backup-sqldatabase命令来备份数据库。这个命令非常强大,所以这里我们只演示如何进行完整备份。如下图所示:

看到上面显示的结果,就说明 *** 作成功了。当然,用户也可以检查文件是否存在于目标路径中。整个命令相当简洁明了。好了,我们的演示到此结束。

SQLServer开发团队已经将PowerShell广泛集成到该产品中。管理员需要认真学习PowerShell,这对以后的发展是有好处的。各位朋友,不要轻视PowerShell,不仅是在SQLServer2012产品中,在其他微软服务器中也是如此,因为PowerShell是微软服务器管理的发展方向。让我们一起努力!



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/783670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存