Всем привет.
Джеффри Хикс в свое время публиковал статью по 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