Лучший отвечающий
PS вывести размер папок

Вопрос
-
Здравствуйте
Пока получается вот так выводить
$source="D:\" Get-ChildItem $source | where {$_.psIscontainer} | foreach { $count = Get-ChildItem $_.fullname -recurse | Measure-Object -property length -Sum New-Object PSObject -property @{Folder=$_.FullName;Files=$count.count;Size=$count.Sum;} }
Помогите допилить , нужно:
1 указывать несколько дисков
2 вывод в МБ и ГБ
Пробовал делать вот так
$source="D:\" Get-ChildItem $source | where {$_.psIscontainer} | foreach { $count = Get-ChildItem $_.fullname -recurse | Measure-Object -property length -Sum New-Object PSObject -property @{Folder=$_.FullName;Files=$count.count;Size=$count.Sum / 1M;} }
Пишит что конструкция не правильная =(
Заранее благодарен.
Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.
10 января 2014 г. 5:55
Ответы
-
Для работы с путями 260 в PowerShell возникают трудности, поэтому лучше использовать стороннее решение(robocopy). Здесь используется русская версия, поэтому если язык отличный от русского,то заменить "(Файлов|Байт)" на свои значения.
$source= "C:\","D:\","E:\" foreach($d in $source) { Get-ChildItem $d | where {$_.psIscontainer} | Foreach { $r = robocopy $_.FullName c:\dummy /l /xj /e /nfl /ndl /njh /bytes /r:0 $data = $r -match "(Файлов|Байт)" -replace "\s+(Файлов|Байт)\s+:\s+" | Foreach {$_.split(" ")[0]} New-Object PSObject -Property @{Folder=$_.FullName;Files=$data[0];"Size(mb)"=$data[1]/1mb;"Size(Gb)"=$data[1]/1gb} } }
- Изменено KazunEditor 10 января 2014 г. 7:59
- Предложено в качестве ответа Vector BCOModerator 10 января 2014 г. 8:10
- Помечено в качестве ответа MR.Minion 10 января 2014 г. 8:13
10 января 2014 г. 7:55Отвечающий -
$source= "D:\","F:\" $time = Get-Date $result = @() foreach($d in $source) { Get-ChildItem $d | where {$_.psIscontainer} | Foreach { $r = robocopy $_.FullName c:\dummy /l /xj /e /nfl /ndl /njh /bytes /r:0 $data = $r -match "(Файлов|Байт)" -replace "\s+(Файлов|Байт)\s+:\s+" | Foreach {$_.split(" ")[0]} $result += New-Object PSObject -Property @{Folder=$_.FullName;Files=$data[0];"Size(mb)"=$data[1]/1mb;"Size(Gb)"=$data[1]/1gb} } } $result | Select Folder,"Size(Gb)","Size(mb)",Files | Export-CSV -NoType "c:\Reports\shd-$($time.ToString('ddMMyy')).csv" -Delimiter ";" -Encoding UTF8
- Помечено в качестве ответа MR.Minion 10 января 2014 г. 11:26
10 января 2014 г. 11:02Отвечающий
Все ответы
-
несколько дисков можно вот так
Get-PSDrive -PSProvider:FileSystem $sources= Get-PSDrive -PSProvider:FileSystem ForEach ($source in $sources) { Get-ChildItem $source.Root | where {$_.psIscontainer} | foreach { $count = Get-ChildItem $_.fullname -recurse | Measure-Object -property length -Sum New-Object PSObject -property @{Folder=$_.FullName;Files=$count.count;Size=$count.Sum;} } }
В моем случае все локальные диски. У себя естественно можете фильтровать по NameЕсли вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"
10 января 2014 г. 6:18 -
Алексей , Ваш вариант подходит , но у меня много сетевых дисков подключено поэтому интересует как указать диски D:\ E:\ F:\, также хочется чтобы отчет выдавал данные в мегабайтах и гигабайтах и как убрать ограничение на количество знаков
Get-ChildItem : Слишком длинный путь или имя файла. Полное имя файла должно содержать меньше 260 знаков, а имя каталога - меньше 248 знаков.
а то отчет получается раздробленным =(
Заранее благодарен
Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.
- Изменено MR.Minion 10 января 2014 г. 7:10
10 января 2014 г. 7:07 -
Выборочно диски : Get-psDrive -Name C,D,G и т.д. По остальным моментам думаю....
Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"
10 января 2014 г. 7:27 -
Выборочно диски : Get-psDrive -Name C,D,G и т.д. По остальным моментам думаю....
Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"
Get-ChildItem : Не удается найти путь "C:\Users\chubaka\D", так как он не существует. строка:3 знак:14 + Get-ChildItem <<<< $source | where {$_.psIscontainer} | foreach { + CategoryInfo : ObjectNotFound: (C:\Users\chubaka\D:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand Get-ChildItem : Не удается найти путь "C:\Users\chubaka\F", так как он не существует. строка:3 знак:14 + Get-ChildItem <<<< $source | where {$_.psIscontainer} | foreach { + CategoryInfo : ObjectNotFound: (C:\Users\chubaka\F:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Делаю вот так :
$source = Get-psDrive -Name D,F Get-ChildItem $source | where {$_.psIscontainer} | foreach { $count = Get-ChildItem $_.fullname -recurse | Measure-Object -property length -Sum New-Object PSObject -property @{Folder=$_.FullName;Files=$count.count;Size=$count.Sum;} }
Пробавал так тоже самое :
$source = Get-psDrive -Name D:\,F:\
Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.
- Изменено MR.Minion 10 января 2014 г. 7:38
10 января 2014 г. 7:35 -
Для подсчета в Мегабайтах измените строку
$count.Sum / 1M на $count.sum / 1mb
Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"
10 января 2014 г. 7:37 -
Для работы с путями 260 в PowerShell возникают трудности, поэтому лучше использовать стороннее решение(robocopy). Здесь используется русская версия, поэтому если язык отличный от русского,то заменить "(Файлов|Байт)" на свои значения.
$source= "C:\","D:\","E:\" foreach($d in $source) { Get-ChildItem $d | where {$_.psIscontainer} | Foreach { $r = robocopy $_.FullName c:\dummy /l /xj /e /nfl /ndl /njh /bytes /r:0 $data = $r -match "(Файлов|Байт)" -replace "\s+(Файлов|Байт)\s+:\s+" | Foreach {$_.split(" ")[0]} New-Object PSObject -Property @{Folder=$_.FullName;Files=$data[0];"Size(mb)"=$data[1]/1mb;"Size(Gb)"=$data[1]/1gb} } }
- Изменено KazunEditor 10 января 2014 г. 7:59
- Предложено в качестве ответа Vector BCOModerator 10 января 2014 г. 8:10
- Помечено в качестве ответа MR.Minion 10 января 2014 г. 8:13
10 января 2014 г. 7:55Отвечающий -
Для работы с путями 260 в PowerShell возникают трудности, поэтому лучше использовать стороннее решение(robocopy). Здесь используется русская версия, поэтому если язык отличный от русского,то заменить "(Файлов|Байт)" на свои значения.
$source= "C:\","D:\","E:\" foreach($d in $source) { Get-ChildItem $d | where {$_.psIscontainer} | Foreach { $r = robocopy $_.FullName c:\dummy /l /xj /e /nfl /ndl /njh /bytes /r:0 $data = $r -match "(Файлов|Байт)" -replace "\s+(Файлов|Байт)\s+:\s+" | Foreach {$_.split(" ")[0]} New-Object PSObject -Property @{Folder=$_.FullName;Files=$data[0];"Size(mb)"=$data[1]/1mb;"Size(Gb)"=$data[1]/1gb} } }
Как правильно сделать экспорт в CSV
Делаю вот так , не работает =( :
$source= "D:\","F:\" $time = (Get-Date) foreach($d in $source) { Get-ChildItem $d | where {$_.psIscontainer} | Foreach { $r = robocopy $_.FullName c:\dummy /l /xj /e /nfl /ndl /njh /bytes /r:0 $data = $r -match "(Файлов|Байт)" -replace "\s+(Файлов|Байт)\s+:\s+" | Foreach {$_.split(" ")[0]} New-Object PSObject -Property @{Folder=$_.FullName;Files=$data[0];"Size(mb)"=$data[1]/1mb;"Size(Gb)"=$data[1]/1gb} } } | Export-CSV -NoType c:\Reports\shd-$time.csv -Delimiter ;
Хочу сделать чтобы создавался файл с названием shd-время-создания.csv и такого формата :
Folder;Size(Gb);Size(mb);Files
Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.
10 января 2014 г. 10:22 -
попробуйте вот так
Export-CSV -NoType c:\Reports\shd-$($time.ToShortDateString()).csv -Delimiter ;
Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"
10 января 2014 г. 10:53 -
попробуйте вот так
Export-CSV -NoType c:\Reports\shd-$($time.ToShortDateString()).csv -Delimiter ;
Если вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение"
Пустой элемент канала не допускается.
At line:10 char:3
Сначала Вас игнорируют, потом над Вами смеются, потом с Вами борются, а затем Вы победили.
10 января 2014 г. 10:56 -
$source= "D:\","F:\" $time = Get-Date $result = @() foreach($d in $source) { Get-ChildItem $d | where {$_.psIscontainer} | Foreach { $r = robocopy $_.FullName c:\dummy /l /xj /e /nfl /ndl /njh /bytes /r:0 $data = $r -match "(Файлов|Байт)" -replace "\s+(Файлов|Байт)\s+:\s+" | Foreach {$_.split(" ")[0]} $result += New-Object PSObject -Property @{Folder=$_.FullName;Files=$data[0];"Size(mb)"=$data[1]/1mb;"Size(Gb)"=$data[1]/1gb} } } $result | Select Folder,"Size(Gb)","Size(mb)",Files | Export-CSV -NoType "c:\Reports\shd-$($time.ToString('ddMMyy')).csv" -Delimiter ";" -Encoding UTF8
- Помечено в качестве ответа MR.Minion 10 января 2014 г. 11:26
10 января 2014 г. 11:02Отвечающий