Test-Path / System.IO.Directory:: Существующие не работают должным образом - PullRequest
2 голосов
/ 12 апреля 2011

У меня проблемы с использованием тест-пути Powershell CmdLet.

Я создал общий ресурс на сервере (\\ Servername \ MyShare $), который позволяет одной группе пользователей просто создавать файл и добавлять данные, а другие пользователи могут просто читать и удалять эти файлы. Первой группе запрещено делать что-либо еще, включая разрешения на чтение, атрибуты чтения и т. Д.

Если я сделаю Test-Path для этой папки в качестве члена группы «только для удаления файлов», она вернет false. Даже [System.IO.Directory]::Exists() возвращает ложь.

Я ищу способ проверить, существует ли каталог без прав на чтение или права на чтение. Есть идеи?

Это правильное поведение этих двух методов?

С уважением, teamoo

1 Ответ

2 голосов
/ 13 апреля 2011

Хорошо, если никто не хочет рисковать ...

Вот решение:

Мне не разрешен доступ к каталогу .\f1\f2, а .\f1\f3 не существует.

PS C:\Silogix> Get-ChildItem .\f1\f2 -ErrorAction silentlycontinue
PS C:\Silogix> $Error[0].exception
L'accès au chemin d'accès 'C:\Silogix\f1\f2' est refusé.
PS C:\Temp\Temp> $Error[0].exception.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     UnauthorizedAccessException              System.SystemException

PS C:\Silogix> Get-ChildItem .\f1\f3 -ErrorAction silentlycontinue
PS C:\Silogix> $Error[0].exception.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     ItemNotFoundException

Итак, если вы протестируете $Error[0].exception.gettype() после Get-Item, вы сможете понять, почему он недоступен, поэтому, существует он или нет.Вы можете назвать это «бриколаджем», но это тоже решение.Извините за французский в примере.

...