powershell 单个文件夹树大小报告

qni6mghb  于 2023-02-19  发布在  Shell
关注(0)|答案(2)|浏览(134)

我正在尝试创建一个非常具体的Powershell报告脚本,我可以通过CSV或TXT输入服务器列表,并让它检查每个服务器上存在的特定文件夹路径,然后将这些信息输出到一个带有服务器名称和单个文件夹树总大小的格式化CSV文件中。
我一直在看下面的帖子:(Powershell folder size of folders without listing Subdirectories,因为它似乎有我需要完成的最接近的代码示例,但没有一个是为服务器报表输入和输出设置的。
脚本不需要任何凭证,因为它将以提升的权限运行。我不认为函数是必要的,因为我计划在不同的情况下更改定义的路径。
我通常很擅长将我找到的不同脚本拼凑在一起,但是我有点难找到与这个函数完全匹配的脚本,所以我甚至不知道从哪里开始,我是powershell的新手,还不太擅长手工编写复杂的脚本。

w1jd8yoj

w1jd8yoj1#

servers.txt
 server1
 server2

有两种方法,一种是smb,一种是winRM
1 + Powershell folder size of folders without listing Subdirectories

$servers = Get-Content "$PSScriptRoot\servers.txt"
$path = "c$\Distr"
$result = @()
foreach ($server in $servers){
  $fullpath = "\\" + $server + "\" + "$path"
  $fullpath
  $size = (Get-ChildItem -Recurse -Force $fullpath | Measure-Object -Property Length -Sum).sum 
  $array = "" | Select server, size
  $array.server = $server
  $array.size =  $size
  $result+=$array
}

$result |Export-Csv -Delimiter ";" -Encoding UTF8 -Path "$PSScriptRoot\result.csv"

如果网络连接足够慢,最好使用WinRM,但我手头没有示例。

jyztefdp

jyztefdp2#

感谢rinat gadev提供的启动代码,这是我的最终版本,它做了一些调整,完全符合我的要求。

$servers = Get-Content "$PSScriptRoot\servers.txt"
$path = "c$\Distr"
$result = @()
foreach ($server in $servers){
  $fullpath = "\\" + $server + "\" + "$path"
  $fullpath
  $size = (Get-ChildItem -Recurse -Force $fullpath | Measure-Object -Property Length -Sum ).sum | ForEach-Object {[math]::Round($_/1GB,2)}
  $array = "" | Select-Object Server, Size
  $array.server = $server
  $array.size = $size 
  $result+=$array
}

$result | Export-Csv -Path "$PSScriptRoot\result.csv"-NoTypeInformation -UseCulture

相关问题