Powershell不会在Local Powershell会话中显示.NET命令的远程执行输出

时间:2015-01-30 21:51:22

标签: powershell powershell-remoting

我想将远程PowerShell会话生成的错误传递回本地会话: (本作品)

Invoke-Command -Session $DevSession -ScriptBlock {sqlps -command E:\admin\DBA\Refresh_SQL_Config_Scripts.ps1 $args[0] $args[1]; $error} -args $SQLServer, $dbName -ErrorVariable +scriptDEVerror

问题:我想使用略微调整的代码以友好的可读格式获取它。我得到了我的标准结果,但$ error显示为空白。 代码在这里:

Invoke-Command -Session $DevSession -ScriptBlock {sqlps -command E:\admin\DBA\Refresh_SQL_Config_Scripts.ps1 $args[0] $args[1]; $error.tostring() } -args $SQLServer, $dbName -ErrorVariable +scriptDEVerror

甚至更好的是:

Invoke-Command -Session $DevSession -ScriptBlock {sqlps -command E:\admin\DBA\Refresh_SQL_Config_Scripts.ps1 $args[0] $args[1]; $error[0].tostring() } -args $SQLServer, $dbName -ErrorVariable +scriptDEVerror

有没有人知道如何让这个工作?

2 个答案:

答案 0 :(得分:0)

如果要向scriptDEVerror添加其他信息,如果您希望它们包含在您的ErrorVariable中,则需要确保该信息是错误的。 $error.ToString()$error[0].ToString()不是错误,而是字符串。尝试使用Write-Error将您想要的内容写入错误流,例如

Invoke-Command -Session $DevSession -ScriptBlock {sqlps -command E:\admin\DBA\Refresh_SQL_Config_Scripts.ps1 $args[0] $args[1]; Write-Error $error[0].tostring() } -args $SQLServer, $dbName -ErrorVariable +scriptDEVerror

答案 1 :(得分:0)

您无法从脚本块中的$Error[0].tostring()获取任何内容,因为Invoke-Command正在将远程会话的错误流重定向到本地会话中的错误流。您需要在那里查找错误文本:

Invoke-Command -Session $DevSession -ScriptBlock {sqlps -command E:\admin\DBA\Refresh_SQL_Config_Scripts.ps1 $args[0] $args[1] } -args $SQLServer, $dbName -ErrorVariable +scriptDEVerror
$Error[0].tostring()

编辑:根据评论:

$Error.clear()

Invoke-Command -Session $DevSession -ScriptBlock {sqlps -command E:\admin\DBA\Refresh_SQL_Config_Scripts.ps1 $args[0] $args[1] } -args $SQLServer, $dbName -ErrorVariable +scriptDEVerror

$devErrors = [array]$error
[array]::reverse($devErrors)

应该为$ devErrors中的调用提供相反的错误数组。