如何将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
代码说明
$DataSet.Tables[0]:获取查询返回的第一张数据表(你的查询只有一个结果集)Select-Object -ExpandProperty Servername:将数据表中Servername列的所有值提取出来,自动组成PowerShell数组- 后续你可以直接用
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
相关产品推荐
相关产品推荐

