PowerShell连接SQL SERVER数据库进行操作的实现代码
核心代码
#配置信息 $Database ='DemoDB' $Server ='"WIN-AHAU9NO5R6U\DOG"' $UserName ='kk' $Password ='123456' #创建连接对象 $SqlConn=New-ObjectSystem.Data.SqlClient.SqlConnection #使用账号连接MSSQL $SqlConn.ConnectionString="DataSource=$Server;InitialCatalog=$Database;userid=$UserName;pwd=$Password" #或者以windows认证连接MSSQL #$SqlConn.ConnectionString="DataSource=$Server;InitialCatalog=$Database;IntegratedSecurity=SSPI;" #打开数据库连接 $SqlConn.open() #执行语句方法一 $SqlCmd=New-ObjectSystem.Data.SqlClient.SqlCommand $SqlCmd.connection=$SqlConn $SqlCmd.commandtext='deletetop(1)fromdbo.B' $SqlCmd.executenonquery() #执行语句方法二 $SqlCmd=$SqlConn.CreateCommand() $SqlCmd.commandtext='deletetop(1)fromdbo.B' $SqlCmd.ExecuteScalar() #方法三,查询显示 $SqlCmd.commandtext='selectname,recovery_model_desc,log_reuse_wait_descfromsys.databases' $SqlAdapter=New-ObjectSystem.Data.SqlClient.SqlDataAdapter $SqlAdapter.SelectCommand=$SqlCmd $set=New-Objectdata.dataset $SqlAdapter.Fill($set) $set.Tables[0]|Format-Table-Auto #关闭数据库连接 $SqlConn.close()
下面是来自微软的官方帮助文档:WindowsPowerShell:使用PowerShell处理数据库
您可以使用一些WindowsPowerShell代码来配置您的数据库,以存储您所需的信息。
DonJones
数据库是数据存储之王。那么为什么不利用这些数据库,如SQLServer存储一些可以使您的生活更轻松的管理信息的呢?您可以存储服务器名称、Windows版本、服务包级别、最后一个管理员登录、这种东西。
它是与WindowsPowerShell,都是很容易,因为您可以使用它来本机访问Microsoft基础数据库功能。NET框架。这现在看上去不太像WindowsPowerShell脚本和更多像一个C#程序。不过,您所需要的代码是很容易模板。你可以带我来你这里与几个次要的改变它适应几乎任何情况。
用于SQL脚本
让我们假设您有一个名为SYSINFO的SQLServer2008数据库。数据库已命名服务器的表。该表已五列:服务器名称、用户名、LastLogon、原因和SPVersion。这可以是大多是简单的文本列的varchar类型。
然而,使LastLogon日期时间列。它现在使用SQLServer设置为其默认值的函数。这样,每次添加新行,它将包含当前日期和时间,而不需要您手动指定。使原因列varchar(MAX),如有必要,它可以包含文本,很多。
创建登录脚本在组策略对象(GPO),将GPO链接到您的服务器所在的组织单位(OU)。每次有人登录到服务器运行该脚本时。使用WindowsPowerShell脚本,您可以在任何装有WindowsPowerShell2.0的计算机上的东西。您需要确保您已经从WindowsServer2008R2(或Windows7远程服务器管理工具包或寄宿)来编辑该GPO时有基于WindowsPowerShell登录脚本选项的GPO模板。
这里是您需要的脚本。请注意我使用↵来指示应在此按enter键。仅按enter键时你来该符号,如果您希望它能正常工作(您可以将复制的HTML使用符号↵实体):
$reason=Read-Host'Reasonareyouloggingon'↵ $reason.replace("'","''")↵
这两行提示有人为他们正在登录到服务器的原因——这一点是相当重要的跟踪。替换功能会将任何单引号替换使用两个单引号,确保我们稍后构建的SQL语句将正常工作。这并不被为了故意SQL注入式攻击的防范。毕竟,我们谈论受信任的管理员,正确吗?
此线将检索操作系统的信息:
$os=GetWmiInfoWin32_OperatingSystem↵
在这里重要的数据是服务器的名称和其当前的服务包版本。您可能还需要BuildNumber属性,告诉您您正在处理的Windows版本。
此线加载的一部分。负责处理数据库的.NET框架:
[assembly.reflection]::loadwithpartialname('System.Data')↵
这些行创建新的数据库连接:
$conn=New-ObjectSystem.Data.SqlClient.SqlConnection↵ $conn.ConnectionString="DataSource=SQLSERVER;InitialCatalog=SYSINFO;IntegratedSecurity=SSPI;"↵
如果您不使用SQLServer2008,连接字符串可能会有点不同(访问ConnectionStrings.com来查找各种不同的数据库的连接字符串示例):
$conn.open()↵
现在该连接是打开并可供使用。
这两条线创建是我将使用SQL服务器发送查询的SQL命令。我已经设置其连接属性设置为"打开",以便WindowsPowerShell已实际发送命令的方式:
$cmd=New-ObjectSystem.Data.SqlClient.SqlCommand↵ $cmd.connection=$conn↵
这所有辛勤的工作。它创建一个SQL"插入"查询到数据库表中插入新行。请注意我使用–f格式设置运算符将四条信息插入到查询。信息被插入{x}占位符,它提供如下操作员的逗号分隔列表中的顺序相同:
$cmd.commandtext="INSERTINTOservers(servername,username,spversion,reason)VALUES('{0}','{1}','{2}','{3}')"-f $os.__SERVER,$env.username,$os.servicepackmajorversion,$reason↵
现在我会执行查询,并关闭数据库连接:
$cmd.executenonquery()↵ $conn.close()↵
请确保您关闭该连接或你得打你一顿头的后面的数据库管理员。您将看到对ConnectionStrings.com,您可以访问大量的数据库。
如果您使用SQLServer以外,你得改改"OleDb"对象名称"SqlClient"部分。此外,它已不推荐使用基于文件的数据库访问像。为之一,以获取驱动程序,你得要上安装,访问您的服务器,这将是一个可怕的想法。另一种,这些数据库的性能达不到您将需要为此工作好的水平。
如果你没有可以承载数据库的SQLServer实例,获取一份快递版安装的地方。这足够低的这种技术将可能产生的交通。
很明显,您可以修改此做相当多的技术。可以将列添加到数据库,并让您的脚本收集其他信息。您需要做的一件事是精通SQL语言本身。您不需要的大师,但你要能够编写基本的查询。
如果您需要上(在此级别工作的几乎相同每个主要的数据库平台)的SQL语言入门,签出这视频系列创建行业标准SQL语言提供了完整的教程。它还包括像SQLServer、Oracle、MySQL平台之间的主要差异,等等。
这里是整个脚本:
$reason=Read-Host'Reasonareyouloggingon'↵ $reason.replace("'","''")↵ $os=Get-WmiInfoWin32_OperatingSystem↵ [assembly.reflection]::loadwithpartialname('System.Data')↵ $conn=New-ObjectSystem.Data.SqlClient.SqlConnection↵ $conn.ConnectionString="DataSource=SQLSERVER;InitialCatalog=SYSINFO;IntegratedSecurity=SSPI;"↵ $conn.open()↵ $cmd=New-ObjectSystem.Data.SqlClient.SqlCommand↵ $cmd.connection=$conn↵ $cmd.commandtext="INSERTINTOservers(servername,username,spversion,reason)VALUES('{0}','{1}','{2}','{3}')"-f$os.__SERVER,$env.username,$os.servicepackmajorversion,$reason↵ $cmd.executenonquery()↵ $conn.close()↵