千家信息网

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 创业天下互联网科技有限公司 和信科技工业互联网 互联网科技公司有风险吗 燊美集互联网科技有限公司 互联网第三次科技革命特征 广州燕处互联网科技有限公司 全球科技与互联网公司市值变化 互联网时代科技型公司的机会 互联网高科技行业有哪些企业 科技美学互联网 艺术 小牛互联网科技有限公司地址 什么是科技互联网 互联网是不是新科技 科技企业和互联网企业 富国互联网科技创新基金 迪庆互联网科技招生 洛阳共同富裕互联网科技有限公司 广州千川互联网科技有限公司 互联网公司属于科技吗 银川新华互联网科技学校是国营吗 北京互联网科技类企业分布
0