14

我需要关于如何将 SQL 查询的输出转换为 powershell 中的字符串的输入。我目前正在执行以下操作

function ExecuteFromScriptRowset($connectionParams, $file)
{
     return (invoke-sqlcmd @connectionParams 
             -inputFile $file -MaxCharLength 8000000)
}

我使用上面的函数来调用一个 .sql 文件,它执行类似的操作

SELECT Names FROM tblXXX

这是我用来调用 SQL 存储过程的实际 powershell 代码

$output = ExecuteFromScriptRowset $someDB (Resolve-Path '.\selectXXX.sql')

输出是一个 System.Data.DataRow 数组,我需要将其转换为字符串数组。我目前正在尝试以下未按预期工作的

$formatOut = @()

for ($i=0; $i -le $output.Length; $i++)
{
    $formatOut = $formatOut + [string]$output[$i]
}

这是 $formatOut 的输出在 for 循环之后,这不是我想要的

$formatOut[0] = System.Data.DataRow
$formatOut[1] = System.Data.DataRow
$formatOut[2] = System.Data.DataRow

您能否让我知道我需要做什么,以便我创建一个包含 $output 对象内容的字符串数组

4

1 回答 1

20

您所看到的完全正常,因为默认情况下ToString会输出对象类型。这是每个 .NET 规范。

您可以DataRow使用 将 a 转换为对象数组ItemArray,然后通过 "," 或您喜欢的任何连接方法加入,如下所示:

$formatOut = $formatOut + ($output[$i].ItemArray -join ",")
于 2012-10-18T00:02:23.773 回答