powershell - programas - Encontrar la fecha de modificación de un archivo/carpeta
como cambiar la fecha de creacion de un archivo sin programas (4)
Código de PowerShell para encontrar todos los archivos de la biblioteca de documentos modificados de los últimos 2 días.
$web = Get-SPWeb -Identity http://siteName:9090/
$list = $web.GetList("http://siteName:9090/Style Library/")
$folderquery = New-Object Microsoft.SharePoint.SPQuery
$foldercamlQuery =
''<Where> <Eq>
<FieldRef Name="ContentType" /> <Value Type="text">Folder</Value>
</Eq> </Where>''
$folderquery.Query = $foldercamlQuery
$folders = $list.GetItems($folderquery)
foreach($folderItem in $folders)
{
$folder = $folderItem.Folder
if($folder.ItemCount -gt 0){
Write-Host " find Item count " $folder.ItemCount
$oldest = $null
$files = $folder.Files
$date = (Get-Date).AddDays(-2).ToString(“MM/dd/yyyy”)
foreach ($file in $files){
if($file.Item["Modified"]-Ge $date)
{
Write-Host "Last 2 days modified folder name:" $folder " File Name: " $file.Item["Name"] " Date of midified: " $file.Item["Modified"]
}
}
}
else
{
Write-Warning "$folder[''Name''] is empty"
}
}
Soy muy nuevo en PowerShell, y esperaba poder obtener ayuda para crear un script que me diga la fecha de modificación de un archivo.
Me gustaría saber más sobre PowerShell, ya que siento que estoy pidiendo mucho (todo mi tiempo libre esta semana estará dedicado a aprender mejor PowerShell). Señalarme en la dirección de dónde aprender a hacer esto sería muy útil también.
Aquí está el resumen completo. Necesito ejecutar un informe diario que compruebe una lista de computadoras en 90 tiendas diferentes para asegurarme de que se realizó una copia de seguridad determinada. La fecha de modificación debe indicar si la copia de seguridad se realizó y se establecerá en la fecha anterior.
Si la fecha de modificación es ayer, no es necesario que haya una salida. Si no es ayer, me gustaría tener el resultado en la ventana de PowerShell, o en un archivo de texto, lo que sea más fácil.
También debo verificar que una carpeta no tenga más de siete días para cada una de las 90 tiendas, con los mismos criterios para la salida. La idea que tengo sería así para cada tienda
Para la tienda 1:
Check file date for //server/store/computer/c:/folder/"newest modified date in folder"
if date equals yesterday
then do nothing
if date does not equal yesterday
then output "Test did not backup"
check folder modified date for //server/sample/store/backupfolder
if date equals <7 days old
then do nothign
if date equals >7 days old
then output "test did not backup"
Perdón por no haber demostrado mi esfuerzo de investigación, soy muy nuevo en Powershell y estaba a punto de finalizar. Desde ayer aprendí a hacer todo lo que tenía que hacer con este script. Gracias a @Keith por ponerme en el camino correcto. Terminé usando el siguiente código para lograr mi objetivo de solo superar la ubicación donde el resultado fue falso.
$a = Get-ChildItem //server/XXX/Received_Orders/*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}
if ($a = (Get-ChildItem //server/XXX/Received_Orders/*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}))
{
}
Else
{
''STORE XXX HAS NOT RECEIVED ANY ORDERS IN THE PAST 7 DAYS''
}
$b = Get-ChildItem //COMP NAME/Folder/*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}
if ($b = (Get-ChildItem //COMP NAME/TFolder/*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}))
{
}
Else
{
''STORE XXX DID NOT RUN ITS BACKUP LAST NIGHT''
}
Esto es lo que funcionó para mí:
$a = Get-ChildItem //server/XXX/Received_Orders/*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-7)}
if ($a = (Get-ChildItem //server/XXX/Received_Orders/*.* | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)}
#Im using the -gt switch instead of -ge
{}
Else
{
''STORE XXX HAS NOT RECEIVED ANY ORDERS IN THE PAST 7 DAYS''
}
$b = Get-ChildItem //COMP NAME/Folder/*.* | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-1)}
if ($b = (Get-ChildItem //COMP NAME/TFolder/*.* | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-1)))}
{}
Else
{
''STORE XXX DID NOT RUN ITS BACKUP LAST NIGHT''
}
Para obtener la fecha modificada en un solo archivo, intente:
$lastModifiedDate = (Get-Item "C:/foo.tmp").LastWriteTime;
Para comparar con otro:
$dateA= Get-Date $lastModifiedDate
$dateB= Get-Date (Get-Item "C:/other.tmp").LastWriteTime
if ($dateA -gte $dateB) {
Write-Host("C:/foo.tmp was modified at the same time or after C:/other.tmp")
} else {
Write-Host("C:/foo.tmp was modified before C:/other.tmp")
}
Si ejecuta los comandos Get-Item o Get-ChildItem, estos generarán los objetos System.IO.FileInfo y System.IO.DirectoryInfo que contengan esta información, por ejemplo:
Get-Item c:/folder | Format-List
O puede acceder a la propiedad directamente así:
Get-Item c:/folder | Foreach {$_.LastWriteTime}
Para comenzar a filtrar carpetas y archivos en función del tiempo de última escritura, puede hacer esto:
Get-ChildItem c:/folder | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)}