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

Powershell does not display remoted executed outputs of .NET commands in Local Powershell session

我想将远程 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

有谁知道让这个工作的方法吗?

如果您想向 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

您没有从脚本块内的 $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 中调用错误的反向数组。