2015-12-06 50 views
5

非常感謝@brianlist,我已經嘗試了您的建議,並且在使用bulkcopy時它給了我這個錯誤,不確定值是否已傳遞到$value遠程作用域到本地

Cannot convert argument "0", with value: "System.Object[]", for "WriteToServer" 
to type "System.Data.DataRow[]": "Cannot convert the "System.Data.DataRow" value 
of type "Deserialized.System.Data.DataRow" to type "System.Data.DataRow"." 
At C:\test\modified.ps1:11 char:24 
+ $bulkCopy.WriteToServer <<<< ($value) 
    + CategoryInfo   : NotSpecified: (:) [], MethodException 
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument 
Get-Content 'C:\test\computers.txt' | ? { $_.trim() -ne "" } | ForEach-Object { 
    $value = Invoke-Command -Computer $_ -ScriptBlock { 
     Param($computer) 
     #.. 
     $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
     $global:mdtable = New-Object System.Data.DataTable 
     $SqlAdapter.SelectCommand = $SqlCmd 
     $nRecs = $SqlAdapter.Fill($mdtable) 
     $mdtable 
    } -ArgumentList $_ -Credential $cred 
} | test 

Function test { 
    $Database = 'Test1' 
    $table = 'dbo.table_2' 
    $connectionstring = "Data Source=mylocal;Integrated Security=True;Initial Catalog=$Database" 
    $Conn = New-Object System.Data.SqlClient.SQLConnection($connectionstring) 
    $conn.open() 
    $bulkcopy = New-Object Data.SqlClient.SqlBulkCopy($conn) 
    $bulkcopy.DestinationTableName = $table 
    $bulkCopy.WriteToServer($value) 
    $conn.close() 
} 
+1

您應該對答案本身發表評論以討論它(也會通知答案者),但我很感謝您將錯誤編輯到問題中。它看起來像你可能返回的不僅僅是scriptblock中的$ mdtable的值。確保您使用的其他語句都不返回值。如果他們這樣做,管道到'Out-Null'來壓制它們(或者分配給'$ null')。 – briantist

+0

[也許有關](http://stackoverflow.com/q/1918190/1630171)。 –

+0

我製作了$ nRecs | Out-Null,它仍然給我同樣的錯誤。這是此腳本工作的最後一步,任何人都可以幫助我找出問題 –

回答

4

你已經從Invoke-Command腳本塊返回的$mdtable值。爲了得到那之外的價值,只是ASIGN的Invoke-Command結果給一個變量:

Get-Content 'C:\test\computers.txt'| ? {$_.trim() -ne "" } | ForEach-object{ 
    $value = Invoke-Command -Computer $_ -ScriptBlock { 
     Param($computer) 
     # ... 
     $mdtable 
    } 

在這個例子中,$value將包含$mdtable了什麼。