Количество файлов и папок

На удаленном сервере есть папка с различными подпапками. Он полностью вложен. Я бы хотел:

  • Подготовьте отчет HTML, содержащий имя папки.
  • Для каждой папки она также должна записывать количество файлов.
  • Код должен добавить файл HTML, который уже создан.
  • Требуемые столбцы: имя папки, путь к папке, количество файлов

Ниже приведен фрагмент кода, который является частью моего основного script. Я новичок в PowerShell.

Может кто-нибудь помочь?

$server_dir = "D:\Data\Inbox"
$does_dir_e = (Test-Path $server_dir)
if($does_dir_e)
{
 $fso = New-Object -com "Scripting.FileSystemObject"
 $f = $fso.GetFolder($server_dir)
 foreach($folder in $f.subfolders)
 {
 $fcount = $((Get-ChildItem $folder.Path).count)
 $fname = $folder.name | Convertto-HTML -Fragment >> C:\Temp\Server.html
 }
}
2 ответа

Это то, что вы хотите? Раньше я еще не использовал командлет HTML, поэтому имейте это в виду:)

$server_dir = 'D:\Data\Inbox'
if(Test-Path $server_dir)
{
 $folders = Get-ChildItem $server_dir -Recurse | where {$_.PSIsContainer}
 $output = @()
 foreach($folder in $folders)
 {
 $fname = $folder.Name
 $fpath = $folder.FullName
 $fcount = Get-ChildItem $fpath | where {!$_.PSIsContainer} | Measure-Object | Select-Object -Expand Count
 $obj = New-Object psobject -Property @{FolderName = $fname; FolderPath = $fpath; FileCount = $fcount}
 $output += $obj
 }
 #Output to HTML
 $output | ConvertTo-Html -Fragment >> 'C:\Temp\Server.html'
}


Вы действительно не говорите, что не работает для вас, но следующий script должен вас начать.

Внешний цикл повторяется через папки (PSIsContainer) - это папка. Внутренняя петля подсчитывает количество файлов в каждой папке с помощью меры-объекта, мы отфильтровываем папки из этого счета, чтобы дать нам только количество файлов.

$path = "D:\Data\Inbox"
# Enumerate the given path recursively
Get-ChildItem -Path $path -Recurse | Where-Object {$_.PSIsContainer} | %{
 # Add a user-defined custom member with a value of the filecount this
 # time not recursively (using measure object)
 $_ | add-member -membertype noteproperty -name FileCount -value (Get-ChildItem -Path $_.Fullname | 
 Where-Object {!$_.PSIsContainer} | 
 Measure-Object).Count
 # Output the required values
 $_ | select Name, FullName, FileCount | ConvertTo-Html -Fragment
}

licensed under cc by-sa 3.0 with attribution.