Você está enviando datas para strings e está produzindo resultados diferentes no console do ISE e do PowerShell.
Veja seu arquivo from073.rar
:
- Data do ISE: 10/05 / 2015
- Data do console do PowerShell: 5/10 / 2015
É melhor você se livrar de .ToShortDateString()
e comparar as datas diretamente. Veja esta pergunta: Powershell: comparando datas
Even though the strings are presented differently in ISE and in the PowerShell console the comparison is apples to apples so the results should be the same.
Sim, mas suas "maçãs" neste caso são códigos de caracteres, o que é certo que não é o que você queria comparar. Exemplo:
-
'a' -gt 'b'
éfalse
, porque o código de caractere dea
é menor que o código de caractere deb
. -
'ac' -gt 'ab'
étrue
, porque o código de caractere dea
é o mesmo para as duas cadeias, mas o próximo código de caractere da cadeia esquerda (c
) é maior que o segundo código de caractere a string correta (b
).
Assim, quando você executa seu código no ISE que usa o formato dd/mm/yyyy
, seu código compara primeiro dd
part e ignora mm/yyyy
, porque é o mesmo. E você está obtendo resultados corretos por puro acidente. No formato de data do console do PowerShell é mm/dd/yyyy
, portanto, seu código é interrompido como deveria.
This is my new line:
Get-ChildItem -filter "*.rar" | Foreach-Object { if((get-date $_.lastwritetime -Format d) -lt (Get-Date -Format d )) { "{0} {1}" -f $_.name, (get-date $_.lastwritetime -Format d) } }
But the comparison is not working.
Aqui está novamente: você está usando -Format d
, que converte o objeto date em string. E você já sabe o que isso leva.
Se você deseja obter arquivos com mais de um dia, seu código deve ficar assim (observe, como dois DateTime objetos comparados diretamente, sem strings envolvidas):
Get-ChildItem -Filter '*.rar' |
Foreach-Object {
if($_.LastWriteTime -lt (Get-Date).AddDays(-1))
{
'{0} {1}' -f $_.Name, $_.LastWriteTime
}
}