Powershell 查询SQL数据库资料
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,豆子对SQL Server自带的sqlps模块并不熟悉。昨天发现Don Jones提供的一个SQL模块,理论上支持任何兼容ODBC Driver的数据库(MySQL, MSSQL, Oracle 等等
千家信息网最后更新 2025年11月07日Powershell 查询SQL数据库资料
豆子对SQL Server自带的sqlps模块并不熟悉。昨天发现Don Jones提供的一个SQL模块,理论上支持任何兼容ODBC Driver的数据库(MySQL, MSSQL, Oracle 等等),原理就是调用.Net框架的一些底层函数。使用起来很方便顺手,也不需要学习新的技能。
https://technet.microsoft.com/zh-cn/magazine/hh855069.aspx
下载以后,发现这个模块其实就只包括了两个函数,一个用来查询,另外一个用来修改删除。两个函数都只有3个参数,分别是connectionString, 需要执行的SQL语句,以及是否为SQLServer。 第一个的格式根据数据库有所不同,可以去http://www.connectionstrings.com/ 看对应的例子。 第二个就是真正执行的SQL语句,最后一个其实是个布尔值,如果输入了这个参数就是真,没输入就是假。
function Get-DatabaseData { [CmdletBinding()] param ( [string]$connectionString, [string]$query, [switch]$isSQLServer ) if ($isSQLServer) { Write-Verbose 'in SQL Server mode' $connection = New-Object -TypeName ` System.Data.SqlClient.SqlConnection } else { Write-Verbose 'in OleDB mode' $connection = New-Object -TypeName ` System.Data.OleDb.OleDbConnection } $connection.ConnectionString = $connectionString $command = $connection.CreateCommand() $command.CommandText = $query if ($isSQLServer) { $adapter = New-Object -TypeName ` System.Data.SqlClient.SqlDataAdapter $command } else { $adapter = New-Object -TypeName ` System.Data.OleDb.OleDbDataAdapter $command } $dataset = New-Object -TypeName System.Data.DataSet $adapter.Fill($dataset) $dataset.Tables[0] $connection.close()}function Invoke-DatabaseQuery { [CmdletBinding(SupportsShouldProcess=$True, ConfirmImpact='Low')] param ( [string]$connectionString, [string]$query, [switch]$isSQLServer ) if ($isSQLServer) { Write-Verbose 'in SQL Server mode' $connection = New-Object -TypeName ` System.Data.SqlClient.SqlConnection } else { Write-Verbose 'in OleDB mode' $connection = New-Object -TypeName ` System.Data.OleDb.OleDbConnection } $connection.ConnectionString = $connectionString $command = $connection.CreateCommand() $command.CommandText = $query if ($pscmdlet.shouldprocess($query)) { $connection.Open() $command.ExecuteNonQuery() $connection.close() }}下载脚本之后,重命名然后拷贝到$env:psmodulepath对应的路径上就可以使用了
现在看看怎么使用。
例如:豆子想查询一下某个数据库的备份记录。首先登陆MSSQL2012 Express的管理界面,利用T-SQL语句查询看看应该的效果。

把T-SQL的语句拷贝下来,作为传入的字符串参数,如下所示,调用第一个查询的函数
Import-Module db$ConnectionString = "server=sydav01\Sophos;database=sophos521;trusted_connection=True;"$query="SELECT TOP 100s.database_name,CAST(CAST(s.backup_size / 1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS bkSize,CAST(DATEDIFF(second, s.backup_start_date,s.backup_finish_date) AS VARCHAR(4)) + ' ' + 'Seconds' TimeTaken,s.backup_start_date,CAST(s.first_lsn AS VARCHAR(50)) AS first_lsn,CAST(s.last_lsn AS VARCHAR(50)) AS last_lsn,CASE s.[type] WHEN 'D' THEN 'Full'WHEN 'I' THEN 'Differential'WHEN 'L' THEN 'Transaction Log'END AS BackupType,s.server_name,s.recovery_modelFROM msdb.dbo.backupset swhere s.database_name='SOPHOS521'"Get-DatabaseData -connectionString $ConnectionString -isSQLServer -query $query | ft
结果如下所示

成功获取,可以看见和在图形界面下看见的结果是一样的。
附件:http://down.51cto.com/data/2367697
查询
函数
就是
语句
数据
数据库
参数
模块
两个
拷贝
界面
结果
豆子
输入
不同
成功
例子
原理
只有
图形
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发业务闭环
小金库连接服务器失败
软件开发有哪些行业
停车场服务器管理员密码
数据库一年开放几次
我的世界版拔刀剑服务器
贵州服务器硬盘报价
商丘跑腿app软件开发多少钱
深圳橙为网络技术公司
数字媒体技术网络安全
软件开发大致需要多少钱
信息会考网络技术应用试题
数据库建设是信息技术发展基础
计算机网络技术主要理论
视频管理服务器的价格
福建闪电行网络技术有限公司
数据库删除依赖语句
南京益盟软件开发公司
安徽阜新网络安全宣传
游戏数据统计数据库
网络安全防护专业人才要求
珠海来来往往网络技术公司
coc数据库查询
软件开发验收报告
广州万户网络技术有限公司邮编
山东服务器机柜经销商
网络安全素质教育试题型
卓来科技小程序app软件开发
数据库删除依赖语句
2000数据库太大