2014-03-06 25 views
0

我發現了一個有用的PowerShell腳本在這個網站上有一個計數文件/文件夾大小的功能。Powershell - 抑制一個函數的錯誤(Out-Null)如何讓它工作

我使用這個,因爲它是快速和低內存使用大型文件/文件夾。

問題是,當它遇到一個文件夾,它無法訪問我得到輸出到控制檯說拒絕訪問。

Exception calling "GetFiles" with "0" argument(s): "Access to the path 'c:\users\administrator\AppData\Local\Applicati\ 
n Data' is denied." 
At line:4 char:37 
+   foreach ($f in $dir.GetFiles <<<<()) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

我知道,或者認爲我需要用|外空打壓錯誤,但仍然有腳本的工作,但我就是想不通的地方或如何做到這一點,儘管多次嘗試。

那麼繼承人的腳本,如果任何人有任何想法?

function Get-HugeDirStats ($directory) { 
    function go($dir, $stats) 
    { 
     foreach ($f in $dir.GetFiles()) 
     { 
      $stats.Count++ 
      $stats.Size += $f.Length 
     } 
     foreach ($d in $dir.GetDirectories()) 
     { 
      go $d $stats 
     } 
    } 
    $statistics = New-Object PsObject -Property @{Count = 0; Size = [long]0 } 
    go (new-object IO.DirectoryInfo $directory) $statistics 
    $statistics 
} 
$stats = Get-HugeDirStats c:\users 

回答

1

你得到從DirectoryInfo對象異常,所以你需要使用try/catch語句:

function Get-HugeDirStats ($directory) { 
    function go($dir, $stats) 
    { 
     try { 
      foreach ($f in $dir.GetFiles()) 
      { 
       $stats.Count++ 
       $stats.Size += $f.Length 
      } 
      foreach ($d in $dir.GetDirectories()) 
      { 
       go $d $stats 
      } 
     } 
     catch [Exception] { 
      # Do something here if you need to 
     } 
    } 
    $statistics = New-Object PsObject -Property @{Count = 0; Size = [long]0 } 
    go (new-object IO.DirectoryInfo $directory) $statistics 
    $statistics 
} 

如果你從任何PowerShell命令收到錯誤,你可以上使用-ErrorAction SilentlyContinue該cmdlet可以防止錯誤打印到屏幕上。

+0

精彩!! 「嘗試」已修復它!感謝您向我展示這是如何工作的...我確定我的powershell將會突飛猛進。我嘗試了Erroraction,但沒有成功,所以我覺得它需要在某種程度上在函數內部消沉。謝謝!! – Will