|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] не работает скрипт счет кол-ва и размера файлов |
|
PowerShell - [решено] не работает скрипт счет кол-ва и размера файлов
|
Новый участник Сообщения: 31 |
Профиль | Отправить PM | Цитировать Господа и господамы, здравствуйте! Беда-печаль - руководство просит проанализировать рост объема данных на файлохранилищах для предсказания роста оных. Ради сей задачи был накидан скриптик, с которым можно ознакомиться ниже, и который, собака такая страшная, отказывается работать. Чую косяк с переносами строк и определением типов. Пример входного файла в конце.
Жду помощи от более опытных коллег. #Задаем путь к CSV файлу со списком папок для поиска и путь к папке с результатами работы скрипта $PathToCsv = "C:\Temp\Test.csv" $PathToResult = "C:\Temp\" #задаем "глубину" поиска $DaysToSearch = 749 #задаем временной промежуток для поиска (в днях) $DaysIntervalToSearch = 7 #Импортируем CSV файл $Path_Folders = Import-Csv -Path $PathToCsv -Delimiter ";" foreach ($Path_Folder in $Path_Folders) { #Выбираем следующую строку $Path = $Path_Folder.PathFolder $ResultFileName = $Path_Folder.ResFileName #Просто текст, для вывода. культуры ради. $Txt = "Analising $Path" #заранее объявляем переменную с полным путем выходного файла $ResultFilePath = $PathToResult + $ResultFileName + ".csv" #пишем какую папку анализируем Write-Host $Txt -ForegroundColor Green #Готовимся к циклу. $FinDay=$DaysToSearch $DayInterval=$DaysIntervalToSearch #Считаем кол-во столбов в результируещем файле $b = $FinDay / $DayInterval #Задаем размер массива для хранения названий столбцов $StringsArray = 1..($b*2) #Обнуляем переменную для счетчика элементов массива =) $x = 0 #переменная для хранения результата нашего поиска $files=dir $Path -recurse | Select Fullname,CreationTime,LastWriteTime,Length, @{Name="Age";Expression={(Get-Date)-$_.CreationTime}}, @{Name="Days";Expression={[int]((Get-Date)-$_.CreationTime).TotalDays}} #хэш с результатами поиска $hash=@{ #Объявляем и заполняем наши столбцы с результатами работы Path=$path #Подсчет кол-ва и объема файлов, старее заданной глубины поиска Over = ($files | Where {$_.Days -gt $FinDay} | Measure-Object).Count 'Over_SizeKB'= [math]::Round((($files | Where {$_.Days -gt $FinDay} | Measure-Object -Property Length -Sum).sum/1KB),2) Do { #Создаем текстовые строки для последующего вывода в файл $FDayInterval = $FinDay - $DayInterval $StringDays = [string]$FinDay + 'Days' $StringDaysSize = [string]$FinDay + 'Days_SizeKB' #Заполняем массив получившимися строками для финального select-а $StringsArray[$x] = $StringDays $StringsArray[$x+1] = $StringDaysSize $x = $x+2 #Подсчитываем кол-во элементов и их размер в KB в папке за заданный временной промежуток '$StringDays'= ($files | Where {$_.Days -gt $FDayInterval -AND $_.Days -le $FinDay} | Measure-Object).Count '$StringDaysSize'= [math]::Round((($files | Where {$_.Days -gt $FDayInterval -AND $_.Days -le $FinDay} | Measure-Object -Property Length -Sum).sum/1KB),2) #Уменьшаем глубину поиска $FinDay = $FinDay - $DayInterval } Until ($FinDay -le 1) } New-Object -TypeName PSObject -Property $hash | Select Path,Over, Over_SizeKB, $StringsArray | export-CSV $ResultFilePath -Encoding UTF8 -Delimiter ";" } Пример входных данных (Разумеется внутри CSV файлика): |
|
Отправлено: 21:45, 16-06-2016 |
Новый участник Сообщения: 31
|
Профиль | Отправить PM | Цитировать Foreigner, тем, что сей способ не универсален. В сообщении #5 я указал, что похожий вариант уже был реализован, и он не удобен в случае расширения временного промежутка.
|
Отправлено: 21:22, 23-06-2016 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1754
|
Если честно я не понимаю смысла:
Цитата:
ЗЫ. Тогда наверное надо все эти данные передавать, как параметры к скрипту. |
|
Последний раз редактировалось Foreigner, 23-06-2016 в 21:48. Отправлено: 21:39, 23-06-2016 | #12 |
Новый участник Сообщения: 31
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:55, 23-06-2016 | #13 |
Ветеран Сообщения: 1754
|
Такой вариант. Правда неторопливый (но в разумных пределах):
Вызывать соответственно: |
Последний раз редактировалось Foreigner, 24-06-2016 в 11:02. Отправлено: 09:57, 24-06-2016 | #14 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Создать список имен папок с указанием кол-ва файлов в каждой. | Metallor | Скриптовые языки администрирования Windows | 6 | 24-03-2016 16:53 | |
Подскажите программу(определение субтитров у большого кол-ва файлов)! | Aviator | Видео и аудио: обработка и кодирование | 0 | 09-05-2015 21:27 | |
Разное - [решено] открытие большого кол-ва html файлов | Alexander_88 | Microsoft Windows 8 и 8.1 | 5 | 20-04-2015 20:55 | |
CMD/BAT - [решено] Убрать расширение с большого кол-ва файлов | cher | Скриптовые языки администрирования Windows | 4 | 30-03-2015 16:31 | |
Статистика кол-ва скачевания файла | Friend | Вебмастеру | 1 | 12-11-2003 23:53 |
|