如何将SQL查询结果提取到PowerShell变量中?
如何将SQL查询结果提取到PowerShell变量中
嘿,看你已经写了大半的PowerShell脚本啦,只差最后几步就能把SQL查询结果存到变量里!我来帮你补全并把逻辑讲清楚:
首先,补全你的脚本,把查询结果存入DataTable变量(这是PowerShell里处理表格类数据的常用方式):
$SQLServer = "sqldev1" $SQLDBName = "SPDEV_Printing" $SqlQuery = "select * from PcBeheerPrinter WHERE PRT_name = 'bwpsc006'" $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True" $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $SqlCmd.CommandText = $SqlQuery $SqlCmd.Connection = $SqlConnection # 新增核心部分:创建数据适配器和数据表,填充查询结果 $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($SqlCmd) $DataTable = New-Object System.Data.DataTable $SqlAdapter.Fill($DataTable) | Out-Null # 用Out-Null屏蔽填充时返回的行数提示 # 现在$DataTable就是存储所有查询结果的变量了
接下来,你可以根据查询结果的数量灵活使用这个变量:
如果查询返回单条记录:直接通过行索引+列名提取值,比如:
# 获取打印机名称 $printerName = $DataTable.Rows[0]["PRT_name"] # 获取打印机位置(假设表中有这个列) $printerLocation = $DataTable.Rows[0]["PRT_location"]如果查询返回多条记录:用循环遍历每一行处理,比如:
foreach ($row in $DataTable.Rows) { Write-Host "打印机:$($row["PRT_name"]),状态:$($row["PRT_status"])" # 也可以把每行数据转成自定义对象存入变量 $currentPrinter = [PSCustomObject]@{ Name = $row["PRT_name"] Status = $row["PRT_status"] } # 后续可以对$currentPrinter做更多操作 }
另外,如果你想写更简洁的代码,还可以用Invoke-SqlCmd cmdlet(需要先安装SqlServer模块),代码会短很多:
# 首次使用先安装模块(仅需一次) # Install-Module -Name SqlServer -Scope CurrentUser $results = Invoke-SqlCmd -ServerInstance "sqldev1" -Database "SPDEV_Printing" -Query "select * from PcBeheerPrinter WHERE PRT_name = 'bwpsc006'" # $results是对象数组,每一行对应一个对象,直接通过属性名取值 $printerName = $results.PRT_name
Invoke-SqlCmd返回的结果是自定义对象,列名就是对象的属性,用起来会更直观哦~
内容的提问来源于stack exchange,提问作者Lightninstu




