Размеры файлов в общей папке с разрешениями

Мне было поручено экспортировать все размеры файлов по отдельности во все общие папки, существующие на компьютере, за исключением системных общих ресурсов с разрешениями ACL и Shared. Что-то вроде вывода Treesize с разрешениями Shared и ACL.

Я пробовал приведенный ниже код, но он не показывает, что мне нужно на выходе.

Любая помощь будет оценена.

function Get-ShareSize {
    Param(
    [String[]]$ComputerName = $env:computername
    )

Begin{$objFldr = New-Object -com Scripting.FileSystemObject}

Process{
    foreach($Computer in $ComputerName){
        Get-WmiObject Win32_Share -ComputerName $Computer -Filter "not name like '%$'" | %{
            $Path = $_.Path -replace 'C:',"\\$Computer\c$"
            $Size = ($objFldr.GetFolder($Path).Size) / 1GB
            New-Object PSObject -Property @{
            Name = $_.Name
            Path = $Path
            Description = $_.Description
            Size = $Size
            }
        }
    }
}
}

Get-ShareSize -ComputerName localhost

person Anit    schedule 10.05.2019    source источник


Ответы (1)


Ваш код уже выглядит неплохо, но...

То, как вы используете -Filter, неверно, а также часть, в которой вы конвертируете $_.Path в путь UNC, неверна.

Кроме того, нам не нужен объект Com (Scripting.FileSystemObject), чтобы получить фактический размер общего ресурса.

Попробуй это

function Get-ShareSize {
    Param(
        [String[]]$ComputerName = $env:computername
    )

    foreach($Computer in $ComputerName){
        Get-WmiObject Win32_Share -ComputerName $Computer | Where-Object { $_.Name -notlike '*$' } | ForEach-Object {
            # convert the Path into a UNC pathname
            $UncPath = '\\{0}\{1}' -f $Computer, ($_.Path -replace '^([A-Z]):', '$1$')
            # get the folder size
            try {
                $Size = (Get-ChildItem $UncPath -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1GB
            }
            catch {
                Write-Warning "Could not get the file size for '$uncPath'"
                $Size = 0
            }
            # output the details
            [PSCustomObject]@{
                'Name'        = $_.Name
                'LocalPath'   = $_.Path
                'UNCPath'     = $UncPath
                'Description' = $_.Description
                'Size'        = '{0:N2} GB' -f $Size  # format the size to two decimals
            }
        }
    }
}

Get-ShareSize -ComputerName localhost

надеюсь, это поможет

person Theo    schedule 10.05.2019
comment
Спасибо за ответ, Тео. Что я хочу, так это размеры файлов в этих общих папках вместо общего размера папки и разрешений для общей папки и папки NTFS. - person Anit; 10.05.2019