我正在使用 invoke-sqlcmd 来 bcp 出一个文件。一切似乎都是鳍和花花公子,除非我在创建文件之前尝试删除它。然后在文件可用之前需要一个随机时间。任何想法为什么?
错误代码(当然,用您自己的值替换 $dir 和 $sql_srv)
$dir = "\\srv-ocmr\d$\temp\"
$sql_srv = "srv-ocmr\rec1ocm"
if (test-path $($dir+"*.dat")) {remove-item $($dir+"*.dat") } # culprit line
$str = $("bcp sysobjects out " + $dir + "so.dat -S" + $sql_srv + " -T -N " )
invoke-sqlcmd -ServerInstance $sql_srv -Query "exec xp_cmdshell '$str' " -Database master -Verbose
while (-not (test-path $($dir+"*.dat"))) {
sleep -Seconds 1
test-path $($dir+"*.dat")
}
删除罪魁祸首,瞧,一切都像魅力一样:
$dir = "\\srv-ocmr\d$\temp\"
$sql_srv = "srv-ocmr\rec1ocm"
$str = $("bcp sysobjects out " + $dir + "so.dat -S" + $sql_srv + " -T -N " )
invoke-sqlcmd -ServerInstance $sql_srv -Query "exec xp_cmdshell '$str' " -Database master -Verbose
while (-not (test-path $($dir+"*.dat"))) {
sleep -Seconds 1
test-path $($dir+"*.dat")
}
用 cmd /c del 替换 remove-item 不会改变任何东西,与使用本地目录而不是 UNC 相同。