21

I have a powershell script that executes an sql command and returns a list of ID numbers.

When I iterate through the list, this is what it returns.

System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow
System.Data.DataRow

I tried adding Out-String to my list,

$q_result = $db.ExecuteWithResults($int_cmd2)
$table = $q_result.Tables[0] | Out-String

foreach ($user_info in $table)
{
    write-host $user_info 
}

but that returns a poorly formatted list of numbers, everything is tabbed to the very right. see below.

                                                                                                      GroupID
                                                                                                      -------------
                                                                                                                381
                                                                                                                382
                                                                                                                383
                                                                                                                384
                                                                                                                385
                                                                                                                386

I tried using, $user_info.Item[0] in the loop, but that returns nothing.

How can I extract just the numbers from the list?.

cyberbemon
  • 3,000
  • 11
  • 37
  • 62

3 Answers3

32

You can also use ItemArray. Prints the entire row, while Item(index) prints the values from the indexed cell.

enter image description here

nyagolova
  • 1,731
  • 2
  • 26
  • 42
24

Item is a parameterized property, not a list you can index into:

foreach($row in $table)
{
    $row.Item("GroupID")
}

or (assuming that "GroupID" is the first column):

foreach($row in $table)
{
    $row.Item(0)
}
Mathias R. Jessen
  • 157,619
  • 12
  • 148
  • 206
4

Assuming the column name is GroupID

$sql = "SELECT [GroupID] FROM theTable"
$table = Invoke-SQLCmd -Query $sql -ServerInstance $sqlServerInstance -Database $database -OutputAs DataRows

foreach($user_info in $table)
{
    $user_info.GroupID
}

or

foreach($user_info in $table.GroupID)
{
    $user_info
}