.png)
De vez em quando, quando forço o desligamento de uma máquina com Windows Server 2003 (não tenho escolha), todas as pastas contidas em um determinado diretório alteram sua 'data de modificação' para a data atual.
Felizmente, dentro de cada uma dessas pastas, os arquivos estão todos com a ‘data de modificação’ correta.
Um desses arquivos com o qual desejo copiar a "data de modificação (ou criação)" é um arquivo .jdf que cada uma das pastas contém.
Preciso de ajuda para criar um script no PowerSell.
Encontrei este script PS1 que quase faz o trabalho:
Get-ChildItem $root | Where-Object {$_.PSIsContainer} | Foreach-Object{
# get the oldest file for the current directory object
$oldest = Get-ChildItem $_.FullName | Sort-Object LastWriteTime | Select-Object LastWriteTime -Last 1
if($oldest)
{
# oldest object found, set current directory LastWriteTime
$_ | Set-ItemProperty -Name CreationTime -Value $oldest.LastWriteTime
$_ | Set-ItemProperty -Name LastWriteTime -Value $oldest.LastWriteTime
}
else
{
# current directory is empty, directory LastWriteTime is left unchanged
Write-Warning "Directory '$($_.FullName)' is empty, skiping..."
}
}
O problema é que o último objeto modificado dentro das pastas às vezes são subpastas que também obtêm a data atual como 'data de modificação'. Como posso fazer com que pareçam os arquivos dentro da pasta e não as pastas?
Responder1
Experimente isto:
Get-ChildItem $root |
Where-Object { $_.PSIsContainer } |
Foreach-Object{
$oldest = Get-ChildItem $_.FullName |
Where-Object { ! $_.PSIsContainer } |
Sort-Object LastWriteTime |
Select-Object -Last 1
if($oldest)
{
$_ | Set-ItemProperty -Name CreationTime -Value $oldest.LastWriteTime
$_ | Set-ItemProperty -Name LastWriteTime -Value $oldest.LastWriteTime
}
else
{
# current directory is empty, directory LastWriteTime is left unchanged
Write-Warning "Directory '$($_.FullName)' is empty, skiping..."
}
}
Responder2
Considerando que Get-ChildItem $root -directory
dá o mesmo resultado que
Get-ChildItem $root | Where-Object {$_.PSIsContainer}
você poderia tentar (não sei PS
a sintaxe detalhada)
Get-ChildItem $root -file
ou mesmo
gci $root -file
Não tenho certeza se o restante do seu script precisa de melhorias ...