2012-10-17 18 views
12

Ho bisogno dei tuoi input su come convertire l'output da una query SQL in una stringa in PowerShell. Attualmente sto facendo quanto seguePowershell - Parse System.Data.DataRow to String

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

Io uso la funzione di cui sopra per chiamare un file sql che fa qualcosa di simile

SELECT Names FROM tblXXX 

Ecco il codice PowerShell vero che io uso per invocare il proc SQL memorizzata

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

L'output è un array di System.Data.DataRow che ho bisogno di convertire in un array di stringhe. Attualmente sto cercando fuori la seguente che non sta funzionando come previsto

$formatOut = @() 

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

Ecco l'output di $ formatOut è dopo il ciclo e questo non è quello che cercavo

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

Could You per favore fatemi sapere cosa devo fare in modo che crei un array di stringhe del contenuto dell'oggetto $ output

risposta

19

Quello che state vedendo è completamente normale, perché di default ToString emetterà il tipo di oggetto. Questo è secondo le specifiche di .NET.

È possibile convertire un DataRow a schiera di oggetto utilizzando ItemArray, e quindi unire via "" o qualsiasi uniscono il metodo che preferite, in questo modo:

$formatOut = $formatOut + ($output[$i].ItemArray -join ",")