2016-11-02 4 views
5

Jak działa parametr Get-ChildItem -Exclude? Jakie zasady to stosuje?Jak działa parametr Get-ChildItem -Exclude Parameter?

Get-Help dla Get-ChildItem nie jest szczegółowo w ogóle:

pomija określone elementy. Wartość tego parametru kwalifikuje parametr ścieżki . Wprowadź element ścieżki lub wzorzec, na przykład "* .txt". Symbole wieloznaczne są dozwolone.

A na Stackoverflow i gdzie indziej ogólny konsensus wydaje się być zbyt trudny w użyciu i wszyscy powinniśmy po prostu wypróbować wyjście Get-ChildItem do Where-Object zamiast tego.

Podczas gdy jestem chętny do użycia Where-Object, jestem ciekawy co do zasad - Exclude to follow.

Na przykład, mam folder z następujących podfolderów:

HsacFixtures 
HsacFixturesBuild 
RestFixture 
RestFixtureBuild 

Gdybym wykonać następujące polecenie:

Get-ChildItem $rootFolderPath -Exclude HsacFixturesBuild -Directory 

zwraca oczekiwane wyniki:

HsacFixtures 
RestFixture 
RestFixtureBuild 

Jeśli jednak dodaję parametr -Recurse:

Get-ChildItem $rootFolderPath -Exclude HsacFixturesBuild -Directory -Recurse 

Następnie zwraca podfoldery w folderze HsacFixturesBuild.

Próbowałem również HsacFixturesBuild\ i HsacFixturesBuild\*, które mają takie same wyniki.

Czy wyłączenie dotyczy tylko bezpośrednich dzieci, a nie grand-children lub głębszych podfolderów?

+1

get-help Get-ChildItem -full, ma przykłady i szczegóły. –

+0

@KoryGill: Dzięki, ale już sprawdziłem help -full. Jest tylko jeden przykład z -Exclude, a opis parametru jest bardzo krótki (patrz cytat w moim pytaniu). Nie wystarczyło zrozumieć zasady, na których działa. –

+0

@SimonTewsi, Wyklucz filtry na nazwie obiektu.Więc nawet jeśli obiekt jest wnukiem, wykluczenie patrzy tylko na nazwę obiektu, a nie na ścieżkę. – Nkosi

Odpowiedz

6

Exclude pomija obiekty podrzędne w oparciu o Name,

przypadku plików, pobiera nazwę pliku. W przypadku katalogów otrzymuje nazwę ostatniego katalogu w hierarchii, jeśli istnieje hierarchia. przeciwnym razie właściwość Name Pobiera nazwę katalogu

a nie FullName,

który dostaje pełną ścieżkę dostępu do katalogu lub pliku

Więc nawet jeśli obiekt jest wnuczka w wywołaniu rekursywnym, wyklucza tylko patrzy na obiekt obiektu Name, a nie na FullName, więc wykluczenie nie wpłynie na pominięcie, chyba że obiekty podrzędne mają wspólny podłańcuch nazwy, która długopisy być częścią parametru wykluczenia

Źródło Get-ChildItem

Przykład 3: Uzyskaj wszystkie elementy podrzędne przy użyciu kryteriów włączenia i wyłączenia

wymienia tego polecenia plików .txt w dziennikach podkatalogu, z wyjątkiem tych, których nazwiska zaczynają się na literę A. Używa on symbolu wieloznacznego ( ) (*), aby wskazać zawartość podkatalogu Logs, a nie kontenera katalogu. Ponieważ polecenie nie zawiera parametru Recurse , polecenie nie zawiera automatycznie treści katalogu ; musisz to określić.

Windows PowerShell

PS C:\> Get-ChildItem –Path "C:\Windows\Logs\*" -Include "*.txt" -Exclude "A*" 
3

W odniesieniu do Get-ChildItem, -exclude parametr działa na obiektach name

Mogło być lepiej zrozumiały z poniższego przykładu: Rozważmy następującą strukturę folderów

enter image description here

Najpierw użyjemy parametru -exclude bez rekurencji. enter image description here

Jak widać na powyższym zdjęciu, na podstawie obiektów name, folder został wykluczony

Teraz dodamy recurse parametr do powyższego zestawienia następująco enter image description here

Teraz widzimy widział, że podfoldery z folder są nadal obecne, ponieważ wykluczenie zostało zastosowane na obiektach name

Mam nadzieję, że to HElps.