3

远程服务器上有一个文件夹,其中包含各种子文件夹。它是完全嵌套的。我想:

  1. 准备一个包含文件夹名称的 HTML 报告。
  2. 对于每个文件夹,它还应该记录文件数。
  3. 代码需要附加已经创建的 HTML 文件。
  4. 所需列:文件夹名称、文件夹路径、文件计数

下面是代码片段,它是我的主脚本的一部分。我对 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

    }
}
4

2 回答 2

3

您实际上并没有说什么对您不起作用,但是以下脚本应该可以帮助您入门。

外部循环通过文件夹(PSIsContainer)递归意味着它是一个文件夹。内部循环使用 measure-object 计算每个文件夹中的文件数,我们从该计数中过滤掉文件夹,只为我们提供文件数。

$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
}
于 2013-01-04T14:36:58.280 回答
2

这是你想要的吗?我以前没有使用过 HTML cmdlet,所以请注意它很丑 :)

$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'
}
于 2013-01-04T14:35:59.463 回答