将Powershell结果转换为数组

时间:2013-03-20 14:38:15

标签: arrays powershell datatable

我正在使用Microsoft Technet的Write-datatable

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

我的数据看起来像这样

FirstName : john  
SecondName : smith  
Number : 1234  

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

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

非常感谢任何帮助

谢谢, 彼得

3 个答案:

答案 0 :(得分:0)

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

enter image description here

答案 1 :(得分:0)

所以你有一个powershell对象,我们称之为person对象,它具有'FirstName','SecondName'和'Number'的成员属性。所以当你去的时候:

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

输出应为

John
Smith
1234

你不能做这样的事情来使person对象成为一个字符串对象数组

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

这将使您的阵列处于一个奇怪的顺序。所以我想你需要对订单进行硬编码。

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

答案 2 :(得分:0)

我发现创建一个新的.NET数据表,然后将数据传递给它工作,感谢大家指点

    $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