使用New-Item创建目录的竞争条件?

时间:2011-08-11 10:25:44

标签: windows powershell

在调用New-Item以使用UNC路径在外部计算机上创建目录时,我看到了竞争条件。代码如下:

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

之后立即使用Test-Path返回false。我把测试路径 - >睡眠1秒重试循环,睡眠1秒后,Test-Path返回true。

New-Item是阻止通话吗?我应该在打电话给New-Item后等待吗?

2 个答案:

答案 0 :(得分:0)

我无法重现你的问题。

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通过获取父目录的DirectoryInfo - 对象并调用它CreateSubDirectory来创建一个新目录,如:

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

我不是开发人员,但是AFAIK意味着它是一个阻塞调用,因为它等待DirectoryInfo - 对象作为回报。所以mabe问题在于您的存储子系统。

答案 1 :(得分:0)

尝试在另一个进程中运行New-Item命令并等待它:

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

我正在编写一个脚本来创建一个文件夹,然后将7zip存档写入该文件夹,但是7zip会抱怨该目录不存在。这似乎解决了这个问题。