Я пытаюсь создать скрипт PowerShell, который выводит список всех файлов и папок, дату их создания и последнего доступа, размер в МБ и, если возможно, имя последнего пользователя, который к ним обращался, с экспортом в CSV-файл.
Я протестировал несколько скриптов и даже получил помощь из другого поста, но он не извлекает все файлы.
Вот скрипт, который я сейчас запускаю:
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
решение1
Это все, что вы можете получить из свойств файла. первого выбранного файла
# 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
Как вы можете видеть из приведенных выше свойств объекта файла, нет информации о том, кто последний раз обращался к нему. Наконец, вам нужно преобразовать длину в КБ, МБ и т. д.
Итак, вы делаете это...(только не используйте Format-Table для вывода. Это только для экрана)
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
...
Что вы подразумеваете под...
но он не извлекает все файлы.
GCI будет все файлы, которые вы запросите, пока у вас есть разрешения на это. Если вы отфильтруете в любом случае, это все, что будет возвращено.
ДобавитьДней(-365)
Это значит, дайте мне только файлы старше. Таким образом, все, что не старше, вы не получите, по замыслу.