Was mache ich falsch?
0,1,2,3,4,5 | Where { $_ -gt 3 }
dies wird die eingehende Nummer aus der Pipeline ($_
) mit 3
und erlauben Dinge zu vergleichen, die als 3 größer sind vorbei, es zu erhalten - wann immer der $_ -gt 3
Test Getreu $ auswertet.
0,1,2,3,4,5 | where { $_ }
dies nichts gegen vergleichen hat - in diesem Fall ist es casts the value to boolean - 'truthy' or 'falsey' und wird alles ‚truthy‘ erlauben, durch zu bekommen. 0 ist gefallen, der Rest ist erlaubt.
Get-ChildItem | where Name -eq 'test.txt'
ohne {}
ist eine Syntax, wo es erwartet Name
ist eine Eigenschaft der Sache durch die Pipeline kommt (in diesem Fall Dateinamen) und vergleicht die gegen ‚test.txt‘ und erlaubt nur Objekte Datei mit diesem Namen zu durchlaufen.
Get-ChildItem | where Length
In diesem Fall ist die Eigenschaft es suchen ist, ist Länge (die Dateigröße) und es gibt keinen Vergleich gegeben, so dass es wieder zu tun, die „Casting zu wahr/falsch“, was von früher. Dies zeigt nur Dateien mit einem Inhalt (Länge ungleich 0) an und löscht beispielsweise Dateien mit der Größe 0.
ok, das bringt mich auf Ihren Code:
Get-ChildItem | where(get-date).AddDays(-1)
Ohne {}
und nur eine Sache gegeben Wo, es erwartet, dass die Parameter einen Eigenschaftsnamen zu sein, und wirft den Wert dieser Eigenschaft auf richtig/falsch zu entscheiden, was zu tun ist. Das heißt "Filter wo * die Dinge in der Pipeline haben eine Eigenschaft namens ("09/08/2016 14:12:06"
(gestriges Datum mit der aktuellen Zeit)) und der Wert dieser Eigenschaft ist 'truthy'". Keine Datei hat eine Eigenschaft namens (gestriges Datum), so dass die Frage $null
für jede Datei lautet und Where
alles aus der Pipeline löscht.
Sie können tun, als Jimbo Antworten und Filter zu vergleichen das Datum der Schreibzeit gegen gestrige Datei. Aber wenn Sie wissen, dass die Dateien und Ordner in der Datumsreihenfolge benannt sind, können Sie -recursed durch die gesamte Ordnerstruktur und alles betrachten, weil Sie wissen, was gestern Datei aufgerufen wird.
Obwohl Sie nicht sagen, Sie tun können, nähert sich entweder wie
$yesterday = (Get-Date).AddDays(-1).ToString('MM-dd-yyyy')
Get-ChildItem "d:\receive\bhm\$yesterday\MBVOutputQueriesReport_C12_Custom.html"
# (or whatever date pattern gets you directly to that file)
oder
Get-ChildItem | sort -Property CreationTime -Descending | Select -Skip 1 -First 1
die ‚vorletzter‘ Sache, durch Reverse erstellt Datum geordnet zu erhalten.
Hervorragende Erklärung. Antworten wie diese sind viel hilfreicher als das "hier ist dein One Liner" speziell für Anfänger. – StephenP
Vielen Dank für die Erklärung und den Rat. Ich werde weiter lesen und lernen. – jcarreiro