Powershell - 通过函数(Out-Null)抑制错误如何使其工作



我在这个网站上找到了一个有用的powershell脚本,其中包含用于计算文件/文件夹大小的功能。

我使用它是因为大文件/文件夹的内存使用速度快且低。

问题是,当它遇到一个文件夹时,它无法访问我会收到控制台的输出,说访问被拒绝。

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

我知道,或者认为我需要使用 |Out-Null 来抑制错误,但仍然有脚本工作,但是尽管多次尝试,我还是无法弄清楚在哪里或如何执行此操作。

那么如果有人有任何想法,这里是脚本?

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

你从 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 cmdlet 收到错误,可以使用 cmdlet 上的-ErrorAction SilentlyContinue来防止打印到屏幕时出错。

相关内容

  • 没有找到相关文章

最新更新