我正在使用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相同。
答案 0 :(得分:0)
你试过了吗?
Get-ChildItem -Path:$dir -Filter:'*.dat' | Remove-item -Force
我怀疑Test-Path
和通配符发生了奇怪的情况。使用我发布的命令,它将使用管道。如果get-childitem没有找到任何文件,则remove-item将无声地执行任何操作。如果找到文件,Remove-Item将尝试以极端偏见删除它们。