0

ファイルをbcpするためにinvoke-sqlcmdを使用しています。ファイルを作成する前にファイルを削除しようとした場合を除いて、すべてがフィンとダンディのように見えます。その後、ファイルが使用可能になるまでランダムな時間がかかります。理由はありますか?

コードの誤り (もちろん、 $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")
    } 

remove-item を cmd /c del に置き換えても、UNC の代わりにローカル ディレクトリを使用するのと同じように、何も変更されません。

4

1 に答える 1

0

やってみました:

Get-ChildItem -Path:$dir -Filter:'*.dat' | Remove-item -Force

Test-Pathと ワイルドカードで奇妙なことが起こっているのではないかと疑っています。私が投稿したコマンドでは、パイプラインを使用します。get-childitem でファイルが見つからない場合、remove-item は黙って何もしません。ファイルが見つかった場合、Remove-Item は極度の偏見を持ってそれらを削除しようとします。

于 2013-07-15T00:26:34.043 に答える