Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Get-ChildItem и обратный слэш в пути

Ответить
Настройки темы
PowerShell - Get-ChildItem и обратный слэш в пути

Новый участник


Сообщения: 43
Благодарности: 3

Профиль | Отправить PM | Цитировать


Добрый день. Подскажите, пожалуйста, что нужно почитать, чтобы понять причину странного поведения Get-ChildItem?

Сам код:
Код: Выделить весь код
Get-ChildItem
mkdir Test1\Test2\Test3
Get-ChildItem -Recurse '.\Test1'
Get-ChildItem -Recurse '.\Test2'
Get-ChildItem -Recurse '.\Test3'
Get-ChildItem -Recurse '.\Test1\'
Get-ChildItem -Recurse '.\Test2\'
Get-ChildItem -Recurse '.\Test3\'
mkdir T\Test2\Test3
Get-ChildItem -Recurse '.\Test1\'
Get-ChildItem -Recurse '.\Test2\'
Get-ChildItem -Recurse '.\Test3\'
Get-ChildItem -Recurse '.\Test1\\'
Get-ChildItem -Recurse '.\Test2\\'
Get-ChildItem -Recurse '.\Test3\\'
mkdir Te\Test2\Test3
Get-ChildItem -Recurse '.\Test1\\'
Get-ChildItem -Recurse '.\Test2\\'
Get-ChildItem -Recurse '.\Test3\\'
Вывод:
Код: Выделить весь код
PS T:\> Get-ChildItem
PS T:\> mkdir Test1\Test2\Test3


    Directory: T:\Test1\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test1'


    Directory: T:\Test1


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test2


    Directory: T:\Test1\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test2'


    Directory: T:\Test1


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test2


PS T:\> Get-ChildItem -Recurse '.\Test3'


    Directory: T:\Test1\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test1\'


    Directory: T:\Test1


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test2


    Directory: T:\Test1\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test2\'
Get-ChildItem : Cannot find path 'T:\T' because it does not exist.
At line:1 char:1
+ Get-ChildItem -Recurse '.\Test2\'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (T:\T:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

PS T:\> Get-ChildItem -Recurse '.\Test3\'
Get-ChildItem : Cannot find path 'T:\T' because it does not exist.
At line:1 char:1
+ Get-ChildItem -Recurse '.\Test3\'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (T:\T:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

PS T:\> mkdir T\Test2\Test3


    Directory: T:\T\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test1\'


    Directory: T:\Test1


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test2


    Directory: T:\Test1\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test2\'


    Directory: T:\T


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test2


PS T:\> Get-ChildItem -Recurse '.\Test3\'


    Directory: T:\T\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test1\\'


    Directory: T:\Test1


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test2


    Directory: T:\Test1\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test2\\'
Get-ChildItem : Cannot find path 'T:\Te' because it does not exist.
At line:1 char:1
+ Get-ChildItem -Recurse '.\Test2\\'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (T:\Te:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

PS T:\> Get-ChildItem -Recurse '.\Test3\\'
Get-ChildItem : Cannot find path 'T:\Te' because it does not exist.
At line:1 char:1
+ Get-ChildItem -Recurse '.\Test3\\'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (T:\Te:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

PS T:\> mkdir Te\Test2\Test3


    Directory: T:\Te\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test1\\'


    Directory: T:\Test1


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test2


    Directory: T:\Test1\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\> Get-ChildItem -Recurse '.\Test2\\'


    Directory: T:\Te


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test2


PS T:\> Get-ChildItem -Recurse '.\Test3\\'


    Directory: T:\Te\Test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       22.05.2019      9:55                Test3


PS T:\>

Отправлено: 10:03, 22-05-2019

 

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1167
Благодарности: 486

Профиль | Отправить PM | Цитировать


А чего тут читать... баг, он и в Индии баг. Программистам надо руки выправлять, которые этот командлет в таком виде выпустили. В PoSh Core этот баг тоже присутствует. В powershell v 2.0 его не было, а как ввели новый принцип определения местоположения, с версии 3.0, так этот баг и поселился

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 22-05-2019 в 12:27.


Отправлено: 12:05, 22-05-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 43
Благодарности: 3

Профиль | Отправить PM | Цитировать


О, я думал, это все-таки странная фича. Спасибо! А что за новый принцип определения местоположения?

Отправлено: 12:32, 22-05-2019 | #3


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1167
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата Knaps:
А что за новый принцип определения местоположения? »
Если почитать справку, там это есть. Но написано не слишком дружественно пользователю.
Если в картинках, то будет нагляднее:
Наглядная разница определения местоположения Get-ChildItem с рекурсией powershell v 5.1 и v 2.0

Всё содержимое каталога d:\test


Т.е. если командлету указать в качестве пути файл и включить рекурсию, он будет искать этот файл не только в текущем каталоге, но и во всех каталогах, находящихся в текущем каталоге, т.е. рядом с указанным путем к файлу. Если путь абсолютный, то в качестве текущего будет принят родительский каталог указанного файла:
D:\TEST\test1.ext - здесь, это каталог TEST
и все каталоги, находящиеся в нем будут просмотрены рекурсивно.
- так работает командлет начиная с версии powershell 3.0

А в версии 2.0, указанный файл ищется по указанному пути и только, даже если присутствует рекурсия, никакие соседние каталоги не просматриваются...

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 22-05-2019 в 14:59.


Отправлено: 14:44, 22-05-2019 | #4


Новый участник


Сообщения: 43
Благодарности: 3

Профиль | Отправить PM | Цитировать


Спасибо, теперь понял, что имели в виду.

Отправлено: 22:35, 22-05-2019 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Get-ChildItem и обратный слэш в пути

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Отсечение пути.Как?Или получение относительного пути. nfs911 Скриптовые языки администрирования Windows 12 19-05-2018 11:29
VBS/WSH/JS - Срипт копирования пути к файлу\папке и вставка пути в письмо Outlook trlhrn Скриптовые языки администрирования Windows 0 07-08-2015 16:21
Разное - Символы СЛЭШ pashtetadomanet Хочу все знать 14 24-02-2014 04:00
PowerShell - [решено] Помощь с сортировкой в get-childitem kelevara Скриптовые языки администрирования Windows 6 07-05-2013 07:07
обратный прием Jammer Защита компьютерных систем 4 02-12-2007 12:03




 
Переход