Powershell Get-ChildItem -Проблемы свойств - PullRequest
0 голосов
/ 22 января 2019

Powershell версии 5.1

У меня есть 2 копии файла, одна вложенная глубже, чем другая, как этот.

C:\temp\test.txt
C:\temp\Logs\test.txt

Я хочу использовать Get-ChildItem, чтобы найти более мелкий объект (меньшеглубоко?) файл.Во многих сообщениях предлагается указывать -Path как "C: \ temp \ *" или "C: \ temp \ * \ *".Но я бы хотел использовать параметр -Depth для командлета Get-ChildItem или выяснить, почему он не работает.Предполагается ограничить глубину рекурсий в поиске.Я читал, что это подразумевает рекурсию и, следовательно, нет необходимости использовать ее вместе с рекурсией.До сих пор я пробовал все команды ниже, но все они возвращают одинаковые результаты, показанные ниже.

Get-ChildItem -Path C:\temp -Depth 0 -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 1 -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 2 -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 3 -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth '1' -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth "1" -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth $d -Include tes*.txt | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth $d -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 0 -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 0 -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 2 -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Depth 3 -Include tes*.txt -Recurse | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Include tes*.txt -Depth 1 | Format-List -Property FullName
Get-ChildItem -Path C:\temp -Include tes*.txt -Depth 0 | Format-List -Property FullName
Get-ChildItem -Path C:\temp -File -Include tes*.txt -Depth 0 | Format-List -Property FullName
Get-ChildItem -Path C:\temp -File -Include tes*.txt -Depth 1 | Format-List -Property FullName
Get-ChildItem -Path C:\temp -File -Include tes*.txt -Depth 2 | Format-List -Property FullName
Get-ChildItem -Path C:\temp\* -Include tes*.txt -Recurse | Format-List -Property FullName

ВСЕ команды выше дают одинаковый результат, а именно

FullName : C:\temp\Logs\test.txt
FullName : C:\temp\test.txt

Помимо свойства -Depth, использование «\ *», как предлагают многие, позволяет мне изолировать более глубокий файл, но не более мелкий файл.Я что-то упустил?

PS C:\>  Get-ChildItem -Path C:\temp\* -Include tes*.txt -Recurse | Format-List -Property FullName

FullName : C:\temp\Logs\test.txt
FullName : C:\temp\test.txt

PS C:\>  Get-ChildItem -Path C:\temp\*\* -Include tes*.txt -Recurse | Format-List -Property FullName

FullName : C:\temp\Logs\test.txt

PS C:\>  Get-ChildItem -Path C:\temp\*\*\* -Include tes*.txt -Recurse | Format-List -Property FullName

PS C:\> 

1 Ответ

0 голосов
/ 22 января 2019

Использование -Depth, по-видимому, исключает использование -Include или
даже подстановочный знак в параметре -Path.

Пусть -Filter сделает работу, в этом примере дерева:

> tree /F
C:.
└───temp
    │   Test.txt
    │
    └───0
        │   Test.txt
        │
        └───1
            │   Test.txt
            │
            └───2
                    Test.txt

Это один вкладыш:

 0..4|%{"-Depth $_ ---------------";(Get-ChildItem -Path C:\Temp\ -Depth $_ -Filter Tes*.txt).FullName}

возвращается:

-Depth 0 ---------------
C:\Temp\Test.txt
-Depth 1 ---------------
C:\Temp\Test.txt
C:\Temp\0\Test.txt
-Depth 2 ---------------
C:\Temp\Test.txt
C:\Temp\0\Test.txt
C:\Temp\0\1\Test.txt
-Depth 3 ---------------
C:\Temp\Test.txt
C:\Temp\0\Test.txt
C:\Temp\0\1\Test.txt
C:\Temp\0\1\2\Test.txt
-Depth 4 ---------------
C:\Temp\Test.txt
C:\Temp\0\Test.txt
C:\Temp\0\1\Test.txt
C:\Temp\0\1\2\Test.txt
...