J'utilise invoke-sqlcmd pour sortir un fichier bcp. Tout semble être des ailettes et dandy, sauf lorsque j'essaye de supprimer le fichier avant de le créer. Cela prend ensuite un temps aléatoire avant que le fichier ne soit disponible. Des idées pourquoi?Invoke-sqlcmd comportement inattendu
défectueux Code (ne remplacez $ dir et sql_srv $ avec vos propres valeurs, bien sûr)
$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")
}
Retirez la ligne coupable, et le tour est joué, tout fonctionne comme un charme:
$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")
}
Remplacer remove-item par cmd/c del ne change rien, la même chose en utilisant un répertoire local au lieu d'un UNC.
Je ne parviens pas à reproduire le problème. Combien de temps cela prend-il avant que le fichier soit disponible? – Aryadev
Pourquoi exécutez-vous PowerShell pour indiquer à SQL Server d'utiliser 'xp_cmdshell' pour exécuter une commande shell? Pourquoi ne pas simplement exécuter votre script via remote sur le serveur exécutant 'bcp' directement depuis PowerShell? – alroc
Arya: il faut un temps aléatoire entre 4 et 15 secondes avant que le chemin de test évalue à vrai. – m1ghtyBear