darkangel2k3
Goto Top

Powershell test-path gibt nicht Wert wieder

Hallo zusammen,

ich habe ein kleine Problem mit test-path und der Windows Powershell und hoffe, dass die Gemeinde mich kurz erleuchten kann face-smile.

Wenn ich folgendes ausführe:

Get-ChildItem -Path C:\temp\*.log -Recurse | Where-Object {$_.LastWriteTime -ge (get-date).adddays(-1)}
test-path -Path C:\temp\*.log | Where-Object {$_.LastWriteTime -ge (get-date).adddays(-1)}

Mode                LastWriteTime     Length Name                                                                                                                        
----                -------------     ------ ----                                                                                                                        
-a---        20.03.2013     08:37      68004 SUService.log                                                                                                         

Hier kommt aber von test-path kein true oder false zurück (obwohl true kommen müsste)

Mache ich jetzt (unsinngerweise) aus -ge -lt oder -le

test-path -Path C:\temp\*.log | Where-Object {$_.LastWriteTime -lt (get-date).adddays(-1)}
PS C:\> test-path -Path C:\temp\*.log | Where-Object {$_.LastWriteTime -lt (get-date).adddays(-1)}

True

kommt ein true oder false zurück????????

Das kann doch aber nicht sein, das ge, lt, le usw. alles Operatoren vom Befehl Where-Object sind.

Hat jemand vielleicht eine Idee??? Oder das Phänomen auch schon mal erlebt.

Grüße

Content-Key: 203654

Url: https://administrator.de/contentid/203654

Printed on: April 16, 2024 at 12:04 o'clock

Member: darkangel2k3
darkangel2k3 Mar 20, 2013 updated at 14:37:48 (UTC)
Goto Top
Hab es zwischenzeitlich so gelöst:

$Files = @(Get-ChildItem -Path C:\temp\*.log -Recurse | Where-Object {$_.LastWriteTime -ge (get-date).adddays(-1)})
if ($Files.length -eq 0) {
  write-host "NO FILES"   
  } else {
  write-host " OK"  
}

Aber das ist natürlich nur ein workaround.
Member: 5t8d1e
5t8d1e Mar 27, 2013 at 19:29:42 (UTC)
Goto Top
Hallo darkangel,


test-path gibt dir nur ein Objekt vom Typ BOOLEAN zurück. Da kannst noch so sehr pipen das Ding kennt nur $true oder $false!
hier der Beweis
(test-path  C:\temp\*.log ).get-type()

und hier was du mit den Objekt alles machen kannst
test-path  C:\temp\*.log | get-member

dein Skript kannst du wie folgt in einen Einzeiler bringen

write "Die Anzahl der Logdateien ist:  $((get-childitem -path C:\temp -filter "*.log" -Recurse | where {$_.LastwriteTime -gt (get-date).adddays(-1)}).count)"  

Schön sieht es nicht aus aber läuft. face-smile
Wenn du sowas regelmäßig machst solltest du über eine selbstgebaute Funktion nachdenken.


Der Torsten wars
Hail to the PoSh