Главная

Thursday, 2 June 2022

Учет файловых shared folders.


Всем привет.

Джеффри Хикс в свое время публиковал статью по PowerShell, посвященную управлению папками на файловых серверах. В оригинале статья была разбита на две части: построение отчетов по файловому серверу и непосредственно управление файловыми шарами. В первой части были рассмотрено построение отчетов.

Вчера я провел аудит первой части, подумав, зачем мне изобретать велосипед, если такую задачу наверняка уже решали. Так ревизии подвергнулалсь первая часть в разрезе:

  • список всех сетевых папок на компьютере;
  • отчет о размерах высокоуровневых сетевых папок;
  • отчет об использовании файловых шар;
  • отчет который сгруппировал файловые шары по владельцу.

Собственно подход и продвижение по пунктам, даже в переводе (оригинал я уже не нашел), вы можете найти здесь. Мой результат после ревизии кода получился следующий:

$ServerName = 'Имя сервера'

$share = Get-WmiObject -Class Win32_Share -ComputerName $ServerName –filter "type=0 AND name like '%[^$]'"

$share.path

Отчет 1: про размеры высокоуровневых сетевых папок.

$sb={

$shares=Get-WmiObject -Class Win32_Share -filter "type=0 AND name like '%[^$]'"

foreach ($share in $shares) {

dir $share.path | where {$_.PSIscontainer} | `

foreach {

  $stats = dir $_.Fullname -recurse -errorAction 'SilentlyContinue' | where {-NOT $_.PSIscontainer} | `

  Measure-object -Property Length -sum  

  New-Object -TypeName PSObject -Property @{ 

    Computername=$env:Computername

    Path=$_.Name

    Fullname=$_.Fullname

    SizeMB=[math]::Round(($stats.sum/1MB),2)

    NumberFiles=$stats.count

    } #property

  } #foreach stats

  }

} #sb


$results = Invoke-Command -ScriptBlock $sb -ComputerName $ServerName -HideComputerName

$results | Format-Table Computername,Fullname,SizeMB,NumberFiles -autosize


Отчет 2: про использование файловых шар.

$sb={

$shares=Get-WmiObject -Class Win32_Share -filter "type=0 AND name like '%[^$]'"


foreach ($share in $shares) {

#Suppress any access denied error messages.

Write-Host "Measuring $($share.path)" -ForegroundColor Green


$stats=dir $share.path -Recurse -ErrorAction SilentlyContinue |

Where {-Not $_.PSIscontainer} |

Measure-Object -Property Length -Sum

$hash=@{

Computername=$env:Computername

Path=$share.path

Share=$share.Name

SizeMB=[math]::Round(($stats.sum/1MB),2)

Files=$stats.count

}

#Write a custom object to the pipeline for each share.

New-Object -TypeName PSObject -Property $hash

} #foreach $share


}#sb


$results = Invoke-Command -ScriptBlock $sb -ComputerName $ServerName -HideComputerName

$results | sort SizeKB –Descending | Select Computername,Share,SizeMB,Files | ft -auto


Пример 3: группируем файловые шары по владельцу.

$sb={

$shares = Get-WmiObject -Class Win32_Share -filter "type=0 AND name like '%[^$]'"

foreach ($share in $shares) {

#Suppress any access denied error messages.

Write-Host "Measuring $($share.path)" -ForegroundColor Green

$data = dir $share.path | where {-not $_.PSIsContainer} | select name, @{Name="Owner";Expression={(Get-ACL -LiteralPath $_.fullname).Owner}},length 

$data | group -property owner | Select @{Name="Computername";Expression={$env:computername}},@{Name="Path";Expression={$share.path}},Name,Count,@{Name="Size";Expression={($_.Group | Measure-Object -Property Length -sum).Sum}}

 }

} #sb

$results = Invoke-Command -ScriptBlock $sb -ComputerName  $ServerName -HideComputerName | Select * -ExcludeProperty RunspaceID

$results | Sort Size | ft -auto

По последнему отчету замечание - увы, но запрос не учитывает вложенность и считает только первый уровень файловой шары.

На сегодня все.

Слава Украине!

No comments:

Post a Comment

А что вы думаете по этому поводу?