Создайте каталог с условиями гонки с New-Item? - PullRequest
7 голосов
/ 11 августа 2011

Я вижу состояние гонки при вызове New-Item для создания каталога на чужой машине с использованием пути UNC.Код ниже:

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

Использование Test-Path сразу после этого возвращает false.Я поместил Test-Path -> sleep на 1 секунду, и после перерыва на 1 секунду Test-Path возвращает true.

Является ли New-Item блокирующим вызовом?Стоит ли ждать ожидания после вызова New-Item?

Ответы [ 2 ]

0 голосов
/ 24 июня 2017

Попробуйте запустить команду New-Item в другом процессе и дождитесь ее:

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

Я писал сценарий, который создавал бы папку, а затем записывал в нее 7zip-архив, но 7zip жаловался бы, что каталог не существует. Похоже, это обошло проблему.

0 голосов
/ 26 января 2015

Я не могу воспроизвести вашу проблему.

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 -объекта взамен. Так что проблема может быть в вашей подсистеме хранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...