将Powershell错误消息写入SSI

将Powershell错误消息写入SSI,powershell,ssis,Powershell,Ssis,我有一个SSIS执行进程任务,我在其中调用PowerShell脚本。我发现,如果PowerShell脚本失败,我可以通过捕获以下错误使流程任务失败: 陷阱{ $err=$\异常 而$err.InnerException { $err=$err.InnerException 写入主机$err.Message }; 出口1 } 我希望将错误消息返回到SSIS,但似乎无法使其正常工作。它只返回以下内容: 进程退出代码为1,而预期值为0 感谢您的帮助 完整代码: Param [字符串]$excelPat

我有一个SSIS执行进程任务,我在其中调用PowerShell脚本。我发现,如果PowerShell脚本失败,我可以通过捕获以下错误使流程任务失败:

陷阱{ $err=$\异常 而$err.InnerException { $err=$err.InnerException 写入主机$err.Message }; 出口1 } 我希望将错误消息返回到SSIS,但似乎无法使其正常工作。它只返回以下内容:

进程退出代码为1,而预期值为0

感谢您的帮助

完整代码:

Param [字符串]$excelPath, [字符串]$serverName, [字符串]$databaseName, [字符串]$tableName $ErrorActionPreference='Stop' [System.Reflection.Assembly]::LoadWithPartialName'Microsoft.SqlServer.SMO'| Out Null [System.Reflection.Assembly]::LoadWithPartialName'Microsoft.SqlServer.SMO.SqlDataType'| Out Null 陷阱{ $err=$\异常 而$err.InnerException { $err=$err.InnerException 写入主机$err.Message }; 出口1 } $excel=新对象-ComObject excel.application $excel.visible=$False $excel.displayalerts=$False $workbook=$excel.Workbooks.Open$ExcelPath $workSheet=$workbook.worksheets.Item1.name $workbook.Close $excel.quit $excel=$null $query=从[$workSheet`$]中选择*; $connectionString=Provider=Microsoft.ACE.OLEDB.12.0;数据源=`$excelPath`;扩展属性=`Excel12.0XML;HDR=是`; 实例化一些需要的对象 $serverSMO=新对象Microsoft.SqlServer.Management.Smo.Server$serverName $db=$serverSMO.Databases[$databaseName]; $newTable=新对象Microsoft.SqlServer.Management.Smo.Table; $newTable.Parent=$db; $newTable.Name=$tableName; $conn=新对象System.Data.OleDb.OleDbConnection$connectionString $conn.open $cmd=新对象System.Data.OleDb.OleDbCommand$query,$conn $dataAdapter=New Object System.Data.OleDb.OleDbDataAdapter$cmd $dataTable=新对象System.Data.dataTable $dataAdapter.fill$dataTable $conn.close 如果表存在,请删除它 如果$db.Tables.包含$tableName.等于$true { $db.Tables[$tableName].Drop } 迭代DataTable对象中的列,并向SqlServer表对象添加动态命名的列。 $dataTable.Columns中的foreach$col { $sqlDataType=[Microsoft.SqlServer.Management.Smo.sqlDataType]::Varchar $dataType=新对象Microsoft.SqlServer.Management.Smo.dataType$sqlDataType; $dataType.MaximumLength=1000; $newColumn=新对象Microsoft.SqlServer.Management.Smo.Column$newTable、$col.ColumnName、$dataType; $newColumn.DataType=$DataType; $newTable.Columns.添加$newColumn; } $newTable.Create; 将bcp数据导入新表 $connectionString=数据源=$serverName;综合安全=真实;初始目录=$databaseName; $bc=新对象数据.SqlClient.SqlBulkCopy$connectionString $bc.DestinationTableName=$tableName $bc.WriteToServer$dataTable
我现在无法设置测试,因此不会回答这个问题,但您是否尝试将写入主机更改为写入错误?是的,当我这样做时,任务不再失败。如果我将其保留在写入主机,则可以在执行进程任务的StandardOutputVariable中添加一个变量。其中填充了错误消息。这似乎是一种奇怪的方式。不清楚问题出在哪里。如果这是返回的值,那么这就是由捕获的任何错误引发的ErrorRecord对象中.Exception.InnerException.Message的值。您希望获得什么样的产出,为什么?您能否发布生成所捕获错误的代码以使其可复制?我正在尝试将列数未知的excel文件导入sql表。当我无法连接到sql server时,我正在测试发生了什么。我用我的代码更新了原来的帖子。