2014-05-02 147 views
0

我有文本文件,其中包含一些共享路径(例如\\INTBMCELB\Abbott ADD HR Finance\\INTBMCELB\Abbott ADD HR Finance_VSS等)。
我从这个文本文件和每个路径中的文件夹中读取所有路径。
文件夹的详细信息从.csv文件加载。
目前我在这个.csv文件中有一个名为size的字段,我需要添加一个名为'文件类别'的字段。Powershell导出到csv

file category字段应显示基于它的文件的大小的描述:

  • 微小(0 KB - 10 KB)
  • 小(10 KB - 100 KB)
  • 介质(100 KB - 1 MB)
  • 大(1 MB - 16MB)
  • 巨大(16 MB - 128 MB)
  • 巨型(> 128 MB)

目前,这是我在做什么:

$infile = 'C:\Users\417193\Desktop\MyShareBatch\SharePaths.txt' 
$outdir = 'C:\Users\417193\Desktop\MyShareBatch\MyShareOuts' 

foreach ($dir in (Get-Content $infile)) { 
    Get-ChildItem -Path $dir -Filter *.* -Recurse | Select-Object Name, 
     @{Name="Owner";Expression={(Get-ACL $_.fullname).Owner}},CreationTime, 
     @{Name="FileModifiedDate";Expression={$_.LastWriteTime}}, 
     @{Name="FileAccessedDate";Expression={$_.LastAccessTime}}, 
     @{Name="Attributes";Expression={$_.Attributes}}, 
     @{l='ParentPath';e={Split-Path $_.FullName}}, 
     @{Name="DormantFor(days)";Expression={[int]((Get-Date)-$_.LastWriteTime).TotalDays}}, 
     @{N="FileCategory";E={Get-FileSizeCategory($_)}}, 
     @{Name="Size";Expression={if($_.PSIsContainer -eq $True){(New-Object -com Scripting.FileSystemObject).GetFolder($_.FullName).Size} else {$_.Length}}} 
} 

Function Get-FileSizeCategory($Object){ 
    if($Object.PSIsContainer) 
    { 
     $Length = (New-Object -ComObject Scripting.FileSystemObject).GetFolder($Object.FullName).Size 
    } 
    else 
    { 
     $Length = $_.Length 
    } 

    switch($Length) { 
     {$_ -le 10KB} {$Category="Tiny"; break} 
     {$_ -le 1MB} {$Category="Medium"; break} 
     {$_ -le 16MB} {$Category="Large"; break} 
     {$_ -le 128MB} {$Category="Huge"; break} 
     default  {$Category="Gigantic"} 
    } 
} 

当我试图从远程服务器执行上述脚本,文件类别字段不会得到更新。我也尝试过使用本地服务器路径,但仍然存在相同的问题。
在我的本地机器上,脚本成功执行所有字段。我试图删除输出到.csv并打印输出,但问题仍然存在。

+0

你如何从远程服务器执行它? – Raf

回答

1

尝试移动整个_Function Get-FileSizeCategory_下面$outdirforeach之前。
_Function Get-FileSizeCategory_不返回任何东西所以加return $Category刚刚结束的括号即上面:

Function Get-FileSizeCategory($Object){ 
     ...... 
     default  {$Category="Gigantic"} 
    } 

    return $Category 
} 

应该这样做。