Powershell - Parse System.Data.DataRow для строки
Мне нужны ваши данные о том, как преобразовать вывод из SQL-запроса в строку в powershell. В настоящее время я делаю следующее
function ExecuteFromScriptRowset($connectionParams, $file)
{
return (invoke-sqlcmd @connectionParams
-inputFile $file -MaxCharLength 8000000)
}
Я использую вышеуказанную функцию для вызова файла .sql, который делает что-то вроде
SELECT Names FROM tblXXX
Вот фактический код powershell, который я использую для вызова хранимой в SQL proc
$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
Ответы
Ответ 1
То, что вы видите, совершенно нормально, потому что по умолчанию ToString
выводит тип объекта. Это соответствует спецификациям .NET.
Вы можете преобразовать DataRow
в массив объекта с помощью ItemArray
, а затем присоединиться через "," или какой бы метод соединения вы предпочитаете, например:
$formatOut = $formatOut + ($output[$i].ItemArray -join ",")