2011-08-11 6 views
7

Estoy viendo una condición de carrera cuando llamo a New-Item para crear un directorio en una máquina extranjera usando una ruta UNC. El código está a continuación:¿Condición de carrera para crear un directorio con New-Item?

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

El uso de Test-Path inmediatamente después devuelve falso. Puse una ruta de prueba -> reposo durante 1 segundo reintento de bucle y, después de dormir durante 1 segundo, la ruta de prueba devuelve verdadera.

¿Es el artículo nuevo una llamada de bloqueo? ¿Debería esperar tener que esperar después de llamar a New-Item?

+1

No tengo problemas y obtengo un resultado verdadero: md \\ server \ share \ newFolder; test-path \\ server \ share \ newFolder –

+1

Ídem, no hay problema aquí creando directorios y pruebas 50 veces en rápida sucesión. Tal vez haya algo inusual en su recurso compartido de red (como una capa de almacenamiento en caché)? –

+2

@Niall ¿Estás haciendo esto contra un recurso compartido DFS? aunque no sé por qué iría a diferentes acciones de una instrucción a la otra ... – Matt

Respuesta

0

No puedo reproducir su problema.

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 crea un nuevo directorio por conseguir un -objeto DirectoryInfo para el directorio padre, y llamando es CreateSubDirectory, como:

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

No soy un desarrollador, pero que yo sepa que significa que es una bloqueo de llamada, ya que espera un DirectoryInfo -objeto a cambio. Entonces, el problema es con su subsistema de almacenamiento.

0

Intente ejecutar el comando New-Item en otro proceso y esperar a que:

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

estaba escribiendo un guión que crear una carpeta y luego escribir un archivo 7zip a la carpeta pero 7zip se quejaba de que el directorio no existió Esto pareció solucionar el problema.

Cuestiones relacionadas