2011-08-11 8 views
7

UNCパスを使用して外部マシンにディレクトリを作成するためにNew-Itemを呼び出すときに競合状態が発生しています。コードは次のとおりです。レースコンディションは新規アイテムでディレクトリを作成していますか?

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

すぐにTest-Pathを使用すると、falseが返されます。 Test-Pathを1秒間のリトライループでスリープさせ、1秒間スリープ状態にした後、Test-Pathがtrueを返します。

新規アイテムはブロッキングコールですか? New-Itemを呼び出した後に待たなければならないと思いますか?

+1

私は問題はありませんし、真の結果を得る:md \\ server \ share \ newFolder;テストパス\\ server \ share \ newFolder –

+1

ディレクトリとディレクトリを作成して50回連続してテストするのは問題ありません。たぶん、あなたのネットワーク共有(キャッシュ層のような)に珍しい何かがありますか? –

+2

@Niall DFS共有に対してこれを実行していますか?なぜあなたは1つの命令から別の命令に別のシェアに行くのか分かりません... – Matt

答えて

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 -objectを取得し、それはCreateSubDirectoryだ呼び出すことによって、新しいディレクトリを作成します。私は開発者ではないんだけど、私の知る限り、それはそれはです意味

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

それが返されてDirectoryInfo - オブジェクトを待つので、ブロッキングコール。問題はストレージサブシステムにあります。

0

別のプロセスでNew-Itemコマンドを実行してみてくださいし、それを待つ:私はフォルダを作成し、そのフォルダに7zipをアーカイブを書くが、7zipをは、と文句を言うだろうするスクリプトを書いていた

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

ディレクトリは存在しませんでした。これは問題を回避するように思われた。

関連する問題