2013-03-20 98 views
0

我正在使用Microsoft Technet的Write-datatable将Powershell结果转换为数组

但我有一个问题,我需要输入的数据不是数组格式,我相信它是一个对象,例如,

我的数据是这样的

FirstName : john 
SecondName : smith 
Number : 1234 

而且我相信我需要它看起来像这样

FirstName SecondName Number 
--------- ---------- ------ 
john   smith  1234 

任何帮助,将不胜感激

谢谢, 彼得

+0

你是如何使呼叫建立一个新的.NET数据表,然后传递数据,它的工作,谢谢?你的意见来自哪里?发布您的代码。你可以看看这里的文档:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.writetoserver.aspx SqlBulkCopy.WriteToServer,这就是脚本调用写入数据表 - 您的$ Data参数必须是可接受的类型之一。 – dugas 2013-03-20 14:44:42

+1

该脚本似乎期望以数据表的形式输入,而不是数组...。 – mjolinor 2013-03-20 14:53:40

+0

@mjolinor - 它也将采用DataRow数组和任何实现IDataReader的对象。 – dugas 2013-03-20 14:58:43

回答

0

查看Write-DataTable功能$data参数用作SqlBulkCopy类中对象的方法WriteToServer()的uniq参数。根据Microsoft文档$data应该是一个DataRow数组,一个DataTable或一个IDataReader。

enter image description here

0

所以,你有一个PowerShell的对象,我们称之为一个人的对象,有“姓”,“SecondName”的成员属性,以及“数字”。所以,当你去:

$person.FirstName 
$person.SecondName 
$person.Number 

输出应该是

John 
Smith 
1234 

你能不能做这样的事情,使人物对象到字符串数组对象

$array = @() 
$person | get-member -MemberType Property | % {$array += $person.($_.Name)} 

那会把你的数组放在一个奇怪的顺序。所以我想你会需要硬编码的顺序。

$array = @() 
$order = 'FirstName','SecondName','Number' 
$order | % {$array += $person.$_} 
0

我发现指针大家

$Data_BOX_ComputerSystem2 = New-Object System.Data.DataTable 

    $Data_BOX_ComputerSystem2.Columns.Add("Date") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("Name") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("Model") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("Manufacturer") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("Description") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("DNSHostName") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("Domain") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("DomainRole", [int]) | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("PartOfDomain") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("NumberOfProcessors", [int]) | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("SystemType") | Out-Null 
    $Data_BOX_ComputerSystem2.Columns.Add("TotalPhysicalMemory") | Out-Null 

$Data_BOX_ComputerSystem | ForEach-Object { 
    $row = $Data_BOX_ComputerSystem2.NewRow() 
    $row.Item('Date') = get-date -format G 
    $row.Item('Name') = $_.Name.ToString() 
    $row.Item('Model') = $_.Model.ToString() 
    $row.Item('Manufacturer') = $_.Manufacturer.ToString() 
    $row.Item('Description') = $_.Description.ToString() 
    $row.Item('DNSHostName') = $_.DNSHostName.ToString() 
    $row.Item('Domain') = $_.Domain.ToString() 
    $row.Item('DomainRole') = $_.DomainRole.ToString() 
    $row.Item('PartOfDomain') = $_.PartOfDomain.ToString() 
    $row.Item('NumberOfProcessors') = $_.NumberOfProcessors.ToString() 
    $row.Item('SystemType') = $_.SystemType.ToString() 
    $row.Item('TotalPhysicalMemory') = $_.TotalPhysicalMemory.ToString() 
    $Data_BOX_ComputerSystem2.Rows.Add($row)} 

    WriteDataTable server database table $Data_BOX_ComputerSystem2