You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQL Server查询结果存入PowerShell数组?现有代码求修正

问题分析与修正

你的代码核心错误在于最后一行的数组赋值逻辑:

  • PowerShell数组的正确初始化语法是@()而非@[]
  • 你错误地引用了SqlAdapter,实际查询结果存储在$DataSet的Tables集合中,而非适配器本身

修正后的代码

$SQLServer = 'MyServer';
$Database = 'Test';

# 连接SQL Server
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection;
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $Database; Integrated Security = True";

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
$SqlCmd.CommandText = @"
select distinct Servername from dbo.tableA
where Servername like '%hw%'
"@;
$SqlCmd.Connection = $SqlConnection;
$SqlCmd.CommandTimeout = 0;

# 提取数据
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$SqlAdapter.SelectCommand = $SqlCmd;
$DataSet = New-Object System.Data.DataSet;
$SqlAdapter.Fill($DataSet);

$SqlConnection.Close()

# 从DataSet中提取Servername列的值,转为PowerShell数组
$Servername = $DataSet.Tables[0] | Select-Object -ExpandProperty Servername

代码说明

  1. $DataSet.Tables[0]:获取查询返回的第一张数据表(你的查询只有一个结果集)
  2. Select-Object -ExpandProperty Servername:将数据表中Servername列的所有值提取出来,自动组成PowerShell数组
  3. 后续你可以直接用foreach ($server in $Servername)遍历数组

更简洁的替代方案(推荐新手使用)

如果你安装了SqlServer模块(可通过Install-Module SqlServer安装),可以用更简洁的Invoke-SqlCmd命令,省去手动处理连接和适配器的步骤:

$SQLServer = 'MyServer';
$Database = 'Test';

$query = @"
select distinct Servername from dbo.tableA
where Servername like '%hw%'
"@

$Servername = Invoke-SqlCmd -ServerInstance $SQLServer -Database $Database -Query $query | Select-Object -ExpandProperty Servername

内容的提问来源于stack exchange,提问作者Ash Atre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:10:40