【问题标题】:Get total size of all Shared Folders (Except Admin Shares) from a list of Servers?从服务器列表中获取所有共享文件夹(管理员共享除外)的总大小?
【发布时间】:2015-08-26 23:23:08
【问题描述】:

我希望计算多个不同服务器上所有共享文件夹(管理员共享除外)的总大小(将所有访问的文件合并到 NAS 盒以便于备份/恢复),但我在查找时遇到了一些问题一个解决方案。

我确定这可以在 powershell 中完成,但我找不到正确的信息让我继续前进,我目前可以吐出服务器上所有共享的列表,但不知道从这里去哪里:

$servers =@(
"server1",
"server2")

foreach($server in $servers)
{
    get-WmiObject Win32_Share -computerName $server -filter "Type = 0" 
}

【问题讨论】:

  • 你想要什么总大小?请记住,您很容易重复计算(例如,共享文件夹的子文件夹本身就是共享的)。

标签: powershell wmi


【解决方案1】:

我会尝试使用Get-ChildItem 列出文件并使用Measure-Object 来计算大小

$servers = @("server1", "server2")
$sizes = @()
foreach($server in $servers) {
  write-host "Server: $server"
  $serverSizes = @(gwmi -class Win32_Share -ComputerName $server -filter "Type = 0" | 
    % { 
      write-host " share: $($_.Name)"
      $s = gci \\$server\$($_.Name) -recurse -force | Measure-Object -Property length -Sum
      New-Object PSObject -property @{Name=$_.Name; Server=$server; TotalSize=$s.Sum } 
    })
  if ($serverSizes) {
     $totalServerSize = $serverSizes | Measure-Object -Property TotalSize -Sum
     $serverSizes += New-Object PSObject -property @{Name="__Total__"; Server=$server; TotalSize=$totalServerSize.Sum } 
     $sizes += $serverSizes
  }
}

然后你可以例如选择这样的总尺寸:

$sizes | 
  ? { $_.Name -eq '__Total__' } | 
  Select-Object Server,@{L='Size in MB'; E={$_.TotalSize/1mb}},@{L='Size in GB'; E={$_.TotalSize/1gb}}

【讨论】:

  • 谢谢 stej,效果很好,唯一的问题是我不知道总输出的度量大小是多少(MB,GB?)
  • 编辑代码并添加了以 MB 和 GB 为单位计算大小的 Select-Object。
  • 感谢 stej 创造奇迹!作为副作用,这也有助于我找出哪些文件夹没有正确的权限以供管理服务(备份作业等)访问。
猜你喜欢
  • 2016-02-25
  • 1970-01-01
  • 2021-08-02
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多