2014-05-02 185 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 
} 

應該這樣做。