PowerShell使用Splat时能否传入数组变量?如何正确操作?
问题解答
核心结论
Splat本身完全支持传入变量,你遇到的报错和Splat语法无关,是参数取值不符合Write-DbaDbTableData的要求导致的。
错误原因
- 误用
Format-Table命令:所有Format-*系列命令的输出是用于终端展示的格式化对象,不是原始业务数据,将这类对象赋值给$DataTable传入InputObject属于无效传值。 - 冗余传参冲突:
Write-DbaDbTableData接收InputObject参数时,InputObject已经自带了对应的实例关联信息,你额外传入的SqlInstance是多实例数组,该场景下参数不支持数组类型输入,触发类型转换报错。
修正后的代码
$sqlInstance = @('servername1', 'servername2') # 直接获取原始数据,不要追加Format-Table,需要查看结果时单独执行 $sqlDbSpace | Format-Table 即可 $sqlDbSpace = Get-DbaDbSpace -SqlInstance $sqlInstance $Params = @{ InputObject = $sqlDbSpace Table = 'server.dbo.table' } Write-DbaDbTableData @Params
如果写入数据的目标实例和查询源实例不一致,显式指定单个目标实例即可:
$Params = @{ SqlInstance = '目标实例名' InputObject = $sqlDbSpace Table = '目标库.dbo.目标表' }
内容的提问来源于stack exchange,提问作者JM1
相关产品推荐
相关产品推荐

