Powershell 查询SQL数据库资料
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,豆子对SQL Server自带的sqlps模块并不熟悉。昨天发现Don Jones提供的一个SQL模块,理论上支持任何兼容ODBC Driver的数据库(MySQL, MSSQL, Oracle 等等
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
上海睿民互联网科技有限公司
互联网科技工作委员会
涨乐互联网科技
重庆互联网络科技
互联网科技公司官网
友谊互联网络科技
润盈互联网科技
科技大学互联网专业好不好
新华互联网科技2019
创业天下互联网科技有限公司
和信科技工业互联网
互联网科技公司有风险吗
燊美集互联网科技有限公司
互联网第三次科技革命特征
广州燕处互联网科技有限公司
全球科技与互联网公司市值变化
互联网时代科技型公司的机会
互联网高科技行业有哪些企业
科技美学互联网 艺术
小牛互联网科技有限公司地址
什么是科技互联网
互联网是不是新科技
科技企业和互联网企业
富国互联网科技创新基金
迪庆互联网科技招生
洛阳共同富裕互联网科技有限公司
广州千川互联网科技有限公司
互联网公司属于科技吗
银川新华互联网科技学校是国营吗
北京互联网科技类企业分布