.png)
De vez en cuando, cuando fuerzo el apagado de una máquina con Windows Server 2003 (no tengo otra opción), todas las carpetas contenidas en un determinado directorio cambian su 'fecha de modificación' a la fecha actual.
Afortunadamente, dentro de cada una de estas carpetas, todos los archivos tienen la "fecha de modificación" correcta.
Uno de estos archivos con el que quiero copiar la "fecha de modificación (o creación)" es un archivo .jdf que tiene dentro cada una de las carpetas.
Necesito ayuda para crear un script en PowerSell.
Encontré este script de PS1 que casi hace el trabajo:
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..."
}
}
El problema es que el último objeto modificado dentro de las carpetas a veces son subcarpetas que también obtienen la fecha actual como "fecha de modificación". ¿Cómo puedo hacer que se vean los archivos dentro de la carpeta y no las carpetas?
Respuesta1
Prueba esto:
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..."
}
}
Respuesta2
Mientras que Get-ChildItem $root -directory
da el mismo resultado que
Get-ChildItem $root | Where-Object {$_.PSIsContainer}
podrías intentarlo (no conozco PS
la sintaxis detallada)
Get-ChildItem $root -file
o incluso
gci $root -file
No estoy seguro de si el resto del guión necesita mejoras...