2011-08-11 1 views
7

Je vois une condition de concurrence lorsque j'appelle New-Item pour créer un répertoire sur une machine étrangère en utilisant un chemin UNC. Le code est ci-dessous:Condition de compétition créant un répertoire avec un nouvel article?

New-Item $target -itemType Directory -Force -Verbose | 
     %{ Write-Host "Creating dir" $_.FullName } 

L'utilisation de Test-Path immédiatement après renvoie false. Je mets un Test-Path -> sleep pendant 1 seconde retry loop et après avoir dormi pendant 1 seconde, Test-Path retourne true.

New-Item est-il un appel bloquant? Devrais-je attendre d'avoir à attendre après avoir appelé New-Item?

+1

Je n'ai aucun problème et obtient un résultat de true: md \\ server \ share \ newFolder; test-path \\ server \ share \ newFolder –

+1

Idem, pas de problème ici pour créer des répertoires et tester 50 fois de suite. Peut-être que votre partage réseau a quelque chose d'inhabituel (comme une couche de mise en cache)? –

+2

@Niall Faites-vous cela contre un partage DFS? mais pourquoi tu irais à des parts différentes d'une instruction à l'autre je ne sais pas ... – Matt

Répondre

0

Je ne peux pas reproduire votre problème.

PS > New-Item "test" -itemType Directory -Force -Verbose | %{ Test-Path $_.FullName } 
VERBOSE: Performing the operation "Create Directory" on target "Destination: C:\Users\Frode\Desktop\test". 
True 

New-Item crée un nouveau répertoire en obtenant un DirectoryInfo -object pour le répertoire parent, et de l'appeler est CreateSubDirectory, comme:

DirectoryInfo subdirectory = new DirectoryInfo(parentPath).CreateSubdirectory(childName); 

Je ne suis pas développeur, mais autant que je sache cela signifie qu'il est un appel bloquant, puisqu'il attend un objet DirectoryInfo en retour. Donc, mabe le problème est avec votre sous-système de stockage.

0

Essayez d'exécuter la commande New-Item dans un autre processus et attendez qu'il:

Start-Process powershell -Argument "-Command `"New-Item `"$myNewDir`" -ItemType `"directory`"`"" -NoNewWindow -Wait

je en train d'écrire un script qui créeraient un dossier, puis écrire une archive 7zip dans le dossier, mais 7zip se plaignait que le répertoire n'existait pas. Cela semblait fonctionner autour de la question.

Questions connexes