Jump to content

Fehlermeldung: Es wurde kein Positionsparameter gefunden


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

ich bin noch Noob in puncto PS.

Ich habe mir das Module psfoldersize installiert da ich einige Netzwerkordner und deren Unterordner überprüfen muss.

Wenn ich versuche (lokal auf meinem PC) einen Ordner samt Unterordner abzufragen erhalte ich folgende Fehlermeldung:

Get-FolderSize : Es wurde kein Positionsparameter gefunden, der das Argument "True" akzeptiert.
In Zeile:1 Zeichen:1
+ Get-FolderSize -Path "C:\Users" -ShowSubItems $true

 

Kann mir jemand auf die Sprünge helfen warum?

 

Vielen Dank!

Link zu diesem Kommentar

Wenn das 'ne einmalige Aktion sein soll, würd' ich auch TreeSizeFree oder SequoiaView empfehlen. Da bekommt man die Größenverteilung sehr gut grafisch aufbereitet. 

 

Wenn das eine regelmäßige, eventuell noch automatisch laufende Aktion sein soll, könntest Du 'ne Funktion benutzen, die ich vor 'ner Weile mal für genau solche Aufgaben gebaut habe.

<#
    .SYNOPSIS
        Show information about a particular folder

    .DESCRIPTION
        The function Get-FolderInfo determines the size and the count of the files and subfolders of a given directory. (To improve the performance of the function it utilizes the command line tool Robocopy )

    .PARAMETER  Path
        Complete path of the folder.

    .EXAMPLE
        PS C:\> Get-FolderInfo

        Without any further parameter Get-FolderInfo determines the size and the count of files and subfolders of the current directory.

    .EXAMPLE
        PS C:\> Get-FolderInfo C:\windows\system32

        This command will determine the size and the count of files and subfolders of the given directory.

    .EXAMPLE
        PS C:\> Get-ChildItem C:\users -Directory | Get-FolderInfo 

        This command will determine the size and the count of files and subfolders of the directory C:\users.

    .EXAMPLE
        PS C:\> 'C:\temp', 'C:\Windows\Temp', "$ENV:TEMP" | Get-FolderInfo 

        This command will determine the size and the count of files and subfolders of given three temp directories.
    .EXAMPLE
        PS c:\> Get-ChildItem -Path 'a particular folder containing subfolders' -Directory | Get-FolderInfo | Sort-Object -Property SubFolders,FileCount,Bytes -Descending

        This command will determine the size and the count of files and subfolders of 'a particular folder containing subfolders' and sort it descanding for SubFolder, FileCount and Bytes.
    .INPUTS
        System.IO.DirectoryInfo

    .OUTPUTS
        System.String
        System.Int64

    .NOTES
        Author: O.Soyk
        Date:   20150604

    .LINK
        http://social.technet.microsoft.com/wiki/contents/articles/1073.robocopy-and-a-few-examples.aspx

    .LINK
        https://technet.microsoft.com/en-us/library/cc733145(v=ws.10).aspx
#>
Function Get-FolderInfo {
    [CmdletBinding()]
    [OutputType([System.String])]
    param(
        [Parameter(ValueFromPipeline = $true,
            Position = 0, 
            ValueFromPipelineByPropertyName = $true)]
        [ValidateNotNullOrEmpty()]
        [System.IO.DirectoryInfo[]]
        $Path = (Get-Location).Path
    )
    process {
        Foreach ($Item in $Path) {
            $Result = robocopy $($Item.FullName) $([System.IO.Path]::GetTempPath()) /E /L /R:0 /NFL /NDL /NC /BYTES /NP /NJH /XJ /XJD /XJF
            Write-Verbose "Result:`n'$($Result)'"

            $Result -match '(FEHLER|ERROR)\s5\s\(' | Out-Null
            If ($Matches) { Write-Debug "`nFolder: '$($Item)' - 'Access denied'`n" }

            $Result | Where-Object { $_ -match '(Dateien|Files\s)\:\s+(\d+)\s' } | Out-Null
            Write-Verbose "Matches:`n '$($Matches)'"
            $FileCount = $Matches[2]

            $Result | Where-Object { $_ -match '(Verzeich\.|Dirs\s)\:\s+(\d+)\s' } | Out-Null
            $SubfolderCount = $Matches[2]

            $Size = (($Result | Where-Object { $_ -match 'Bytes' }).trim() -replace '\s+', ' ').split(' ')[2]

            [PSCustomObject]@{
                Path       = $Item.FullName 
                Subfolders = [INT64]$SubfolderCount
                FileCount  = [INT64]$FileCount
                Bytes      = [Int64]$Size
            }
        }
    }
}

Hilfe und Beispiele sind dabei ... versuch ma!  ;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar

@BOfH_666

Danke für den Input!

Ich muss mir dein Script noch genauer ansehen.

Bisher komme ich damit recht weit, nur würde ich gerne den Zeitraum eingrenzen auf die letzten 24h:

gci \\xxx\xxx\ -r | sort -descending -property length | where length -gt 1000000 |

select name, @{Name="Megabytes";Expression={[Math]::round($_.length / 1MB, 2)}}, creationtime | 

Select-Object -First 200

 

Kann mir bitte nochmal jemand helfen, danke...

Link zu diesem Kommentar

Wieso "Zeitraum"? Bisher war davon die Rede, dass Du Ordnergrößen ermitteln wolltest. Genau das macht die Funktion, die ich gepostet hatte.

 

Davon unabhängig - formatierst Du bitte Code als Code, wenn Du Code postest? Danke.

 

Zu Deinem letzten Code-Schnipsel - Wenn Du Get-ChildItem mit dem Parameter -Recurse benutzt und dann nach der Property length sortierst, dann sortierst Du Dateien nach der Größe, und das unabhängig vom Verzeichnis, in dem die Dateien liegen.

Vielleicht wirst Du Dir erstmal darüber klar, was genau Du eigentlich machen möchtest.

Link zu diesem Kommentar
vor 1 Stunde schrieb Busfan:

Weil ich wissen möchte wer in den letzten 24h das Fileshare so angefüllt hat

... und das siehst Du an den neu angelegten bzw. angewachsenen Dateien?

 

Wie so häufig hier im Scripting Forum, ist das eigentliche Problem nicht ein Script oder ein Befehl, der nicht wie gewünscht, bzw. wie erwartet funktioniert. Das Problem ist das Unverständnis bzw. die Unkenntnis der gemanagten Systeme. Was ist denn Deine eigentliche Aufgabenstellung? Was machst Du denn mit der Information, wer das Fileshare gefüllt hat? Wird derjenige entlassen? Werden seine Daten wieder gelöscht?  ;-) Ist diese Datenerhebung mit dem Betriebsrat abgestimmt? :aha2:

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...