远程作用域到本地

Remote scope to local

非常感谢@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()
}

您已经从 Invoke-Command 脚本块返回 $mdtable 的值。要获得该值之外的值,只需将 Invoke-Command 的结果分配给一个变量:

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

在此示例中,$value 将包含 $mdtable 的内容。