2013-03-20 132 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