1

У меня есть задача выполнить 3 раза в день на WS2012R2, чтобы получить размер диска, общее количество файлов и папок, включая подкаталоги из папки на удаленном сервере.Получить общее количество файлов и подпапок в папке

В настоящее время я получаю эту информацию RDP'ing к цели, перейдя в папку и щелкнув правой кнопкой мыши папку, чтобы скопировать данные:

enter image description here

Я уже пробовал сценарий PowerShell:

Get-ChildItem E:\Data -Recurse -File | Measure-Object | %{$_.Count} 

и другие сценарии PowerShell.

Который произвел бесчисленные ошибки, связанные с отсутствием разрешений для некоторых подкаталогов или просто дал результаты, которых я не хотел.

Я пробовал VBscript, но VBscript просто не может получить эту информацию.

+0

Какова цель получения общего количества файлов и папок? – Eilidh

ответ

1

Вы можете просто получить доступ к свойству Count:

$items = Get-ChildItem E:\Data -Recurse -File 
($items | Where { -not $_.PSIsContainer}).Count #files 
($items | Where $_.PSIsContainer).Count #folders 
+0

, который дает ошибку: Get-ChildItem: указанный путь, имя файла или оба слишком длинны. Полноценное имя файла должно быть меньше 260 символов, а имя каталога должно быть менее 248 символов. В строке: 1 char: 2 + (Get-ChildItem E: \\ Folder \ -Recurse -File) .Count + ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ + CategoryInfo: ReadError: (E: \ Folder \ String) [Get-ChildItem], PathTooLongExce ption + FullyQualifiedErrorId: DirIOError, Microsoft.PowerShell .Commands.GetChildItemCommand – Daniel

+0

@MartinBrandl, Рассмотрим использование переменной счетчика, потому что любая большая файловая структура заполняет память. Конечно, делать это для любой большой файловой структуры ужасающе ... –

+0

Thing, я смущен, вы можете увидеть эту информацию на общей вкладке, когда щелкните правой кнопкой мыши по папке, так почему возникают проблемы в Powershell? мне нужно использовать другой язык? – Daniel

0

Суммируя комментарии до сих пор.

Вы можете получить размер диска С с:

$Drive = "C" 
    Get-PSDrive -Name $Drive | Select-Object @{N="Used Space on $Drive Drive (GB)"; E={[Math]::Round($_.Used/1GB)}} 

Но вы не можете использовать что-то вроде ниже кода для подсчета файлов & папки для всего диска C, но это работает для простого filestructures и простые приводы. Я использую код, чтобы рассчитать мои другие диски и мой домашний путь, просто измените $ Path на, например, $ Env: Homepath.

There's the path length problem which is a .NET thing and won't be fixed until everyone (and PowerShell) is using .NET 4.6.2. Then there's that you're acting as you counting it, not the operating system counting.

[Int]$NumFolders = 0 
[Int]$NumFiles = 0 
$Path = "C:\" 
$Objects = Get-ChildItem $Path -Recurse 

$Size = Get-ChildItem $Path -Recurse | Measure-Object -property length -sum 
$NumFiles = ($Objects | Where { -not $_.PSIsContainer}).Count 
$NumFolders = ($Objects | Where {$_.PSIsContainer}).Count 

$Summary = New-Object PSCustomObject -Property @{"Path" = $Path ; "Files" = $NumFiles ; "Folders" = $NumFolders ; "Size in MB" = ([Math]::Round($Size.sum /1MB))} 
$Summary | Format-list 

Для запуска этого на удаленных компьютерах, я бы рекомендовал использовать New-PSSession для компьютера/компьютеров, а затем Invoke-Command для запуска кода с использованием новых сеансов.

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