You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Write-SqlTableData的输出?指定输出变量始终为空

解决Write-SqlTableData无法捕获输出和错误的问题

问题原因

Write-SqlTableData这个cmdlet本身不会返回任何输出对象,所以你用-OutVariable $Out根本拿不到内容;而-InformationVariable $Info只有当cmdlet主动输出信息流内容时才会赋值,这个cmdlet默认不会产生这类输出,所以这两个变量自然为空。

正确的错误捕获与状态记录方案

要捕获导入过程中的错误并记录执行状态,需要用try/catch块配合-ErrorAction Stop参数,把cmdlet的非终止错误转为终止错误,这样才能被catch捕获。修改后的代码如下:

## Import CSV into SQL
$CsvData = Import-Csv $CsvPath -Delimiter $CsvDelimiter

# 初始化状态变量
$isImportSuccess = $true
$importError = $null

try {
    $CsvData | Write-SqlTableData `
        -ServerInstance $ServerName `
        -DatabaseName $DatabaseName `
        -SchemaName $TableSchema `
        -TableName $TableName `
        -Force `
        -ConnectionTimeout 0 `
        -ErrorAction Stop  # 强制将错误转为终止错误,触发catch
}
catch {
    $isImportSuccess = $false
    $importError = $_  # 捕获完整错误对象,包含所有错误细节
}

# 后续处理逻辑
if ($isImportSuccess) {
    Write-Host "CSV导入SQL成功完成"
}
else {
    Write-Host "导入失败!错误信息:$($importError.Message)"
    # 如需查看错误堆栈,可使用 $importError.ScriptStackTrace
    # 如需查看底层异常,可使用 $importError.Exception
}

关键说明

  1. 不需要再用-OutVariable和-InformationVariable,这两个参数对Write-SqlTableData无效。
  2. $importError变量里存储的是完整的PowerShell错误对象,你可以从中提取错误消息、堆栈跟踪、底层异常等信息。
  3. $isImportSuccess变量可以替代返回码的作用,用来判断导入是否成功;也可以用$?变量(在try块执行后,$?会返回$true或$false表示上一条命令是否成功),但try/catch的方式更直观,也能直接捕获错误细节。

内容的提问来源于stack exchange,提问作者Herb Farr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:07:13