首页 > 解决方案 > PowerShell 中的捕获错误未按预期工作

问题描述

我正在使用对 Get-Children 的递归调用来获取文件夹/目录结构的总大小。它工作正常,但不会保留我使用的 ErrorVariable 中的错误,并且从查看文档来看,它应该吗?有任何想法吗?

        [string]$fsoobjexist = Test-Path -Path $Folder
        $err=@() 
        If ($fsoobjexist -eq "True"){
            $err.clear
            if ((Get-Item $Folder) -is [System.IO.DirectoryInfo]){
                $Foldersize = "{0:N2} MB" -f ((Get-ChildItem -LiteralPath $Folder -Force -Recurse | Measure-Object -Property Length -Sum -EV +err -EA Continue  ).Sum / 1MB) 
                $logline = "$Folder,$Foldersize" 
                LogWrite $logline       

                Foreach ($Errors in $err){
                    ErrLogWrite "$($Errors.CategoryInfo.Category) $($Errors.CategoryInfo.Activity) $($Errors.CategoryInfo.Reason) $($Errors.CategoryInfo.TargetName) $($Errors.CategoryInfo.TargetType) $($Errors.Exception.Message)" 
                }
            }
        }

标签: powershellerror-handling

解决方案


您已将+err参数作为参数传递给ErrorVariableMeasure-Object但它可能Get-ChildItem是引发错误的 cmdlet。

将其更改为:

$Foldersize = "{0:N2} MB" -f ((Get-ChildItem -LiteralPath $Folder -Force -Recurse -EV +err -EA Continue | Measure-Object -Property Length -Sum).Sum / 1MB) 

推荐阅读