Powershell - Undertrykk feil witihn en funksjon (Out-Null) hvordan å få det fungerer

stemmer
0

Ive funnet en nyttig Powershell script på dette nettstedet med en funksjon for å telle filer / mapper størrelser.

Im bruker dette fordi det er raskt og lite minne bruk for store filer / mapper.

Problemene er at når den møter en mappe betyr det ikke har tilgang til jeg får utgang til konsollen sier ingen tilgang.

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

Jeg vet, eller tror jeg trenger å bruke | Out-Null å undertrykke feilene, men har fortsatt manuset arbeid, men jeg kan bare ikke finne ut hvor eller hvordan du gjør dette, til tross for flere forsøk.

Så her skriptet hvis noen har noen ideer?

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
Publisert på 06/03/2014 klokken 09:53
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Du får et unntak fra DirectoryInfo objekt, så du må bruke prøve / fangst:

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
}

Hvis du får feil fra alle Powershell cmdlets, kan du bruke -ErrorAction SilentlyContinuepå cmdlet for å hindre feil utskrift til skjermen.

Svarte 06/03/2014 kl. 10:25
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more