Limpiar el servidor de archivos compartidos

Limpiar el servidor de archivos compartidos

He estado intentando crear un script de PowerShell que enumere todos los archivos y carpetas, su fecha de creación y fecha de último acceso, el tamaño en MB y, si es posible, la última persona que accedió a él, con una exportación a un archivo CSV.

Probé algunos scripts e incluso obtuve ayuda de la otra publicación, pero no extrae todos los archivos.

Este es el script que estoy ejecutando actualmente:

 Get-ChildItem c:\Users\iceledon -Recurse -ErrorAction SilentlyContinue |  Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-365)} |
Export-Csv "C:\Users\iceledon\Desktop\files.csv" -NoTypeInformation

Respuesta1

Esto es todo lo que puedes obtener de las propiedades del archivo. del primer archivo seleccionado

# This is all you can get from file properties. of the first file selected
(Get-ChildItem 'd:\temp\*.txt')[0] | Select-Object -Property *

# Results

PSPath            : Microsoft.PowerShell.Core\FileSystem::D:\temp\1 passwordchangelog.txt
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::D:\temp
PSChildName       : 1 passwordchangelog.txt
PSDrive           : D
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : False
Mode              : -a----
VersionInfo       : File:             D:\temp\1 passwordchangelog.txt
                    InternalName:     
                    OriginalFilename: 
                    FileVersion:      
                    FileDescription:  
                    Product:          
                    ProductVersion:   
                    Debug:            False
                    Patched:          False
                    PreRelease:       False
                    PrivateBuild:     False
                    SpecialBuild:     False
                    Language:         

BaseName          : 1 passwordchangelog
Target            : {}
LinkType          : 
Name              : 1 passwordchangelog.txt
Length            : 24
DirectoryName     : D:\temp
Directory         : D:\temp
IsReadOnly        : False
Exists            : True
FullName          : D:\temp\1 passwordchangelog.txt
Extension         : .txt
CreationTime      : 10-Jul-18 16:30:22
CreationTimeUtc   : 10-Jul-18 23:30:22
LastAccessTime    : 10-Jul-18 16:30:22
LastAccessTimeUtc : 10-Jul-18 23:30:22
LastWriteTime     : 06-Jul-18 22:16:24
LastWriteTimeUtc  : 07-Jul-18 05:16:24
Attributes        : Archive

Como puede ver en las propiedades anteriores del objeto de archivo. No hay información sobre quién accedió por última vez. Por último, debes convertir la longitud a KB, MB, etc.

Entonces, estás haciendo esto... (simplemente no uses Format-Table para la salida. Esto es solo para la pantalla)

Get-ChildItem 'd:\temp' -Recurse -ErrorAction SilentlyContinue `
| Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-365)} `
| Select FullName,CreationTime,LastAccessTime,
    @{Name='Size(kb)';Expression={“{0:F2}” -f ($_.length/1KB)}},
    @{Name='Size(mb)';Expression={“{0:F2}” -f ($_.length/1MB)}} `
| Sort-Object -Property LastAccessTime `
| Format-Table -AutoSize

FullName                                       CreationTime       LastAccessTime     Size(kb) Size(mb)
--------                                       ------------       --------------     -------- --------
D:\temp\4 passwordchangelog.txt                05-Jul-18 13:15:04 05-Jul-18 13:15:04 0.02     0.00    
D:\temp\1 passwordchangelog.txt                10-Jul-18 16:30:22 10-Jul-18 16:30:22 0.02     0.00    
D:\temp\10 passwordchangelog.txt               10-Jul-18 16:30:26 10-Jul-18 16:30:26 0.02     0.00 
...

Que quieres decir con...

pero no extrae todos los archivos.

GCI almacenará todos los archivos que le solicite siempre que tenga los permisos para hacerlo. Si filtra de alguna manera, eso es todo lo que se devolverá.

Agregar días(-365)

Esto significa que solo dame archivos anteriores a. Por lo tanto, no obtendrá nada que no sea más antiguo, por diseño.

información relacionada