2016-11-26 4 views
0

У меня есть несколько папок на множестве SQL-серверов, содержащих сотни/тысячи баз данных. Каждая база данных состоит из трех элементов:Сумма размера папки для файлов на основе имени файла/папки

<dbname>.MDF 
<dbname>.LDF 
<dbname>files (Folder that contains db files/attachments) 

мне нужно жениться эти файлы вместе и сложить их общий размер, есть ли какие-либо советы о том, как это сделать?

EDIT: просто для уточнения, в настоящее время я могу выводить файлы из файлов MDF/LDF, у меня есть отдельный скрипт, который суммирует размеры папок. Мне нужно метод сложения папки .MDF/.LDF/DBFiles, когда их имя совпадает. Принимая во внимание, что все файлы имеют префикс имени базы данных.

РЕДАКТИРОВАТЬ # 2: 2 варианта, которые даны вместе, вместе с файлами .mdf/.ldf без проблем, но не добавляют размер папки в папку DBFiles. Кто-нибудь имеет какие-либо сведения о том, как изменить эти сценарии, чтобы включить папку, начинающуюся с того же имени.

Первый предоставляется сценарий:

$root = 'C:\db\folder' 
Get-ChildItem "$root\*.mdf" | Select-Object -Expand BaseName | 
ForEach-Object { 
New-Object -Type PSObject -Property @{ 
    Database = $_ 
    Size  = Get-ChildItem "$root\$_*" -Recurse | 
      Measure-Object Length -Sum | 
      Select-Object -Expand Sum 
} 
} 

Второй предоставляется сценарий:

gci "c:\temp" -file -Include "*.mdf", "*.ldf" -Recurse | 
group BaseName, DirectoryName | 
%{new-object psobject -Property @{FilesAndPath=$_.Name; Size=($_.Group | gci | Measure-Object Length -Sum).Sum } } 

EDIT # 3:

Благодаря Ansgar (ниже), обновленный раствор сделал трюк отлично. Обновление вопрос с окончательным решением:

$root = 'C:\db\folder' 
Get-ChildItem "$root\*.mdf" | Select-Object -Expand BaseName | 
    ForEach-Object { 
    New-Object -Type PSObject -Property @{ 
     Database = $_ 
     Size  = Get-ChildItem "$root\$_*\*" -Recurse | 
       Measure-Object Length -Sum | 
       Select-Object -Expand Sum 
    } 
    } 
+0

Хорошо, я понял, что должен быть ясен. В настоящее время я могу проверять и выводить файлы всех содержимого папки. То, что мне нужно, чтобы иметь возможность сделать с этими результатами, соответствует каждой базе данных с ее сопровождающими файлами и добавлять их вместе. – KEW

+0

Являются ли эти файлы/папки разбросаны или они хранятся вместе в базе данных? –

+0

Все они хранятся в одной папке. – KEW

ответ

0

Перечислите только файлы .mdf из папки базы данных, затем перечислите файлы и папки для каждого базового имени.

$root = 'C:\db\folder' 
Get-ChildItem "$root\*.mdf" | Select-Object -Expand BaseName | 
    ForEach-Object { 
    New-Object -Type PSObject -Property @{ 
     Database = $_ 
     Size  = Get-ChildItem "$root\$_*\*" -Recurse | 
       Measure-Object Length -Sum | 
       Select-Object -Expand Sum 
    } 
    } 
+0

Большое спасибо за этот Ансгар. Качественный товар. – KEW

+0

Привет Ансгар, я обновил свой вопрос с проблемой, которую я видел. Он добавил файлы MDF/LDF вместе, но не учитывал размер связанной папки. Первоначально я думал, что это правильно подсчитывается, поэтому я принял ответ изначально. – KEW

+0

@KEW Очевидно, выражение пути должно быть '$ root \ $ _ * \ *', чтобы 'Get-ChildItem' фактически возвращался во вложенные папки. Обновлен мой ответ. –

0

если вы хотите сумму базы данных Şişe файлов по директории и имя файла (без расширения), попробуйте

gci "c:\temp" -file -Include "*.mdf", "*.ldf" -Recurse | 
group BaseName, DirectoryName | 
%{new-object psobject -Property @{FilesAndPath=$_.Name; Size=($_.Group | gci | Measure-Object Length -Sum).Sum } } 

Modifiy немного включаемом GCI при необходимости

+0

Благодарим вас за это Esperento- – KEW

Смежные вопросы