我想将远程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
有没有人知道如何让这个工作?
答案 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中的调用提供相反的错误数组。