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 中调用错误的反向数组。
我想将远程 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 中调用错误的反向数组。