Benutzer mit den meisten Antworten
Frage zur Arbeit mit Get-Childitem (Include / Exclude)

Frage
-
Hallo Community,
ich experimentiere gerade mit Get-ChildItem und verstehe folgendes nicht.
1) Get-ChildItem -Include *.wmv 2) Get-ChildItem * -Include *.wmv 3) Get-ChildItem -Include * *.wmv 4) Get-ChildItem -Exclude *.wmv
Der Erste Befehl liefert keine Ausgabe, wohin gegen Befehl zwei und drei die gewünschte Ausgabe liefern.
Aus welchem Grund kann ich nicht direkt nach WMV Dateien suchen (Befehl 1) sondern muss wie in Befehl 2 gezeigt erst alles einschließen und dann speziell nach WMV filtern?
In Befehl vier kann ich ja auch direkt alle Dateien mit der Endung WMV ausschließen.
Über eine Antwort zu diesem Verhalten freue ich mich, da ich es aktuell nicht wirklich verstehe.
Vielen Dank
- Bearbeitet ABurger Montag, 25. Juni 2012 15:36
Antworten
-
Ich habe das gerade nochmal getestet. Um das aus dem Englischen Blog beitrag noch mal zu verdeutlichen:
Das Include bezieht sich auf den String in der Path angabe.
Es werden also nur Objekte Includiert die in der Pfadangabe schon den richtigen Namensteil haben.
Wenn man den Stern in der Pfadangabe nutzt, wird dieser als erstes expandiert und die Pfadangabe enthält dann ein Array mit ALLEN Dateien (String[]), danach wirkt -include auf dieses String-Array.
(Mega, Sau Blöd!!)Get-ChildItem 'C:\temp\test.txt' -Include *.txt # Funktioniert ! Get-ChildItem 'C:\temp\test.txt','C:\temp\test1.txt','C:\temp\test2.txt' -Include *.txt # Funktioniert ! Get-ChildItem 'C:\temp\test.doc' -Include *.txt # Funktioniert nicht!
Wie gesagt, Where-objekt ist da deutlicher.
Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
- Bearbeitet Peter Kriegel Dienstag, 26. Juni 2012 07:25
- Als Antwort markiert ABurger Dienstag, 26. Juni 2012 09:39
Alle Antworten
-
Hallo,
hier findest du die erklärung zu deiner Frage:
http://www.windowsitpro.com/article/windows-powershell/get-childitem-s-include-parameter
- Als Antwort vorgeschlagen Peter Kriegel Dienstag, 26. Juni 2012 07:25
-
Aus meiner sicht ist das ein Bug!
Da Get-ChildItem die Child-Items (aus dem Aktuellen Verzeichniss) holen sollte, um diese danach zu Filtern.
Dies geschieht hier nicht so wie erwartet.Solche Bugs können bei MIcrosoft Connect gemeldet werden, diese werden in der regel dann auch bearbeitet.
http://connect.microsoft.com/PowerShellDie Filter unterscheiden auch nicht zwischen Dateien und Ordnern!
Aus diesem grund nutze ich lieber Where-Object (da weiss ich was ich bekommen):
# Verzeichnisse UND Dateien finden die mit .txt enden !!! Get-ChildItem 'C:\temp' | Where {$_.name -Like "*.txt" } # Oder nur Dateien finden di mit .txt enden Get-ChildItem 'C:\temp' | Where {$_.psIsContainer -eq $true -and $_.name -Like "*.txt" }
Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
- Bearbeitet Peter Kriegel Dienstag, 26. Juni 2012 06:50
-
Ich habe das gerade nochmal getestet. Um das aus dem Englischen Blog beitrag noch mal zu verdeutlichen:
Das Include bezieht sich auf den String in der Path angabe.
Es werden also nur Objekte Includiert die in der Pfadangabe schon den richtigen Namensteil haben.
Wenn man den Stern in der Pfadangabe nutzt, wird dieser als erstes expandiert und die Pfadangabe enthält dann ein Array mit ALLEN Dateien (String[]), danach wirkt -include auf dieses String-Array.
(Mega, Sau Blöd!!)Get-ChildItem 'C:\temp\test.txt' -Include *.txt # Funktioniert ! Get-ChildItem 'C:\temp\test.txt','C:\temp\test1.txt','C:\temp\test2.txt' -Include *.txt # Funktioniert ! Get-ChildItem 'C:\temp\test.doc' -Include *.txt # Funktioniert nicht!
Wie gesagt, Where-objekt ist da deutlicher.
Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
- Bearbeitet Peter Kriegel Dienstag, 26. Juni 2012 07:25
- Als Antwort markiert ABurger Dienstag, 26. Juni 2012 09:39
-
Danke für den Link @ Schlieng und vielen Dank @Peter Kriegel für die Erklärung und die Beispiele, jetzt verstehe ich weshalb ich eine solche Ausgabe bzw. keine Ausgabe der Befehle erhalten habe und kann Get-ChildItem besser einsetzen bzw. werde ich versuchen, wie Sie vorschlagen, öfters mit Where-Object zu arbeiten.
Danke und Gruß